From 533b2bf7bd8dbe72cb696e623eae1c0d2809199c Mon Sep 17 00:00:00 2001 From: Evan Broder <evan@ebroder.net> Date: Wed, 15 Dec 2010 20:39:50 -0800 Subject: [PATCH] backportpackage: Pass around options instead of options container --- backportpackage | 68 ++++++++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/backportpackage b/backportpackage index 15140a2..83108f3 100755 --- a/backportpackage +++ b/backportpackage @@ -88,10 +88,10 @@ def parse(args): return opts, args -def find_release_package(lp, package, opts): +def find_release_package(lp, package, version, source_release): ubuntu = lp.distributions['ubuntu'] archive = ubuntu.main_archive - series = ubuntu.getSeries(name_or_version=opts.source_release) + series = ubuntu.getSeries(name_or_version=source_release) status = 'Published' for pocket in ('Updates', 'Security', 'Release'): try: @@ -105,38 +105,38 @@ def find_release_package(lp, package, opts): continue else: error('Unable to find package %s in release %s' % - (package, opts.source_release)) + (package, source_release)) - if opts.version and opts.version != srcpkg.source_package_version: + if version and version != srcpkg.source_package_version: error('Requested backport of version %s but %s is at version %s' % - (opts.version, package, srcpkg.source_package_version)) + (version, package, srcpkg.source_package_version)) return srcpkg -def find_version_package(lp, package, opts): +def find_version_package(lp, package, version): ubuntu = lp.distributions['ubuntu'] archive = ubuntu.main_archive try: # Might get more than one (i.e. same version in multiple # releases), but they should all be identical return archive.getPublishedSources(source_name=package, - version=opts.version)[0] + version=version)[0] except IndexError: - error('Package %s was never published with version %s in Ubuntu' % - (package, opts.version)) + error('Version %s of package %s was never published in Ubuntu' % + (version, package)) -def fetch_package(lp, workdir, package, opts): +def fetch_package(lp, workdir, package, version, source_release): # Returns the path to the .dsc file that was fetched - if not opts.source_release and not opts.version: - opts.source_release = lp.distributions['ubuntu'].current_series.name + if not source_release and not version: + source_release = lp.distributions['ubuntu'].current_series.name # If source_release is specified, then version is just for # verification - if opts.source_release: - srcpkg = find_release_package(lp, package, opts) + if source_release: + srcpkg = find_release_package(lp, package, version, source_release) else: - srcpkg = find_version_package(lp, package, opts) + srcpkg = find_version_package(lp, package, version) for f in srcpkg.sourceFileUrls(): if f.endswith('.dsc'): @@ -161,8 +161,8 @@ def get_backport_dist(upload, release): else: return release -def do_build(workdir, package, release, bp_version, opts): - builder = getBuilder(opts.builder) +def do_build(workdir, package, release, bp_version, builder): + builder = getBuilder(builder) if not builder: return @@ -171,8 +171,8 @@ def do_build(workdir, package, release, bp_version, opts): release, workdir) -def do_upload(workdir, package, bp_version, opts): - prompt = 'Do you want to upload this to %s? [Y/n]' % opts.upload +def do_upload(workdir, package, bp_version, upload): + prompt = 'Do you want to upload this to %s? [Y/n]' % upload while True: answer = raw_input(prompt).strip().lower() if answer in ('', 'y', 'yes'): @@ -181,13 +181,13 @@ def do_upload(workdir, package, bp_version, opts): return check_call(['dput', - opts.upload, + upload, '%s_%s_source.changes' % (package, bp_version)], cwd=workdir) -def do_backport(workdir, package, dscfile, release, opts): +def do_backport(workdir, package, dscfile, release, build, builder, upload): dsc = Dsc(open(os.path.join(workdir, dscfile))) v = dsc['Version'] @@ -198,8 +198,8 @@ def do_backport(workdir, package, dscfile, release, opts): cwd=workdir) srcdir = os.path.join(workdir, package) - bp_version = get_backport_version(v, opts.upload, release) - bp_dist = get_backport_dist(opts.upload, release) + bp_version = get_backport_version(v, upload, release) + bp_dist = get_backport_dist(upload, release) check_call(['dch', '--force-bad-version', @@ -215,11 +215,11 @@ def do_backport(workdir, package, dscfile, release, opts): bp_version = bp_version[bp_version.find(':')+1:] print 'Please check the package in file://%s carefully' % workdir - if opts.build: - if 0 != do_build(workdir, package, release, bp_version, opts): + if build: + if 0 != do_build(workdir, package, release, bp_version, builder): error('Package failed to build; aborting') - if opts.upload: - do_upload(workdir, package, bp_version, opts) + if upload: + do_upload(workdir, package, bp_version, upload) shutil.rmtree(srcdir) @@ -234,10 +234,20 @@ def main(args): workdir = tempfile.mkdtemp(prefix='backportpackage-') try: - dscfile = fetch_package(lp, workdir, package, opts) + dscfile = fetch_package(lp, + workdir, + package, + opts.version, + opts.source_release) for release in opts.dest_releases: - do_backport(workdir, package, dscfile, release, opts) + do_backport(workdir, + package, + dscfile, + release, + opts.build, + opts.builder, + opts.upload) finally: shutil.rmtree(workdir)