@@ -677,12 +677,15 @@ def _fmt_prop(self, k, v):
677677 else :
678678 return str (v )
679679
680- def __str__ (self , t = "" ):
680+ def __str__ (self , t = "" , sort_keys = False ):
681+ props = self ._properties .items ()
682+ if sort_keys :
683+ props = sorted (props )
681684 return "\n " .join ([
682685 t + f"{ self .name } {{" ,
683- * (t + f" { repr (k )[1 :- 1 ]} = { self ._fmt_prop (k , v ).replace ('\n ' , '\n ' + t + ' ' )} " for k , v in self . _properties . items () if k != "name" ),
686+ * (t + f" { repr (k )[1 :- 1 ]} = { self ._fmt_prop (k , v ).replace ('\n ' , '\n ' + t + ' ' )} " for k , v in props if k != "name" ),
684687 * (["" ] if self ._children else []),
685- * (i .__str__ (t + " " ) for i in self ._children ),
688+ * (i .__str__ (t + " " , sort_keys ) for i in self ._children ),
686689 t + "}"
687690 ])
688691
@@ -809,6 +812,7 @@ def load_adt(data):
809812 parser = argparse .ArgumentParser (description = 'ADT test for m1n1' )
810813 parser .add_argument ('input' , type = pathlib .Path )
811814 parser .add_argument ('output' , nargs = '?' , type = pathlib .Path )
815+ parser .add_argument ('--sort-keys' , help = 'sort property keys within a node (useful for diffs)' , action = 'store_true' )
812816 parser .add_argument ('-r' , '--retrieve' , help = 'retrieve and store the adt from m1n1' , action = 'store_true' )
813817 parser .add_argument ('-a' , '--dump-addr' , help = 'dump address lookup table' , action = 'store_true' )
814818 args = parser .parse_args ()
@@ -825,7 +829,7 @@ def load_adt(data):
825829 adt_data = args .input .read_bytes ()
826830
827831 adt = load_adt (adt_data )
828- print (adt )
832+ print (adt . __str__ ( sort_keys = args . sort_keys ) )
829833 new_data = adt .build ()
830834 if args .output is not None :
831835 args .output .write_bytes (new_data )
0 commit comments