diff --git a/doc/pull-debian-debdiff.1 b/doc/pull-debian-debdiff.1 index 8fc87aa..f6856bb 100644 --- a/doc/pull-debian-debdiff.1 +++ b/doc/pull-debian-debdiff.1 @@ -78,6 +78,8 @@ The default value for \fB\-\-debian\-mirror\fR. The default value for \fB\-\-debsec\-mirror\fR. .SH SEE ALSO +.BR debdiff (1), +.BR dget (1), .BR pull\-debian\-source (1), .BR ubuntu\-dev\-tools (5) diff --git a/doc/pull-debian-source.1 b/doc/pull-debian-source.1 index a6c735d..da61637 100644 --- a/doc/pull-debian-source.1 +++ b/doc/pull-debian-source.1 @@ -52,6 +52,9 @@ package\-wide variable. The default value for \fB\-\-mirror\fR. .SH SEE ALSO +.BR dget (1), +.BR pull\-debian\-debdiff (1), +.BR pull\-lp\-source (1), .BR ubuntu\-dev\-tools (5) .SH AUTHOR diff --git a/doc/pull-lp-source.1 b/doc/pull-lp-source.1 index 6a05e50..840f692 100644 --- a/doc/pull-lp-source.1 +++ b/doc/pull-lp-source.1 @@ -4,7 +4,7 @@ pull\-lp\-source \- download a source package from Launchpad .SH SYNOPSIS -.B pull\-lp\-source \fR[\fB\-h\fR]\fB <\fBsource package\fR> [\fItarget release\fR] +.B pull\-lp\-source \fR[\fIoptions\fR]\fB <\fBsource package\fR> [\fItarget release\fR] .SH DESCRIPTION \fBpull\-lp\-source\fR downloads and extracts the latest version of @@ -15,21 +15,52 @@ version in that release will be downloaded instead. .SH OPTIONS Listed below are the command line options for pull\-lp\-source: .TP -.B \-h, \-\-help -Display a help message and exit. -.TP .B This is the source package that you would like to be downloaded from Launchpad. .TP .B [target release] This is the release that you would like the source package to be downloaded from. This value defaults to the current development release. - -.SH ENVIRONMENT VARIABLES .TP +.BR \-h ", " \-\-help +Display a help message and exit. +.TP +.B \-m \fIUBUNTU_MIRROR\fR, \fB\-\-mirror\fR=\fIUBUNTU_MIRROR\fR +Use the specified Ubuntu mirror. +Should be in the form \fBhttp://archive.ubuntu.com/ubuntu\fR. +If the package isn't found on this mirror, \fBpull\-lp\-source\fR will +fall back to Launchpad, as its name implies. +.TP +.B \-\-no\-conf +Do not read any configuration files, or configuration from environment +variables. + +.SH ENVIRONMENT +All of the \fBCONFIGURATION VARIABLES\fR below are also supported as +environment variables. +Variables in the environment take precedence to those in configuration +files. +.TP +.B DIST Specifies the default target. +.SH CONFIGURATION VARIABLES +The following variables can be set in the environment or in +.BR ubuntu\-dev\-tools (5) +configuration files. +In each case, the script\-specific variable takes precedence over the +package\-wide variable. +.TP +.BR PULL_LP_SOURCE_UBUNTU_MIRROR ", " UBUNTUTOOLS_UBUNTU_MIRROR +The default value for \fB\-\-mirror\fR. + +.SH SEE ALSO +.BR dget (1), +.BR pull\-debian\-source (1), +.BR pull\-debian\-debdiff (1), +.BR ubuntu\-dev\-tools (5) + .SH AUTHOR .PP \fBpull\-lp\-source\fR and this manual page were written by Iain Lane diff --git a/pull-debian-debdiff b/pull-debian-debdiff index 54d10b1..3f4bf63 100755 --- a/pull-debian-debdiff +++ b/pull-debian-debdiff @@ -32,35 +32,24 @@ except ImportError: from ubuntutools.config import UDTConfig from ubuntutools.logger import Logger +from ubuntutools.misc import dsc_name, dsc_url DEFAULT_DEBIAN_MIRROR = 'http://ftp.debian.org/debian' DEFAULT_DEBSEC_MIRROR = 'http://security.debian.org' opts = None -def dsc_name(package, version): - "Return the source package dsc filename for the given package" - if ':' in version: - version = version.split(':', 1)[1] - return '%s_%s.dsc' % (package, version) - -def build_url(mirror, package, version): - "Build a source package URL" - group = package[:4] if package.startswith('lib') else package[0] - fn = dsc_name(package, version) - # TODO: Not all packages are main :) - # Practically this is fine, as it'll be found on snapshot, but still ugly. - return os.path.join(mirror, 'pool', 'main', group, package, fn) - def pull(package, version, unpack=False): "Download Debian source package version version" urls = [] + # TODO: Not all packages are main :) + # Practically this is fine, as it'll be found on snapshot, but still ugly. if opts.debsec_mirror and opts.debsec_mirror != DEFAULT_DEBSEC_MIRROR: - urls.append(build_url(opts.debsec_mirror, package, version)) - urls.append(build_url(DEFAULT_DEBSEC_MIRROR, package, version)) + urls.append(dsc_url(opts.debsec_mirror, 'main', package, version)) + urls.append(dsc_url(DEFAULT_DEBSEC_MIRROR, 'main', package, version)) if opts.debian_mirror and opts.debian_mirror != DEFAULT_DEBIAN_MIRROR: - urls.append(build_url(opts.debian_mirror, package, version)) - urls.append(build_url(DEFAULT_DEBIAN_MIRROR, package, version)) + urls.append(dsc_url(opts.debian_mirror, 'main', package, version)) + urls.append(dsc_url(DEFAULT_DEBIAN_MIRROR, 'main', package, version)) for url in urls: cmd = ('dget', '-u' + 'x' if unpack else 'd', url) diff --git a/pull-lp-source b/pull-lp-source index b6c6911..d9b1ca3 100755 --- a/pull-lp-source +++ b/pull-lp-source @@ -3,10 +3,8 @@ # pull-lp-source -- pull a source package from Launchpad # Basic usage: pull-lp-source [] # -# Copyright (C) 2008 Iain Lane -# -# BackportFromLP class taken from prevu tool, which is: -# Copyright (C) 2006 John Dong +# Copyright (C) 2008, Iain Lane , +# 2010, Stefano Rivera # # ################################################################## # @@ -31,25 +29,36 @@ import subprocess import urllib from optparse import OptionParser -# ubuntu-dev-tools modules. +from ubuntutools.config import UDTConfig +from ubuntutools.logger import Logger from ubuntutools.lp.lpapicache import Distribution, Launchpad from ubuntutools.lp.udtexceptions import (SeriesNotFoundException, PackageNotFoundException, PocketDoesNotExistError) -from ubuntutools.misc import splitReleasePocket +from ubuntutools.misc import splitReleasePocket, dsc_name, dsc_url if not os.path.exists("/usr/bin/dget"): - print "E: dget is not installed - please install the 'devscripts' package" \ - " and rerun this script again." + print ("E: dget is not installed - please install the 'devscripts' package" + " and rerun this script again.") sys.exit(1) if __name__ == '__main__': usage = "Usage: %prog [release]" optParser = OptionParser(usage) + optParser.add_option('-m', '--mirror', metavar='UBUNTU_MIRROR', + dest='ubuntu_mirror', + help='Preferred Ubuntu mirror ' + '(default: Launchpad)') + optParser.add_option('--no-conf', + dest='no_conf', default=False, action='store_true', + help="Don't read config files or environment " + "variables") (options, args) = optParser.parse_args() - if not args: - optParser.print_help() - sys.exit(1) + optParser.error("Must specify package name") + + config = UDTConfig(options.no_conf) + if options.ubuntu_mirror is None: + options.ubuntu_mirror = config.get_value('UBUNTU_MIRROR') # Login anonymously to LP Launchpad.login_anonymously() @@ -73,6 +82,16 @@ if __name__ == '__main__': print 'E: %s' % e sys.exit(1) + if options.ubuntu_mirror: + url = dsc_url(options.ubuntu_mirror, spph.getComponent(), package, + spph.getVersion()) + cmd = ('dget', '-xu', url) + Logger.command(cmd) + r = subprocess.call(cmd) + if r == 0: + Logger.normal("Success!") + sys.exit(0) + dsc_url = [url for url in spph.sourceFileUrls() if url.endswith('.dsc')] assert dsc_url, 'No .dsc file found' diff --git a/ubuntutools/misc.py b/ubuntutools/misc.py index 979d408..3f37b2d 100644 --- a/ubuntutools/misc.py +++ b/ubuntutools/misc.py @@ -1,8 +1,9 @@ # # misc.py - misc functions for the Ubuntu Developer Tools scripts. # -# Copyright (C) 2008 Jonathan Davies -# Copyright (C) 2008-2009 Siegfried-Angel Gevatter Pujals +# Copyright (C) 2008, Jonathan Davies , +# 2008-2009, Siegfried-Angel Gevatter Pujals , +# 2010, Stefano Rivera # # ################################################################## # @@ -22,6 +23,7 @@ # Modules. import os +import os.path from subprocess import Popen, PIPE from ubuntutools.lp.udtexceptions import PocketDoesNotExistError @@ -116,3 +118,15 @@ def splitReleasePocket(release): pocket) return (release, pocket) + +def dsc_name(package, version): + "Return the source package dsc filename for the given package" + if ':' in version: + version = version.split(':', 1)[1] + return '%s_%s.dsc' % (package, version) + +def dsc_url(mirror, component, package, version): + "Build a source package URL" + group = package[:4] if package.startswith('lib') else package[0] + fn = dsc_name(package, version) + return os.path.join(mirror, 'pool', component, group, package, fn)