[entropy.tools] update API of generate_entropy_delta() and generate_entropy_delta_file_name(), improve reliability of fetching the right file.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user