diff --git a/britney.py b/britney.py index c7fda07..692a825 100644 --- a/britney.py +++ b/britney.py @@ -291,9 +291,9 @@ class Britney: # Sort the architecture list allarches = sorted(self.options.architectures.split()) arches = [x for x in allarches if x in self.options.nobreakall_arches] - arches += [x for x in allarches if x not in arches and x not in self.options.fucked_arches] - arches += [x for x in allarches if x not in arches and x not in self.options.break_arches] - arches += [x for x in allarches if x not in arches and x not in self.options.new_arches] + arches += [x for x in allarches if x not in arches and x not in self.options.fucked_arches.split()] + arches += [x for x in allarches if x not in arches and x not in self.options.break_arches.split()] + arches += [x for x in allarches if x not in arches and x not in self.options.new_arches.split()] arches += [x for x in allarches if x not in arches] self.options.architectures = arches self.options.smooth_updates = self.options.smooth_updates.split() @@ -964,6 +964,12 @@ class Britney: excuse.set_vers(src['version'], None) src['maintainer'] and excuse.set_maint(src['maintainer'].strip()) src['section'] and excuse.set_section(src['section'].strip()) + + # if the package is blocked, skip it + if self.hints['block'].has_key('-' + pkg): + exc.addhtml("Not touching package, as requested by %s (contact debian-release if update is needed)" % hints['block']['-' + pkg]) + return False + excuse.addhtml("Valid candidate") self.excuses.append(excuse) return True @@ -2265,7 +2271,27 @@ class Britney: # run the first round of the upgrade self.__log("> First loop on the packages with depth = 0", type="I") + + # separate runs for break arches + allpackages = [] + normpackages = self.upgrade_me[:] + archpackages = {} + for a in self.options.break_arches.split(): + archpackages[a] = [p for p in normpackages if p.endswith("/" + a)] + normpackages = [p for p in normpackages if not p.endswith("/" + a)] + self.upgrade_me = normpackages + self.output_write("info: main run\n") self.do_all() + allpackages += self.upgrade_me + for a in self.options.break_arches.split(): + x = self.options.break_arches + self.options.break_arches = " ".join([x for x in self.options.break_arches.split() if x != a]) + self.upgrade_me = archpackages[a] + self.output_write("info: broken arch run for %s\n" % (a)) + self.do_all() + allpackages += self.upgrade_me + self.options.break_arches = x + self.upgrade_me = allpackages # run the auto hinter if not self.options.compatible: