diff --git a/libraries/entropy/tools.py b/libraries/entropy/tools.py index 0bdb359ac..3ad731d4a 100644 --- a/libraries/entropy/tools.py +++ b/libraries/entropy/tools.py @@ -1065,29 +1065,24 @@ def unpack_bzip2(bzip2filepath): os.rename(tmp_path, filepath) return filepath -def generate_entropy_delta_file_name(pkg_path_a, pkg_path_b, api = 0): +def generate_entropy_delta_file_name(pkg_name_a, pkg_name_b, hash_tag): """ - Generate Entropy package binary delta file name basing on package paths - given (from pkg_path_a to pkg_path_b). + Generate Entropy package binary delta file name basing on package file names + given (from pkg_path_a to pkg_path_b). hash_tag is by convention an md5 hash - @param pkg_path_a: package path A - @type pkg_path_a: string - @param pkg_path_a: package path B - @type pkg_path_a: string - @keyword api: for future usage (if api will change) - @type api: int + @param pkg_name_a: package file name A + @type pkg_name_a: string + @param pkg_name_b: package file name B + @type pkg_name_b: string + @param hash_tag: arbitrary hash tag appended to file name + @type hash_tag: string @return: package delta file name (not full path!) @rtype: string @raise AttributeError: if api is unsupported """ - if api != 0: - raise AttributeError("unsupported API") - pkg_path_a_name = os.path.basename(pkg_path_a) - pkg_path_b_name = os.path.basename(pkg_path_b) - delta_name = pkg_path_a_name + pkg_path_b_name - from_pkg_name = os.path.splitext(pkg_path_a_name.replace(":", "+"))[0] + from_pkg_name = os.path.splitext(pkg_name_a.replace(":", "+"))[0] delta_hashed_name = "%s~%s%s" % (from_pkg_name, - md5sum(pkg_path_b), etpConst['packagesdeltaext']) + hash_tag, etpConst['packagesdeltaext']) return delta_hashed_name def _delta_extract_bz2(bz2_path, new_path_fd): @@ -1122,7 +1117,8 @@ _DELTA_DECOMPRESSION_MAP = { } _DEFAULT_PKG_COMPRESSION = "bz2" -def generate_entropy_delta(pkg_path_a, pkg_path_b, pkg_compression = None): +def generate_entropy_delta(pkg_path_a, pkg_path_b, hash_tag, + pkg_compression = None): """ Generate Entropy package delta between pkg_path_a (from file) and pkg_path_b (to file). @@ -1131,6 +1127,8 @@ def generate_entropy_delta(pkg_path_a, pkg_path_b, pkg_compression = None): @type pkg_path_a: string @param pkg_path_a: package path B (to file) @type pkg_path_a: string + @param hash_tag: hash tag to append to Entropy package delta file name + @type hash_tag: string @keyword pkg_compression: default package compression, can be "bz2" or "gz". if None, "bz2" is selected. @type: string @@ -1165,8 +1163,9 @@ def generate_entropy_delta(pkg_path_a, pkg_path_b, pkg_compression = None): try: pkg_path_b_dir = os.path.dirname(pkg_path_b) - delta_fn = generate_entropy_delta_file_name(pkg_path_a, - pkg_path_b) + delta_fn = generate_entropy_delta_file_name( + os.path.basename(pkg_path_a), os.path.basename(pkg_path_b), + hash_tag) delta_file = os.path.join(pkg_path_b_dir, etpConst['packagesdeltasubdir'], delta_fn) delta_dir = os.path.dirname(delta_file) diff --git a/services/entropy-pkgdelta-generator b/services/entropy-pkgdelta-generator index 3e5a72ddc..010edfc08 100755 --- a/services/entropy-pkgdelta-generator +++ b/services/entropy-pkgdelta-generator @@ -67,8 +67,10 @@ def generate_package_deltas(directory, quiet): for from_pkg_name, to_pkg_name in sorted_pkgs_couples: pkg_path_a = os.path.join(directory, from_pkg_name) next_pkg_path = os.path.join(directory, to_pkg_name) + hash_tag = entropy.tools.md5sum(pkg_path_a) + \ + entropy.tools.md5sum(next_pkg_path) delta_fn = entropy.tools.generate_entropy_delta_file_name( - pkg_path_a, next_pkg_path) + from_pkg_name, to_pkg_name, hash_tag) delta_path = os.path.join(directory, etpConst['packagesdeltasubdir'], delta_fn) delta_path_md5 = delta_path + etpConst['packagesmd5fileext'] @@ -77,7 +79,7 @@ def generate_package_deltas(directory, quiet): sys.stderr.write(delta_path + " already exists\n") continue delta_file = entropy.tools.generate_entropy_delta(pkg_path_a, - next_pkg_path) + next_pkg_path, hash_tag) entropy.tools.create_md5_file(delta_file) if delta_file is not None: sys.stdout.write(delta_file + "\n") @@ -99,8 +101,10 @@ def cleanup_package_deltas(directory, quiet): for from_pkg_name, to_pkg_name in sorted_pkgs_couples: pkg_path_a = os.path.join(directory, from_pkg_name) next_pkg_path = os.path.join(directory, to_pkg_name) + hash_tag = entropy.tools.md5sum(pkg_path_a) + \ + entropy.tools.md5sum(next_pkg_path) delta_fn = entropy.tools.generate_entropy_delta_file_name( - pkg_path_a, next_pkg_path) + from_pkg_name, to_pkg_name, hash_tag) delta_path = os.path.join(directory, etpConst['packagesdeltasubdir'], delta_fn) if os.path.lexists(delta_path): @@ -111,6 +115,10 @@ def cleanup_package_deltas(directory, quiet): if not to_remove_deltas: sys.stdout.write("nothing to remove for %s\n" % (directory,)) for old_pkg_delta in to_remove_deltas: + try: + os.remove(old_pkg_delta + etpConst['packagesmd5fileext']) + except OSError: + pass try: os.remove(old_pkg_delta) sys.stdout.write(old_pkg_delta + " removed\n") @@ -119,10 +127,6 @@ def cleanup_package_deltas(directory, quiet): sys.stderr.write("cannot remove %s: %s\n" % (old_pkg_delta, err)) rc = 1 - try: - os.remove(old_pkg_delta + etpConst['packagesmd5fileext']) - except OSError: - pass return rc def _generator_argv(argv, quiet):