diff --git a/backportpackage b/backportpackage index 3d8ae58..4a1219e 100755 --- a/backportpackage +++ b/backportpackage @@ -205,8 +205,7 @@ def do_build(workdir, package, release, bp_version, builder, update): if update: if 0 != builder.update(release): - error('Failed to update %s chroot for %s.' % \ - (release, builder.get_name())) + sys.exit(1) return builder.build(os.path.join(workdir, '%s_%s.dsc' % (package, bp_version)), @@ -248,7 +247,7 @@ def do_backport(workdir, package, dscfile, version, suffix, release, build, if build: if 0 != do_build(workdir, package, release, bp_version, builder, update): - error('Package failed to build; aborting') + sys.exit(1) if upload: do_upload(workdir, package, bp_version, upload, prompt) diff --git a/ubuntutools/builder.py b/ubuntutools/builder.py index ca04473..dab6fea 100644 --- a/ubuntutools/builder.py +++ b/ubuntutools/builder.py @@ -35,12 +35,24 @@ class Builder(object): if not os.path.isdir(result_directory): os.makedirs(result_directory) + def build_failure(self, returncode, dsc_file): + if returncode != 0: + Logger.error("Failed to build %s from source with %s." % \ + (os.path.basename(dsc_file), self.name)) + return returncode + def get_architecture(self): return self.architecture def get_name(self): return self.name + def update_failure(self, returncode, dist): + if returncode != 0: + Logger.error("Failed to update %s chroot for %s." % \ + (dist, self.name)) + return returncode + class Pbuilder(Builder): def __init__(self): @@ -53,13 +65,15 @@ class Pbuilder(Builder): "--distribution", dist, "--architecture", self.architecture, "--buildresult", result_directory, dsc_file] Logger.command(cmd) - return subprocess.call(cmd) + returncode = subprocess.call(cmd) + return self.build_failure(returncode, dsc_file) def update(self, dist): cmd = ["sudo", "-E", "DIST=" + dist, "pbuilder", "--update", "--distribution", dist, "--architecture", self.architecture] Logger.command(cmd) - return subprocess.call(cmd) + returncode = subprocess.call(cmd) + return self.update_failure(returncode, dist) class Pbuilderdist(Builder): @@ -71,12 +85,14 @@ class Pbuilderdist(Builder): cmd = ["pbuilder-dist", dist, self.architecture, "build", dsc_file, "--buildresult", result_directory] Logger.command(cmd) - return subprocess.call(cmd) + returncode = subprocess.call(cmd) + return self.build_failure(returncode, dsc_file) def update(self, dist): cmd = ["pbuilder-dist", dist, self.architecture, "update"] Logger.command(cmd) - return subprocess.call(cmd) + returncode = subprocess.call(cmd) + return self.update_failure(returncode, dist) class Sbuild(Builder): @@ -91,10 +107,10 @@ class Sbuild(Builder): cmd = ["sbuild", "--arch-all", "--dist=" + dist, "--arch=" + self.architecture, dsc_file] Logger.command(cmd) - result = subprocess.call(cmd) + returncode = subprocess.call(cmd) Logger.command(["cd", workdir]) os.chdir(workdir) - return result + return self.build_failure(returncode, dsc_file) def update(self, dist): cmd = ["schroot", "--list"] @@ -124,7 +140,8 @@ class Sbuild(Builder): Logger.command(cmd + [chroot]) ret = subprocess.call(cmd + [chroot]) if ret != 0: - return ret + return self.update_failure(ret, dist) + return 0 def getBuilder(builder=None): diff --git a/ubuntutools/sponsor_patch/main.py b/ubuntutools/sponsor_patch/main.py index 6e6cc11..dce1477 100644 --- a/ubuntutools/sponsor_patch/main.py +++ b/ubuntutools/sponsor_patch/main.py @@ -403,8 +403,6 @@ def main(bug_number, update, build, edit, keyid, upload, workdir, builder, if update: ret = builder.update(dist) if ret != 0: - Logger.error("Failed to update %s chroot for %s." % \ - (dist, builder.get_name())) ask_for_manual_fixing() break # We want to update the build environment only once, but not @@ -414,9 +412,6 @@ def main(bug_number, update, build, edit, keyid, upload, workdir, builder, # build package result = builder.build(new_dsc_file, dist, buildresult) if result != 0: - Logger.error("Failed to build %s from source with %s." % \ - (os.path.basename(new_dsc_file), - builder.get_name())) question = Question(["yes", "update", "retry", "no"]) answer = question.ask("Do you want to resolve this issue " "manually", "yes")