From 24a9a97d59fc4cd6382d7b466024ca8e7bb669d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fatih=20A=C5=9F=C4=B1c=C4=B1?= Date: Wed, 6 Oct 2010 10:53:55 +0000 Subject: [PATCH] util: Add support for parsing the upcoming delta package name format This also adds utility functions to split fields of new filename format. --- pisi/util.py | 91 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 85 insertions(+), 6 deletions(-) diff --git a/pisi/util.py b/pisi/util.py index 12464c0d..1c21112c 100644 --- a/pisi/util.py +++ b/pisi/util.py @@ -685,18 +685,97 @@ def parse_package_name(package_name): return name, "%s-%s" % (version, release) -def parse_delta_package_name(package_name): - """Separate delta package name and release infos - - example: tasma-5-7.pisi.delta -> (tasma, 5, 7) - +def parse_delta_package_name_legacy(package_name): + """Separate delta package name and release infos for package formats <= 1.1. + + example: tasma-5-7.delta.pisi -> (tasma, 5, 7) """ name, build = parse_package_name(package_name) build = build[:-len(ctx.const.delta_package_suffix)] buildFrom, buildTo = build.split("-") - + return name, buildFrom, buildTo +def parse_delta_package_name(package_name): + """Separate delta package name and release infos + + example: tasma-5-7-p11-x86_64.delta.pisi -> (tasma, 5, 7) + """ + + # Strip extension if exists + if package_name.endswith(ctx.const.delta_package_suffix): + package_name = remove_suffix(ctx.const.delta_package_suffix, + package_name) + + try: + name, source_release, target_release, distro_id, arch = \ + package_name.rsplit("-", 4) + + # Arch field cannot start with a digit. If a digit is found, + # the package might have an old format. Raise here to call + # the legacy function. + if not arch or arch[0] in string.digits: + raise ValueError + + except ValueError: + try: + return parse_delta_package_name_legacy(package_name) + except: + raise Error(_("Invalid delta package name: %s") % package_name) + + return name, source_release, target_release + +def split_package_filename(filename): + """Split fields in package filename. + + example: tasma-1.0.3-5-p11-x86_64.pisi -> (tasma, 1.0.3, 5, p11, x86_64) + """ + + # Strip extension if exists + if filename.endswith(ctx.const.package_suffix): + filename = remove_suffix(ctx.const.package_suffix, filename) + + try: + name, version, release, distro_id, arch = filename.rsplit("-", 4) + + # Arch field cannot start with a digit. If a digit is found, + # the package might have an old format. + if not arch or arch[0] in string.digits: + raise ValueError + + except ValueError: + name, version = parse_package_name_legacy(filename) + version, release, build = split_version(version) + distro_id = arch = None + + return name, version, release, distro_id, arch + +def split_delta_package_filename(filename): + """Split fields in delta package filename. + + example: tasma-5-7-p11-x86_64.delta.pisi -> (tasma, 5, 7, p11, x86-64) + """ + + # Strip extension if exists + if filename.endswith(ctx.const.delta_package_suffix): + filename = remove_suffix(ctx.const.delta_package_suffix, filename) + + try: + name, source_release, target_release, distro_id, arch = \ + filename.rsplit("-", 4) + + # Arch field cannot start with a digit. If a digit is found, + # the package might have an old format. + if not arch or arch[0] in string.digits: + raise ValueError + + except ValueError: + # Old formats not supported + name = parse_delta_package_name_legacy(filename)[0] + source_release = target_release = None + + return name, source_release, target_release + def split_version(package_version): """Split version, release and build parts of a package version