sponsor-patch: Add --update option to make sure build environment is

up to date (LP: #689605)
This commit is contained in:
Benjamin Drung 2010-12-17 14:35:27 +01:00
commit 4be074c8fa
6 changed files with 75 additions and 5 deletions

View File

@ -64,6 +64,11 @@ def parse(args):
default=None,
help='Specify the package builder (default: pbuilder)',
metavar='BUILDER')
p.add_option('-U', '--update',
dest='update',
default=False,
action='store_true',
help='Update the build environment before attempting to build')
p.add_option('-u', '--upload',
dest='upload',
help='Specify an upload destination',
@ -182,6 +187,11 @@ def do_build(workdir, package, release, bp_version, builder):
if not builder:
return
if opts.update:
if 0 != builder.update(release):
error('Failed to update %s chroot for %s.' % \
(release, builder.get_name()))
return builder.build(os.path.join(workdir,
'%s_%s.dsc' % (package, bp_version)),
release,

2
debian/changelog vendored
View File

@ -14,6 +14,8 @@ ubuntu-dev-tools (0.108) UNRELEASED; urgency=low
[ Evan Broder ]
* backportpackage: new script for testing backport requests in a PPA.
* sponsor-patch: Add --update option to make sure build environment is
up to date (LP: #689605)
[ Bilal Akhtar ]
* pbuilder-dist: Override the default build result location if

View File

@ -33,6 +33,9 @@ Use the specified builder to build the package. Supported are
\fBpbuilder\fR(8), \fBpbuilder-dist\fR(1), and \fBsbuild\fR(1). This overrides
\fBUBUNTUTOOLS_BUILDER\fR. The default is \fBpbuilder\fR(8).
.TP
.B \-U, \-\-update
Update the build environment before attempting to build.
.TP
.B \-u \fIUPLOAD\fR, \-\-upload=\fIUPLOAD\fR
Upload to \fIUPLOAD\fR with \fBdput\fR(1) (after confirmation).
.TP

View File

@ -77,6 +77,9 @@ Shortcut for sponsored uploads. Equivalent to \fB\-b \-u ubuntu\fR.
.B \-u \fIDEST\fR, \fB\-\-upload\fR=\fIDEST
Upload to \fIDEST\fR with \fBdput\fR(1) (after confirmation).
.TP
.BR \-U ", " \-\-update
Update the build environment before attempting to build.
.TP
.BR \-v ", " \-\-verbose
Print more information.
.TP

View File

@ -409,8 +409,8 @@ def apply_patch(task, patch):
edit = True
return edit
def main(script_name, bug_number, build, edit, keyid, upload, workdir, builder,
verbose=False):
def main(script_name, bug_number, update, build, edit, keyid, upload, workdir,
builder, verbose=False):
workdir = os.path.expanduser(workdir)
if not os.path.isdir(workdir):
try:
@ -598,12 +598,24 @@ def main(script_name, bug_number, build, edit, keyid, upload, workdir, builder,
continue
if build:
dist = re.sub("-.*$", "", changelog.distributions)
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()
continue
# We want to update the build environment only once, but not
# after every manual fix.
update = False
buildresult = os.path.join(workdir, task.package + "-buildresult")
if not os.path.isdir(buildresult):
os.makedirs(buildresult)
# build package
dist = re.sub("-.*$", "", changelog.distributions)
result = builder.build(new_dsc_file, dist, buildresult)
if result != 0:
Logger.error("Failed to build %s from source with %s." % \
@ -706,6 +718,9 @@ if __name__ == "__main__":
dest="sponsoring", action="store_true", default=False)
parser.add_option("-u", "--upload", dest="upload", default=None,
help="Specify an upload destination (default none).")
parser.add_option("-U", "--update", dest="update", default=False,
action="store_true",
help="Update the build environment before building.")
parser.add_option("-v", "--verbose", help="print more information",
dest="verbose", action="store_true", default=False)
parser.add_option("-w", "--workdir", dest="workdir",
@ -737,5 +752,6 @@ if __name__ == "__main__":
options.build = True
options.upload = "ubuntu"
main(script_name, bug_number, options.build, options.edit, options.keyid,
options.upload, options.workdir, builder, options.verbose)
main(script_name, bug_number, options.update, options.build, options.edit,
options.keyid, options.upload, options.workdir, builder,
options.verbose)

View File

@ -50,6 +50,12 @@ class Pbuilder(Builder):
Logger.command(cmd)
return subprocess.call(cmd)
def update(self, dist):
cmd = ["sudo", "-E", "DIST=" + dist, "pbuilder", "--update",
"--distribution", dist, "--architecture", self.architecture]
Logger.command(cmd)
return subprocess.call(cmd)
class Pbuilderdist(Builder):
def __init__(self):
@ -78,6 +84,36 @@ class Sbuild(Builder):
os.chdir(workdir)
return result
def update(self, dist):
cmd = ["schroot", "--list"]
Logger.command(cmd)
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
chroots, _ = p.communicate()
chroots = chroots.strip().split()
if p.returncode != 0:
return p.returncode
params = {"dist": dist,
"arch": self.architecture}
for chroot in ("%(dist)s-%(arch)s-sbuild-source",
"%(dist)s-sbuild-source",
"%(dist)s-%(arch)s-source",
"%(dist)s-source"):
chroot = chroot % params
if chroot in chroots:
break
else:
return 1
commands = [["sbuild-update"],
["sbuild-distupgrade"],
["sbuild-clean", "-a", "-c"]]
for cmd in commands:
Logger.command(cmd + [chroot])
ret = subprocess.call(cmd + [chroot])
if ret != 0:
return ret
def getBuilder(builder=None):
if not builder: