diff --git a/scripts/package_release.py b/scripts/package_release.py index 3f311ebc04ef2a123ae2b8aebebf6a7e496308d9..1b33414c155aa7cafc6b1a4c2cc677b04bc8d116 100755 --- a/scripts/package_release.py +++ b/scripts/package_release.py @@ -26,7 +26,20 @@ def generate_md5sums_file(input_files: list[str], output_file: str): # This might should be used somewhere before, # but the previous state was not to fail when a file in # the list did not exist, like in copy files - md5sums = {os.path.basename(f): md5(f) for f in input_files if os.path.exists(f)} + md5sums = {} + for item in input_files: + # Check if the item ends with "/" + if item.endswith("/"): + # If it does, recursively calculate MD5 sums for all files in the directory + for root, files in os.walk(item): + for file in files: + file_path = os.path.join(root, file) + md5sums[os.path.relpath(file_path, item)] = md5(file_path) + else: + # Otherwise, calculate MD5 sum for the file + if os.path.exists(item): + md5sums[os.path.basename(item)] = md5(item) + output_dir = os.path.dirname(output_file) if output_dir: os.makedirs(output_dir, exist_ok=True) @@ -37,19 +50,29 @@ def generate_md5sums_file(input_files: list[str], output_file: str): def copy_files(files: list[str], target_dir: str): """ - Copy given files to target_dir. Create target_dir, if it does not exist. Subfolder - hierarchies on the input files will not be preserved, only plain files are copied. + Copy given files or directories to target_dir. Create target_dir, if it does not exist. Subfolder + hierarchies on the input directories will be preserved. Only plain files are copied. """ if target_dir is None: return os.makedirs(target_dir, exist_ok=True) - for source_file in files: - if os.path.exists(source_file): - target_file = os.path.join(target_dir, os.path.basename(source_file)) - print(f"Copy: {source_file} -> {target_file}") - shutil.copyfile(source_file, target_file, follow_symlinks=True) + for source in files: + # Check if the source ends with "/" + if source.endswith("/"): + # If it does, copy the whole directory recursively + old_dir = os.path.abspath(source) + new_dir = os.path.join(target_dir, os.path.basename(source.rstrip("/"))) + print(f"Copy Directory: {old_dir} -> {new_dir}") + shutil.copytree(old_dir, new_dir) else: - print(f"Missing: {source_file}") + # Otherwise, treat it as a file and copy it directly + source_file = os.path.abspath(source) + if os.path.exists(source_file): + target_file = os.path.join(target_dir, os.path.basename(source_file)) + print(f"Copy: {source_file} -> {target_file}") + shutil.copyfile(source_file, target_file, follow_symlinks=True) + else: + print(f"Missing: {source_file}") def main():