2222 'linux' : Template ('cycode-linux$suffix$ext' ),
2323 'windows' : Template ('cycode-win$suffix.exe$ext' ),
2424}
25+ _WINDOWS = 'windows'
26+ _WINDOWS_EXECUTABLE_SUFFIX = '.exe'
2527
2628DirHashes = List [Tuple [str , str ]]
2729
@@ -31,21 +33,38 @@ def get_hash_of_file(file_path: Union[str, Path]) -> str:
3133 return hashlib .sha256 (f .read ()).hexdigest ()
3234
3335
34- def calculate_hash_of_every_file_in_the_directory (dir_path : Path ) -> DirHashes :
36+ def get_hashes_of_many_files (root : str , file_paths : List [str ]) -> DirHashes :
37+ hashes = []
38+
39+ for file_path in file_paths :
40+ file_path = os .path .join (root , file_path )
41+ file_hash = get_hash_of_file (file_path )
42+
43+ hashes .append ((file_hash , file_path ))
44+
45+ return hashes
46+
47+
48+ def get_hashes_of_every_file_in_the_directory (dir_path : Path ) -> DirHashes :
3549 hashes = []
3650
3751 for root , _ , files in os .walk (dir_path ):
38- for file in files :
39- file_path = os .path .join (root , file )
40- file_hash = get_hash_of_file (file_path )
52+ hashes .extend (get_hashes_of_many_files (root , files ,))
4153
42- relative_file_path = file_path [file_path .find (dir_path .name ):]
43- hashes .append ((file_hash , relative_file_path ))
54+ return hashes
55+
56+
57+ def normalize_hashes_db (hashes : DirHashes , dir_path : Path ) -> DirHashes :
58+ normalized_hashes = []
59+
60+ for file_hash , file_path in hashes :
61+ relative_file_path = file_path [file_path .find (dir_path .name ):]
62+ normalized_hashes .append ((file_hash , relative_file_path ))
4463
4564 # sort by file path
46- hashes .sort (key = lambda x : x [1 ])
65+ normalized_hashes .sort (key = lambda hash_item : hash_item [1 ])
4766
48- return hashes
67+ return normalized_hashes
4968
5069
5170def is_arm () -> bool :
@@ -111,8 +130,9 @@ def process_executable_file(input_path: Path, is_onedir: bool) -> str:
111130 hash_file_path = get_cli_hash_path (output_path , is_onedir )
112131
113132 if is_onedir :
114- hashes = calculate_hash_of_every_file_in_the_directory (input_path )
115- write_hashes_db_to_file (hashes , hash_file_path )
133+ hashes = get_hashes_of_every_file_in_the_directory (input_path )
134+ normalized_hashes = normalize_hashes_db (hashes , input_path )
135+ write_hashes_db_to_file (normalized_hashes , hash_file_path )
116136 else :
117137 file_hash = get_hash_of_file (input_path )
118138 write_hash_to_file (file_hash , hash_file_path )
@@ -131,9 +151,9 @@ def main() -> None:
131151 input_path = Path (args .input )
132152 is_onedir = input_path .is_dir ()
133153
134- if get_os_name () == 'windows' and not is_onedir and input_path .suffix != '.exe' :
154+ if get_os_name () == _WINDOWS and not is_onedir and input_path .suffix != _WINDOWS_EXECUTABLE_SUFFIX :
135155 # add .exe on windows if was missed (to simplify GHA workflow)
136- input_path = input_path .with_suffix ('.exe' )
156+ input_path = input_path .with_suffix (_WINDOWS_EXECUTABLE_SUFFIX )
137157
138158 artifact_name = process_executable_file (input_path , is_onedir )
139159
0 commit comments