[master/f20-branch][makeupdates][PATCH] Don't use cached packages with different release id

Vratislav Podzimek vpodzime at redhat.com
Mon Nov 25 08:01:35 UTC 2013


On Wed, 2013-11-20 at 16:52 +0100, Martin Kolman wrote:
> Previously, locally cached RPMs were being used even
> when they had a different release id.
> This was quite an issue due to how branching works
> for Pykickstart and blivet, as for example the "newer"
> fc21 package might not have all the f20-branch bits
> the fc20 package has.
> 
> Signed-off-by: Martin Kolman <mkolman at redhat.com>
> ---
>  scripts/makeupdates | 31 +++++++++++++++++++++++--------
>  1 file changed, 23 insertions(+), 8 deletions(-)
> 
> diff --git a/scripts/makeupdates b/scripts/makeupdates
> index ac741df..f7ac204 100755
> --- a/scripts/makeupdates
> +++ b/scripts/makeupdates
> @@ -155,7 +155,15 @@ def check_package_version(filename, package):
>      filename = os.path.basename(filename)
>      # split the name into components
>      pkg_tuple = get_pkg_tuple(filename)
> -    return miscutils.rangeCheck(package.req_tuple, pkg_tuple)
> +    # get release ids for request and the package
> +    request_release = package.req_tuple[2][2]
> +    package_release = pkg_tuple[4]
> +    # rangeCheck actually ignores different release ids,
> +    # so we need to do it here
> +    if request_release != package_release:
> +        return False
> +    else:
> +        return bool(miscutils.rangeCheck(package.req_tuple, pkg_tuple))
>  
>  def doGitDiff(tag, args=None):
>      if args is None:
> @@ -406,6 +414,7 @@ def check_for_new_packages(tag, arch, added_rpms, specfile_path):
>      version_vars = {}
>      all_used_version_vars = {}
>      fedora_number = get_fedora_version()
> +    release_id = "fc%s" % fedora_number
>  
>      Package = namedtuple("Package", "name version version_request req_tuple")
>  
> @@ -462,8 +471,8 @@ def check_for_new_packages(tag, arch, added_rpms, specfile_path):
>          for package_name, version_request in packages_using_this_define:
>              if not version.count("-"):
>                  version = "%s-1" % version
> -            pkg_name = "%s-%s.fc%s.%s.rpm" % (package_name, version,
> -                                              fedora_number, arch)
> +            pkg_name = "%s-%s.%s.%s.rpm" % (package_name, version,
> +                                            release_id, arch)
>              pkg_tuple = get_pkg_tuple(pkg_name)
>              req_tuple = get_req_tuple(pkg_tuple, version_request)
>              new_packages[package_name] = Package(package_name, version,
> @@ -511,7 +520,7 @@ def check_for_new_packages(tag, arch, added_rpms, specfile_path):
>              # newest package will be fetched from Koji anyway
>              if not version.count("-"):
>                  version = "%s-1" % version
> -            pkg_name = "%s-%s.fc%s.%s.rpm" % (package_name, version, fedora_number, arch)
> +            pkg_name = "%s-%s.%s.%s.rpm" % (package_name, version, release_id, arch)
>              pkg_tuple = get_pkg_tuple(pkg_name)
>          else:
>              pkg_tuple = (package_name, arch, '', '', '')
> @@ -545,14 +554,15 @@ def check_for_new_packages(tag, arch, added_rpms, specfile_path):
>          except ValueError:
>              print("malformed RPM name ? : %s" % path)
>      # remove available packages from the list
> -    new_packages, include_rpms = remove_local_packages(new_packages, arch, added_names)
> +    new_packages, include_rpms = remove_local_packages(new_packages, arch,
> +                                                       release_id, added_names)
>      # if some packages are not locally available, download them from Koji
>      if new_packages:
>          include_rpms.extend(get_RPMs_from_koji(new_packages, fedora_number, arch))
>      # return absolute paths for the packages
>      return map(os.path.abspath, include_rpms)
>  
> -def remove_local_packages(packages, arch, added_rpms):
> +def remove_local_packages(packages, arch, release_id, added_rpms):
>      """Remove locally available RPMs from the list of needed packages,
>      return locally unavailable packages and paths to relevant locally
>      available RPMs for inclusion"""
> @@ -593,8 +603,13 @@ def remove_local_packages(packages, arch, added_rpms):
>          if proc.returncode != 0:
>              continue
>          name, version, release = proc_output[0].split()
> -        # add the build number, extracted from release
> -        version_build = "%s-%s" % (version, release.split(".")[0])
> +        # get the build number and release id
> +        build_id, package_release_id = release.split(".", 1)
> +        # skip cached RPMs that have different release id
> +        if package_release_id != release_id:
> +            continue
> +        # add the build id to the version string
> +        version_build = "%s-%s" % (version, build_id)
>          # check if the package is needed
>          if name in packages:
>              package = packages[name]
This looks good to me.

-- 
Vratislav Podzimek

Anaconda Rider | Red Hat, Inc. | Brno - Czech Republic



More information about the anaconda-patches mailing list