* 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.
This commit is contained in:
Martin Pitt 2009-09-05 16:40:10 +02:00
parent 2bd5fba0e8
commit 05efc70443
4 changed files with 119 additions and 0 deletions

8
debian/changelog vendored
View File

@ -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 <martin.pitt@ubuntu.com> Sat, 05 Sep 2009 16:37:42 +0200
ubuntu-dev-tools (0.78) karmic; urgency=low ubuntu-dev-tools (0.78) karmic; urgency=low
[ Nathan Handler ] [ Nathan Handler ]

20
doc/lp-project-upload.1 Normal file
View File

@ -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 <martin.pitt@ubuntu.com>.
.PP
It is released under the terms of the GNU General Public License, version 2
or (at your option) any later version.

90
lp-project-upload Executable file
View File

@ -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 <martin.pitt@ubuntu.com>, 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 <project name> <version> <tarball>''' % 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)

View File

@ -25,6 +25,7 @@ setup(name='ubuntu-dev-tools',
'grab-attachments', 'grab-attachments',
'grab-merge', 'grab-merge',
'hugdaylist', 'hugdaylist',
'lp-project-upload',
'lp-set-dup', 'lp-set-dup',
'manage-credentials', 'manage-credentials',
'massfile', 'massfile',