Recently when a build is missing, the prefer_new option is set and a newer build exists, the latest build is included in the buildroot. We should rather be using a closest newer build if it exists, the latest one can be too new, with different dependencies etc. --- util/koji-shadow | 27 ++++++++++++++++----------- 1 files changed, 16 insertions(+), 11 deletions(-)
diff --git a/util/koji-shadow b/util/koji-shadow index 1967fbd..3ae2e85 100755 --- a/util/koji-shadow +++ b/util/koji-shadow @@ -649,21 +649,26 @@ class BuildTracker(object): return -1
def newerBuild(self, build, tag): - #XXX: secondary arches need a policy to say if we have newer builld localy it will be the substitute - localLatestBuild = session.getLatestBuilds(tag, package=str(build.name)) - if not localLatestBuild == []: - parentevr = (str(build.epoch), build.version, build.release) - parentnvr = (str(build.name), build.version, build.release) - latestevr = (str(localLatestBuild[0]['epoch']), localLatestBuild[0]['version'], localLatestBuild[0]['release']) + #XXX: secondary arches need a policy to say if we have newer build localy it will be the substitute + localBuilds = session.listTagged(tag, inherit=True, package=str(build.name)) + newer = None + parentevr = (str(build.epoch), build.version, build.release) + parentnvr = (str(build.name), build.version, build.release) + for b in localBuilds: + latestevr = (str(b['epoch']), b['version'], b['release']) newestRPM = self.rpmvercmp( parentevr, latestevr) if options.debug: print "remote evr: %s \nlocal evr: %s \nResult: %s" % (parentevr, latestevr, newestRPM) if newestRPM == -1: - #the local is newer - info = session.getBuild("%s-%s-%s" % (str(localLatestBuild[0]['name']), localLatestBuild[0]['version'], localLatestBuild[0]['release'] )) - if info: - build = LocalBuild(info) - self.substitute_idx[parentnvr] = build + newer = b + else: + break + #the local is newer + if newer is not None: + info = session.getBuild("%s-%s-%s" % (str(newer['name']), newer['version'], newer['release'] )) + if info: + build = LocalBuild(info) + self.substitute_idx[parentnvr] = build return build return None
--- util/koji-shadow | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/util/koji-shadow b/util/koji-shadow index 3ae2e85..4bbbd31 100755 --- a/util/koji-shadow +++ b/util/koji-shadow @@ -745,7 +745,7 @@ class BuildTracker(object): if depth > 0: print "%sDep replaced: %s->%s" % (head, build.nvr, replace) return build - if options.prefer_new and not (options.build or build.state == "common"): + if options.prefer_new and (depth > 0) and not (options.build or build.state == "common"): latestBuild = self.newerBuild(build, tag) if latestBuild != None: build.substitute = latestBuild.nvr
buildsys@lists.fedoraproject.org