@@ -69,8 +69,7 @@ class OriginSummary(PostScanPlugin):
6969 or license expression is detected in 75% or more of total files in a directory
7070 """
7171 codebase_attributes = dict (
72- # TODO: we cannot maintain sort order with defaultdict
73- summarized_directories = attr .ib (default = attr .Factory (lambda : defaultdict (lambda : defaultdict (list ))))
72+ summarized_directories = attr .ib (default = attr .Factory (OrderedDict ))
7473 )
7574
7675 resource_attributes = dict (
@@ -157,10 +156,18 @@ def process_codebase(self, codebase, **kwargs):
157156 child .summarized_to = resource .path
158157 child .save (codebase )
159158
160- # TODO: Deal with maintaining sort order
159+ repacked_summarized_dirs = defaultdict ( lambda : defaultdict ( list ))
161160 for (holders , license_expression ), summarized_dirs in summarized_dirs_by_license_and_holder .items ():
162161 holder = '\n ' .join (holders )
163- codebase .attributes .summarized_directories [license_expression ][holder ].extend (sorted (summarized_dirs ))
162+ repacked_summarized_dirs [license_expression ][holder ].extend (summarized_dirs )
163+
164+ for license_expression , summarized_dirs_by_holders in sorted (repacked_summarized_dirs .items ()):
165+ for holder , summarized_dirs in sorted (summarized_dirs_by_holders .items ()):
166+ codebase_summarized_directories = codebase .attributes .summarized_directories
167+ if license_expression in codebase_summarized_directories :
168+ codebase .attributes .summarized_directories [license_expression ].update ({holder : sorted (summarized_dirs )})
169+ else :
170+ codebase .attributes .summarized_directories [license_expression ] = OrderedDict ({holder : sorted (summarized_dirs )})
164171
165172
166173def is_majority (count , files_count ):
0 commit comments