Merge with trunk

This commit is contained in:
Luca Falavigna 2010-04-17 12:47:21 +02:00
commit abd7660c33
5 changed files with 81 additions and 92 deletions

View File

@ -31,5 +31,5 @@ _pbuilder-dist()
return 0 return 0
} }
[ "$have" ] && complete -F _pbuilder-dist -o filenames \ [ "$have" ] && complete -F _pbuilder-dist -o filenames \
{pbuilder,cowbuilder}-{dist,dapper,edgy,feisty,gutsy,hardy,intrepid,jaunty,karmic,lucid,sarge,etch,lenny,squeeze,sid} {pbuilder,cowbuilder}-{dist,dapper,edgy,feisty,gutsy,hardy,intrepid,jaunty,karmic,lucid,maverick,sarge,etch,lenny,squeeze,sid}
# Make it pbuilder-* if you know how to do it # Make it pbuilder-* if you know how to do it

View File

@ -47,7 +47,7 @@ EOM
exit(0); exit(0);
} }
my @releases = ('dapper', 'hardy', 'intrepid', 'jaunty', 'karmic', 'lucid'); my @releases = ('dapper', 'hardy', 'intrepid', 'jaunty', 'karmic', 'lucid', 'maverick');
#Getopt::Long::Configure("bundling", "no_ignore_case"); #Getopt::Long::Configure("bundling", "no_ignore_case");
our $opt_build_tree = "/scratch/ubuntu/build"; our $opt_build_tree = "/scratch/ubuntu/build";

22
debian/changelog vendored
View File

@ -1,4 +1,11 @@
ubuntu-dev-tools (0.98) UNRELEASED; urgency=low ubuntu-dev-tools (0.99) UNRELEASED; urgency=low
[ Luca Falavigna ]
* syncpackage: new script to easily upload pristine Debian packages.
-- Luca Falavigna <dktrkranz@ubuntu.com> Sat, 17 Apr 2010 12:46:34 +0200
ubuntu-dev-tools (0.98) lucid; urgency=low
[ Ryan Kavanagh ] [ Ryan Kavanagh ]
* Added the merge-changelog script from * Added the merge-changelog script from
@ -6,17 +13,24 @@ ubuntu-dev-tools (0.98) UNRELEASED; urgency=low
who need to manually merge packages. who need to manually merge packages.
* Fixed typo in doc/grab-merge.1 * Fixed typo in doc/grab-merge.1
[ Soren Hansen ]
* Update get-branches to account for changes in LP's web UI. Really, someone
should update it to use the LP API, but for now, this will have to do.
[ Emmet Hikory ] [ Emmet Hikory ]
* doc/mk-sbuild.1: add missing options to summary * doc/mk-sbuild.1: add missing options to summary
[ Michael Bienia ] [ Michael Bienia ]
* lp-shell: Use "udt-lp-shell" as LP API consumer instead of the non-unique * lp-shell: Use "udt-lp-shell" as LP API consumer instead of the non-unique
"test" (lp: #558531). "test" (lp: #558531).
* get-branches: Use the LP API to obtain a list of branches of a team.
[ Luca Falavigna ] [ Loïc Minier ]
* syncpackage: new script to easily upload pristine Debian packages. * bash_completion/pbuilder-dist, dch-repeat: list maverick in possible
Ubuntu dists; the default dist for reverse-build-depends and
submittodebian should be changed in maverick.
-- Luca Falavigna <dktrkranz@debian.org> Tue, 13 Apr 2010 23:17:22 +0200 -- Loïc Minier <loic.minier@ubuntu.com> Fri, 16 Apr 2010 12:58:22 +0200
ubuntu-dev-tools (0.97) lucid; urgency=low ubuntu-dev-tools (0.97) lucid; urgency=low

View File

@ -1,32 +1,39 @@
.TH GET\-BRANCHES "1" "11 August 2008" "ubuntu-dev-tools" .TH get\-branches "1" "11 August 2008" "ubuntu-dev-tools"
.SH NAME .SH NAME
get\-branches \- downloads all branches related to a Launchpad team or person get\-branches - downloads all branches related to a Launchpad team or person
.SH SYNOPSIS .SH SYNOPSIS
.B get\-branches [\-d directory] [\-o branch|checkout] \-t <team> .B get\-branches
.RB [ \-d
.IR directory ]
.RB [ \-o
.BR branch | checkout ]
.B \-t
.I team
.br .br
.B get\-branches <team> .B get\-branches
.I team
.br .br
.B get\-branches \-\-help .B get\-branches \-\-help
.SH DESCRIPTION .SH DESCRIPTION
\fBget\-branches\fR examines the code page of a Launchpad team/person, \fBget\-branches\fR uses the LP API to get a list of branches for a person or
parses it, and calls Bazaar to download all branches on that page. team and calls Bazaar to download all branches.
.SH OPTIONS .SH OPTIONS
Listed below are the command line options for \fBget\-branches\fR: Listed below are the command line options for \fBget\-branches\fR:
.TP .TP
.B \-h or \-\-help .BR \-h ", " \-\-help
Display a help message and exit. Display a help message and exit.
.TP .TP
.B \-d or \-\-directory .BR \-d ", " \-\-directory
Download branches to a directory other than the current directory. Download branches to a directory other than the current directory.
.TP .TP
.B \-o or \-\-operation .BR \-o ", " \-\-operation
Specifies which Bazaar operation to use when downloading the branches; may be Specifies which Bazaar operation to use when downloading the branches; may be
either \fIbranch\fR or \fIcheckout\fR. either \fIbranch\fR or \fIcheckout\fR.
.TP .TP
.B \-t or \-\-team .BR \-t ", " \-\-team
Specifies which Launchpad team/person to download branches from. Specifies which Launchpad team/person to download branches from.
This option is required. This option is required.

View File

@ -25,11 +25,10 @@
# #
import os import os
import re
import subprocess import subprocess
import sys import sys
import urllib2
from optparse import OptionParser from optparse import OptionParser
from ubuntutools.lp.lpapicache import PersonTeam
def main(): def main():
usage = "Usage: %prog [-d <directory>] -t <team> [-o <operation>]" usage = "Usage: %prog [-d <directory>] -t <team> [-o <operation>]"
@ -49,97 +48,66 @@ def main():
(options, args) = optParser.parse_args() (options, args) = optParser.parse_args()
# Parse our options.
if len(args) != 1 and options.lpteam == None:
optParser.error("No team has been specified.")
# Launchpad team setting.
if options.lpteam:
team = str(options.lpteam).lower()
if args:
team = str(args[0]).lower()
directory = options.directory
# Dictionary settings.
if not os.path.isdir(directory): # Check that it is a directory.
optParser.error("%s is not a valid directory." % directory)
# Type of Bazaar operation to perform.
operation_type = str(options.operation).lower()
# Got an argument, check if it is valid.
if operation_type not in ("branch", "checkout"):
optParser.error("Invalid operation '%s' for '-o' flag." % \
operation_type)
# Fetch our current directory to return to later. # Fetch our current directory to return to later.
pwd = os.getcwd() pwd = os.getcwd()
# Change to the specified directory. # Parse our options.
if len(args) != 1 and options.lpteam == None:
optParser.error("No team has been specified.")
# Dictionary settings.
directory = options.directory
if not os.path.isdir(directory): # Check that it is a directory.
optParser.error("%s is not a valid directory." % directory)
os.chdir(directory) os.chdir(directory)
# Try to open the teams code page. # Type of Bazaar operation to perform.
try: operation_type = options.operation.lower()
sock = urllib2.urlopen("https://code.launchpad.net/~%s" % team) if operation_type not in ("branch", "checkout"):
except urllib2.HTTPError: optParser.error("Invalid operation '%s' for '-o' flag." % \
print >> sys.stderr, "The page https://code.launchpad.net/~%s does " \ operation_type)
"not exist." % team
print >> sys.stderr, "Perhaps invalid team name?"
sys.exit(1)
branch_list_page = sock.read() # Launchpad team setting.
sock.close() if options.lpteam:
team = options.lpteam.lower()
branch_page_urls_regex = r'.*href="/(~%s/.*)">lp:.*' % team if args:
branch_page_urls = re.findall(branch_page_urls_regex, branch_list_page) team = args[0].lower()
try:
# Check the team actually has branches. team = PersonTeam(team)
if len(branch_page_urls) == 0: except KeyError:
print "The team '%s' does not have any branches on Launchpad." % team print >> sys.stderr, "E: The team '%s' doesn't exist." % team
sys.exit(0)
# Get a list of branches
print "Downloading all branches for the team '%s'. This may take some " \ branches = team.getBranches()
"time." % team
print "Downloading all branches for the '%s' team. This may take some " \
"time." % team.display_name
try: try:
os.makedirs(team) os.makedirs(team.name)
except: except:
pass pass
os.chdir(team) os.chdir(team.name)
for url in branch_page_urls:
sock = urllib2.urlopen("https://code.launchpad.net/%s" % url)
branch_page = sock.read()
sock.close()
branch_url_regex = r'<dd>bzr branch <span.*>lp:(.*)</span></dd>' for branch in branches:
branch_url = re.findall(branch_url_regex, branch_page) project_name = branch.project.name
if not os.path.exists(project_name):
os.makedirs(project_name)
os.chdir(project_name)
if branch_url[0]: if not os.path.exists(branch.name):
print "Downloading branch: lp:%s (%s)." % (branch_url[0], url) print "Branching %s ..." % branch.display_name
product = url.split("/")[-2] subprocess.call(["bzr", operation_type, branch.bzr_identity, branch.name])
branch_nick = url.split("/")[-1]
else: else:
continue print "Merging %s ..." % branch.display_name
os.chdir(branch.name)
print branch_nick, product, os.getcwd()
if not os.path.exists(product):
os.makedirs(product)
os.chdir(product)
if not os.path.exists(branch_nick):
subprocess.call(["bzr", operation_type, "lp:%s" % url])
else:
os.chdir(branch_nick)
subprocess.call(["bzr", "merge", "--pull", "--remember"]) subprocess.call(["bzr", "merge", "--pull", "--remember"])
os.chdir(os.path.join(directory, team)) os.chdir(os.path.join(directory, team.name))
os.chdir(pwd) os.chdir(pwd)
sys.exit(0) sys.exit(0)
if __name__ == "__main__": if __name__ == "__main__":
try: try:
main() main()