mirror of
https://git.launchpad.net/ubuntu-dev-tools
synced 2025-05-28 09:11:38 +00:00
Use *SourcePackage in backportpackage
This commit is contained in:
parent
1fb2545712
commit
3013ee034a
@ -25,14 +25,13 @@ import subprocess
|
|||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
from debian.deb822 import Dsc
|
|
||||||
from launchpadlib.launchpad import Launchpad
|
from launchpadlib.launchpad import Launchpad
|
||||||
import lsb_release
|
import lsb_release
|
||||||
|
|
||||||
|
from ubuntutools.archive import UbuntuSourcePackage
|
||||||
from ubuntutools.config import UDTConfig, ubu_email
|
from ubuntutools.config import UDTConfig, ubu_email
|
||||||
from ubuntutools.builder import get_builder
|
from ubuntutools.builder import get_builder
|
||||||
from ubuntutools.logger import Logger
|
from ubuntutools.logger import Logger
|
||||||
from ubuntutools.mirrors import pull_source_pkg
|
|
||||||
from ubuntutools.question import YesNoQuestion
|
from ubuntutools.question import YesNoQuestion
|
||||||
|
|
||||||
def error(msg):
|
def error(msg):
|
||||||
@ -166,42 +165,26 @@ def find_release_package(launchpad, package, version, source_release):
|
|||||||
|
|
||||||
return srcpkg
|
return srcpkg
|
||||||
|
|
||||||
def find_version_package(launchpad, package, version):
|
def find_package(launchpad, mirror, workdir, package, version, source_release):
|
||||||
ubuntu = launchpad.distributions['ubuntu']
|
"Returns the SourcePackage"
|
||||||
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=version)[0]
|
|
||||||
except IndexError:
|
|
||||||
error('Version %s of package %s was never published in Ubuntu.' %
|
|
||||||
(version, package))
|
|
||||||
|
|
||||||
def fetch_package(launchpad, mirror, workdir, package, version, source_release):
|
|
||||||
"Returns the path to the .dsc file that was fetched"
|
|
||||||
|
|
||||||
if package.endswith('.dsc'):
|
if package.endswith('.dsc'):
|
||||||
cmd = ('dget', '--download-only', '--allow-unauthenticated', package)
|
return UbuntuSourcePackage(version=version, dscfile=package,
|
||||||
Logger.command(cmd)
|
workdir=workdir, lp=launchpad,
|
||||||
ret = subprocess.call(cmd, cwd=workdir)
|
mirrors=[mirror])
|
||||||
if ret == 0:
|
|
||||||
return os.path.join(workdir, os.path.basename(package))
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if not source_release and not version:
|
if not source_release and not version:
|
||||||
source_release = launchpad.distributions['ubuntu'].current_series.name
|
source_release = launchpad.distributions['ubuntu'].current_series.name
|
||||||
|
|
||||||
|
component = None
|
||||||
# If source_release is specified, then version is just for verification
|
# If source_release is specified, then version is just for verification
|
||||||
if source_release:
|
if source_release:
|
||||||
srcpkg = find_release_package(launchpad, package, version,
|
srcpkg = find_release_package(launchpad, package, version,
|
||||||
source_release)
|
source_release)
|
||||||
else:
|
version = srcpkg.source_package_version
|
||||||
srcpkg = find_version_package(launchpad, package, version)
|
component = srcpkg.component_name
|
||||||
|
|
||||||
version = srcpkg.source_package_version
|
return UbuntuSourcePackage(package, version, component, workdir=workdir,
|
||||||
return pull_source_pkg('UBUNTU', mirror, srcpkg.component_name, package,
|
lp=launchpad, mirrors=[mirror])
|
||||||
version, workdir=workdir, unpack=False)
|
|
||||||
|
|
||||||
def get_backport_version(version, suffix, upload, release):
|
def get_backport_version(version, suffix, upload, release):
|
||||||
backport_version = version + ('~%s1' % release)
|
backport_version = version + ('~%s1' % release)
|
||||||
@ -217,7 +200,7 @@ def get_backport_dist(upload, release):
|
|||||||
else:
|
else:
|
||||||
return release
|
return release
|
||||||
|
|
||||||
def do_build(workdir, package, release, bp_version, builder, update):
|
def do_build(workdir, dsc, release, builder, update):
|
||||||
builder = get_builder(builder)
|
builder = get_builder(builder)
|
||||||
if not builder:
|
if not builder:
|
||||||
return
|
return
|
||||||
@ -226,12 +209,11 @@ def do_build(workdir, package, release, bp_version, builder, update):
|
|||||||
if 0 != builder.update(release):
|
if 0 != builder.update(release):
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
return builder.build(os.path.join(workdir,
|
return builder.build(os.path.join(workdir, dsc),
|
||||||
'%s_%s.dsc' % (package, bp_version)),
|
|
||||||
release,
|
release,
|
||||||
os.path.join(workdir, "buildresult"))
|
os.path.join(workdir, "buildresult"))
|
||||||
|
|
||||||
def do_upload(workdir, package, bp_version, upload, prompt):
|
def do_upload(workdir, package, bp_version, changes, upload, prompt):
|
||||||
print 'Please check %s %s in file://%s carefully!' % \
|
print 'Please check %s %s in file://%s carefully!' % \
|
||||||
(package, bp_version, workdir)
|
(package, bp_version, workdir)
|
||||||
if prompt or upload == 'ubuntu':
|
if prompt or upload == 'ubuntu':
|
||||||
@ -240,20 +222,21 @@ def do_upload(workdir, package, bp_version, upload, prompt):
|
|||||||
if answer == "no":
|
if answer == "no":
|
||||||
return
|
return
|
||||||
|
|
||||||
changes_file = '%s_%s_source.changes' % (package, bp_version)
|
check_call(['dput', upload, changes], cwd=workdir)
|
||||||
check_call(['dput', upload, changes_file], cwd=workdir)
|
|
||||||
|
|
||||||
|
def do_backport(workdir, pkg, suffix, release, build, builder, update, upload,
|
||||||
|
prompt):
|
||||||
|
dirname = '%s-%s' % (pkg.source, release)
|
||||||
|
pkg.unpack(dirname)
|
||||||
|
srcdir = os.path.join(workdir, dirname)
|
||||||
|
|
||||||
def do_backport(workdir, package, dscfile, version, suffix, release, build,
|
bp_version = get_backport_version(pkg.version.full_version, suffix,
|
||||||
builder, update, upload, prompt):
|
upload, release)
|
||||||
check_call(['dpkg-source', '-x', dscfile, package], cwd=workdir)
|
|
||||||
srcdir = os.path.join(workdir, package)
|
|
||||||
|
|
||||||
bp_version = get_backport_version(version, suffix, upload, release)
|
|
||||||
bp_dist = get_backport_dist(upload, release)
|
bp_dist = get_backport_dist(upload, release)
|
||||||
|
|
||||||
check_call(['dch',
|
check_call(['dch',
|
||||||
'--force-bad-version',
|
'--allow-lower-version',
|
||||||
|
'--force-distribution',
|
||||||
'--preserve',
|
'--preserve',
|
||||||
'--newversion', bp_version,
|
'--newversion', bp_version,
|
||||||
'--distribution', bp_dist,
|
'--distribution', bp_dist,
|
||||||
@ -261,15 +244,14 @@ def do_backport(workdir, package, dscfile, version, suffix, release, build,
|
|||||||
cwd=srcdir)
|
cwd=srcdir)
|
||||||
check_call(['debuild', '--no-lintian', '-S', '-sa'], cwd=srcdir)
|
check_call(['debuild', '--no-lintian', '-S', '-sa'], cwd=srcdir)
|
||||||
|
|
||||||
if ':' in bp_version:
|
fn_base = pkg.source + '_' + bp_version.split(':', 1)[-1]
|
||||||
bp_version = bp_version[bp_version.find(':')+1:]
|
|
||||||
|
|
||||||
if build:
|
if build:
|
||||||
if 0 != do_build(workdir, package, release, bp_version, builder,
|
if 0 != do_build(workdir, fn_base + '.dsc', release, builder, update):
|
||||||
update):
|
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
if upload:
|
if upload:
|
||||||
do_upload(workdir, package, bp_version, upload, prompt)
|
do_upload(workdir, pkg.source, bp_version, fn_base + '.changes',
|
||||||
|
upload, prompt)
|
||||||
|
|
||||||
shutil.rmtree(srcdir)
|
shutil.rmtree(srcdir)
|
||||||
|
|
||||||
@ -298,22 +280,17 @@ def main(args):
|
|||||||
os.makedirs(workdir)
|
os.makedirs(workdir)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
dscfile = fetch_package(launchpad,
|
pkg = find_package(launchpad,
|
||||||
opts.ubuntu_mirror,
|
opts.ubuntu_mirror,
|
||||||
workdir,
|
workdir,
|
||||||
package_or_dsc,
|
package_or_dsc,
|
||||||
opts.version,
|
opts.version,
|
||||||
opts.source_release)
|
opts.source_release)
|
||||||
|
pkg.pull()
|
||||||
dsc = Dsc(open(os.path.join(workdir, dscfile)))
|
|
||||||
package = dsc['Source']
|
|
||||||
version = dsc['Version']
|
|
||||||
|
|
||||||
for release in opts.dest_releases:
|
for release in opts.dest_releases:
|
||||||
do_backport(workdir,
|
do_backport(workdir,
|
||||||
package,
|
pkg,
|
||||||
dscfile,
|
|
||||||
version,
|
|
||||||
opts.suffix,
|
opts.suffix,
|
||||||
release,
|
release,
|
||||||
opts.build,
|
opts.build,
|
||||||
|
@ -267,9 +267,11 @@ class SourcePackage(object):
|
|||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def unpack(self):
|
def unpack(self, destdir=None):
|
||||||
"Unpack in workdir"
|
"Unpack in workdir"
|
||||||
cmd = ('dpkg-source', '-x', self.dsc_name)
|
cmd = ['dpkg-source', '-x', self.dsc_name]
|
||||||
|
if destdir:
|
||||||
|
cmd.append(destdir)
|
||||||
Logger.command(cmd)
|
Logger.command(cmd)
|
||||||
subprocess.check_call(cmd, cwd=self.workdir)
|
subprocess.check_call(cmd, cwd=self.workdir)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user