diff --git a/debian/changelog b/debian/changelog index ad699ef..bb5d153 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +ubuntu-dev-tools (0.79) UNRELEASED; urgency=low + + * Add lp-project-upload: Upload a release tarball to a Launchpad project. + * Add doc/lp-project-upload.1: Corresponding manpage. + * setup.py: Add lp-project-upload. + + -- Martin Pitt Sat, 05 Sep 2009 16:37:42 +0200 + ubuntu-dev-tools (0.78) karmic; urgency=low [ Nathan Handler ] diff --git a/doc/lp-project-upload.1 b/doc/lp-project-upload.1 new file mode 100644 index 0000000..a4a14bc --- /dev/null +++ b/doc/lp-project-upload.1 @@ -0,0 +1,20 @@ +.TH lp-project-upload "1" "05 September 2009" "ubuntu-dev-tools" +.SH NAME +lp\-project\-upload \- Upload a release tarball to a Launchpad project. + +.SH SYNOPSIS +.B lp\-project\-upload +.I project-name version tarball + +.SH DESCRIPTION +\fBlp\-project\-upload\fR uploads a tarball release of a project to Launchpad. +It can create milestones and releases on the fly after confirmation. + +If there is a file \fItarball\fB.asc\fR, it is uploaded as the signature of the +tarball. + +.SH AUTHORS +\fBlp\-project\-upload\fR was written by Martin Pitt . +.PP +It is released under the terms of the GNU General Public License, version 2 +or (at your option) any later version. diff --git a/lp-project-upload b/lp-project-upload new file mode 100755 index 0000000..4d23f22 --- /dev/null +++ b/lp-project-upload @@ -0,0 +1,90 @@ +#!/usr/bin/python + +# Copyright (c) 2009 Canonical Ltd. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2, or (at your option) any +# later version. +# +# lp-set-dup is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# Authors: +# Martin Pitt , based on +# http://blog.launchpad.net/api/recipe-for-uploading-files-via-the-api + +'''Upload a release tarball to a Launchpad project.''' + +import sys, datetime, os.path + +from ubuntutools.lp.libsupport import get_launchpad +from launchpadlib.errors import HTTPError + +def create_release(project, version): + '''Create new release and milestone for LP project.''' + + print 'Release %s could not be found for project. Create it? (Y/n)' % version + answer = sys.stdin.readline().strip() + if answer.startswith('n'): + sys.exit(0) + if len(proj.series) != 1: + print >> sys.stderr, 'Does not support creating releases if more than one series exists.' + sys.exit(3) + release_date = datetime.date.today().strftime('%Y-%m-%d') + series = proj.series[0] + milestone = series.newMilestone(name=version, + date_targeted=release_date) + return milestone.createProductRelease(date_released=release_date) + +# +# main +# + +if len(sys.argv) != 4: + print >> sys.stderr, '''Upload a release tarball to a Launchpad project. + +Usage: %s ''' % sys.argv[0] + sys.exit(1) + +(project, version, tarball) = sys.argv[1:] + +try: + lp = get_launchpad('ubuntu-dev-tools') +except Exception, e: + print >> sys.stderr, 'Could not connect to Launchpad:', str(e) + sys.exit(2) + +try: + # Look up the project using the Launchpad instance. + proj = lp.projects[project] + # Find the release in the project's releases collection. + release = None + for rel in proj.releases: + if rel.version == version: + release = rel + break + if not release: + release = create_release(proj, version) + + # Get the file contents. + file_content = open(tarball, 'r').read() + # Get the signature, if available. + signature = tarball + '.asc' + if os.path.exists(signature): + signature_content = open(signature, 'r').read() + else: + print 'WARNING: no signature found (%s)' % signature + signature_content = None + + # Create a new product release file. + release.add_file(filename=tarball, description='release tarball', + file_content=file_content, content_type='appplication/x-gzip', + file_type='Code Release Tarball', signature_filename=signature, + signature_content=signature_content) +except HTTPError, e: + print 'An error happened in the upload:', e.content + sys.exit(1) + diff --git a/setup.py b/setup.py index 488299d..dfc3ada 100755 --- a/setup.py +++ b/setup.py @@ -25,6 +25,7 @@ setup(name='ubuntu-dev-tools', 'grab-attachments', 'grab-merge', 'hugdaylist', + 'lp-project-upload', 'lp-set-dup', 'manage-credentials', 'massfile',