From 74d1b70096f69d335a552d900d45731be2bbd93b Mon Sep 17 00:00:00 2001 From: "Adam D. Barratt" Date: Sat, 2 Feb 2013 22:47:56 +0000 Subject: [PATCH] Don't flag unbuilt binary *pu binNMUs for removal in excuses Originally when binNMUs for packages in testing were scheduled, the binaries would be installed into tpu with no accompanying source. This allowed the "removed binary" portions of should_upgrade_srcarch() to be skipped (as britney had generated a faux source record). dak now adds the source package to tpu in such cases which lead to the "removed binary" checks being applied to binNMUs in tpu with potentially destructive consequences. For example, if a package with amd64 and i386 binaries in testing were binNMUed on just amd64, britney would notice that there were no i386 binaries in tpu and subsequently remove the i386 binaries from testing as well. In order to resolve this, we skip the check for removed binaries when building excuses for a binary-only migration via *pu. Signed-off-by: Adam D. Barratt --- britney.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/britney.py b/britney.py index ab87016..16151eb 100755 --- a/britney.py +++ b/britney.py @@ -1213,17 +1213,20 @@ class Britney(object): if not anywrongver and (anyworthdoing or not self.sources[suite][src][FAKESRC]): srcv = self.sources[suite][src][VERSION] ssrc = self.same_source(source_t[VERSION], srcv) - # for every binary package produced by this source in testing for this architecture - for pkg in sorted([x.split("/")[0] for x in self.sources['testing'][src][BINARIES] if x.endswith("/"+arch)]): - # if the package is architecture-independent, then ignore it - if self.binaries['testing'][arch][0][pkg][ARCHITECTURE] == 'all': - excuse.addhtml("Ignoring removal of %s as it is arch: all" % (pkg)) - continue - # if the package is not produced by the new source package, then remove it from testing - if pkg not in self.binaries[suite][arch][0]: - tpkgv = self.binaries['testing'][arch][0][pkg][VERSION] - excuse.addhtml("Removed binary: %s %s" % (pkg, tpkgv)) - if ssrc: anyworthdoing = True + # if this is a binary-only migration via *pu, we never want to try + # removing binary packages + if not (ssrc and suite != 'unstable'): + # for every binary package produced by this source in testing for this architecture + for pkg in sorted([x.split("/")[0] for x in self.sources['testing'][src][BINARIES] if x.endswith("/"+arch)]): + # if the package is architecture-independent, then ignore it + if self.binaries['testing'][arch][0][pkg][ARCHITECTURE] == 'all': + excuse.addhtml("Ignoring removal of %s as it is arch: all" % (pkg)) + continue + # if the package is not produced by the new source package, then remove it from testing + if pkg not in self.binaries[suite][arch][0]: + tpkgv = self.binaries['testing'][arch][0][pkg][VERSION] + excuse.addhtml("Removed binary: %s %s" % (pkg, tpkgv)) + if ssrc: anyworthdoing = True # if there is nothing wrong and there is something worth doing, this is a valid candidate if not anywrongver and anyworthdoing: