Merge lp:~jelmer/bzr-builddeb/lzma into lp:bzr-builddeb

Proposed by Jelmer Vernooij
Status: Merged
Merged at revision: 579
Proposed branch: lp:~jelmer/bzr-builddeb/lzma
Merge into: lp:bzr-builddeb
Diff against target: 606 lines (+197/-58)
14 files modified
cmds.py (+4/-2)
debian/changelog (+2/-1)
dh_make.py (+2/-0)
import_dsc.py (+6/-4)
repack_tarball.py (+31/-7)
tests/__init__.py (+35/-30)
tests/test_import_dsc.py (+35/-0)
tests/test_repack_tarball.py (+1/-1)
tests/test_repack_tarball_extra.py (+6/-6)
tests/test_upstream.py (+35/-0)
tests/test_util.py (+27/-4)
upstream/__init__.py (+2/-1)
upstream/pristinetar.py (+8/-1)
util.py (+3/-1)
To merge this branch: bzr merge lp:~jelmer/bzr-builddeb/lzma
Reviewer Review Type Date Requested Status
James Westby Approve
Review via email: mp+65802@code.launchpad.net

Description of the change

Add support for .tar.lzma orig tarballs and support for lzma/xz compressed tarballs in general.

This also removes RepackTarballAdaptor which is unused, and replaced by scenarios in load_tests().

pristine-tar doesn't support lzma yet (bug 801588), so it will currently just ship a copy of the entire tarball when it encounters a lzma tarball. That might be problematic in some cases (say, openoffice as a .tar.xz), so we may want to raise PristineTarError if it complains about generating a full-size delta, or perhaps if the delta hits a particular size. What do you think?

To post a comment you must log in.
lp:~jelmer/bzr-builddeb/lzma updated
583. By Jelmer Vernooij

remove unused imports.

584. By Jelmer Vernooij

Require lzma feature for lzma-dependent tests.

Revision history for this message
James Westby (james-w) wrote :

This looks ok to me. Is lzma supported by dak yet?

I'm not sure about the delta questions, storing the full delta is certainly painful,
but if this is supported in dak then we'll have to support it in bzr-builddeb soon,
and that is certainly an easy way to do it.

It's also something we could transition away from easily given that newer pristine-tar
will still deal with the full-size deltas.

My only pause is that as you say an openoffice.tar.xz would be painful, and large
packages are the ones most likely to use lzma.

Thanks,

James

review: Approve
Revision history for this message
Jelmer Vernooij (jelmer) wrote :

Hi James

On 27/06/11 21:11, James Westby wrote:
> This looks ok to me. Is lzma supported by dak yet?
I don't think it is yet, but it (still) seems like it will be in the
near future.
>
> I'm not sure about the delta questions, storing the full delta is certainly painful,
> but if this is supported in dak then we'll have to support it in bzr-builddeb soon,
> and that is certainly an easy way to do it.
>
> It's also something we could transition away from easily given that newer pristine-tar
> will still deal with the full-size deltas.
>
> My only pause is that as you say an openoffice.tar.xz would be painful, and large
> packages are the ones most likely to use lzma.
>
I'll see if I can spend some time adding lzma support to pristine-tar.

Cheers,

Jelmer

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'cmds.py'
--- cmds.py 2011-06-24 10:51:46 +0000
+++ cmds.py 2011-06-24 15:14:30 +0000
@@ -471,8 +471,8 @@
471471
472 You must supply the source to import from, and in some cases472 You must supply the source to import from, and in some cases
473 the version number of the new release. The source can be a .tar.gz, .tar,473 the version number of the new release. The source can be a .tar.gz, .tar,
474 .tar.bz2, .tgz or .zip archive, a directory or a branch. The source may474 .tar.bz2, .tar.lzma, .tgz or .zip archive, a directory or a branch. The
475 also be a remote file described by a URL.475 source may also be a remote file described by a URL.
476476
477 In most situations the version can be guessed from the upstream source.477 In most situations the version can be guessed from the upstream source.
478 If the upstream version can not be guessed or if it is guessed478 If the upstream version can not be guessed or if it is guessed
@@ -577,6 +577,8 @@
577 if v3:577 if v3:
578 if location.endswith(".tar.bz2") or location.endswith(".tbz2"):578 if location.endswith(".tar.bz2") or location.endswith(".tbz2"):
579 format = "bz2"579 format = "bz2"
580 elif location.endswith(".tar.lzma"):
581 format = "lzma"
580 dest_name = tarball_name(package, version, format=format)582 dest_name = tarball_name(package, version, format=format)
581 tarball_filename = os.path.join(orig_dir, dest_name)583 tarball_filename = os.path.join(orig_dir, dest_name)
582 try:584 try:
583585
=== modified file 'debian/changelog'
--- debian/changelog 2011-06-14 00:32:04 +0000
+++ debian/changelog 2011-06-24 15:14:30 +0000
@@ -15,8 +15,9 @@
15 sources.list. LP: #79685315 sources.list. LP: #796853
16 * Fix deprecation warnings for TestCase.failUnlessExists and16 * Fix deprecation warnings for TestCase.failUnlessExists and
17 TestCase.failIfExists in bzr 2.4.17 TestCase.failIfExists in bzr 2.4.
18 * Add support for xz and lzma tarballs. LP: #553668
1819
19 -- Jelmer Vernooij <jelmer@debian.org> Mon, 13 Jun 2011 23:10:20 +010020 -- Jelmer Vernooij <jelmer@debian.org> Fri, 24 Jun 2011 16:51:51 +0200
2021
21bzr-builddeb (2.7.4) unstable; urgency=low22bzr-builddeb (2.7.4) unstable; urgency=low
2223
2324
=== modified file 'dh_make.py'
--- dh_make.py 2011-06-23 10:29:54 +0000
+++ dh_make.py 2011-06-24 15:14:30 +0000
@@ -62,6 +62,8 @@
62 if use_v3:62 if use_v3:
63 if tarball.endswith(".tar.bz2") or tarball.endswith(".tbz2"):63 if tarball.endswith(".tar.bz2") or tarball.endswith(".tbz2"):
64 format = "bz2"64 format = "bz2"
65 elif tarball.endswith(".tar.lzma"):
66 format = "lzma"
65 dest_name = util.tarball_name(package_name, version, format=format)67 dest_name = util.tarball_name(package_name, version, format=format)
66 trace.note("Fetching tarball")68 trace.note("Fetching tarball")
67 repack_tarball(tarball, dest_name, target_dir=orig_dir,69 repack_tarball(tarball, dest_name, target_dir=orig_dir,
6870
=== modified file 'import_dsc.py'
--- import_dsc.py 2011-06-23 21:34:52 +0000
+++ import_dsc.py 2011-06-24 15:14:30 +0000
@@ -1505,7 +1505,8 @@
1505 self.extracted_upstream = None1505 self.extracted_upstream = None
1506 for part in self.dsc['files']:1506 for part in self.dsc['files']:
1507 if (part['name'].endswith(".tar.gz")1507 if (part['name'].endswith(".tar.gz")
1508 or part['name'].endswith(".tar.bz2")):1508 or part['name'].endswith(".tar.bz2")
1509 or part['name'].endswith(".tar.lzma")):
1509 self.unextracted_debian_md5 = part['md5sum']1510 self.unextracted_debian_md5 = part['md5sum']
15101511
15111512
@@ -1545,12 +1546,13 @@
1545 os.path.join(osutils.dirname(self.dsc_path),1546 os.path.join(osutils.dirname(self.dsc_path),
1546 part['name'])), part['md5sum']))1547 part['name'])), part['md5sum']))
1547 elif (part['name'].endswith(".debian.tar.gz")1548 elif (part['name'].endswith(".debian.tar.gz")
1548 or part['name'].endswith(".debian.tar.bz2")):1549 or part['name'].endswith(".debian.tar.bz2")
1550 or part['name'].endswith(".debian.tar.lzma")):
1549 self.unextracted_debian_md5 = part['md5sum']1551 self.unextracted_debian_md5 = part['md5sum']
1550 assert self.upstream_tarballs is not None, \1552 assert self.upstream_tarballs is not None, \
1551 "Can't handle non gz|bz2 tarballs yet"1553 "Can't handle non gz|bz2|lzma tarballs yet"
1552 assert self.unextracted_debian_md5 is not None, \1554 assert self.unextracted_debian_md5 is not None, \
1553 "Can't handle non gz|bz2 tarballs yet"1555 "Can't handle non gz|bz2|lzma tarballs yet"
15541556
15551557
1556SOURCE_EXTRACTORS = {}1558SOURCE_EXTRACTORS = {}
15571559
=== modified file 'repack_tarball.py'
--- repack_tarball.py 2011-06-12 22:30:15 +0000
+++ repack_tarball.py 2011-06-24 15:14:30 +0000
@@ -36,8 +36,9 @@
36import zipfile36import zipfile
3737
38from bzrlib.errors import (38from bzrlib.errors import (
39 FileExists,39 DependencyNotPresent,
40 )40 FileExists,
41 )
41from bzrlib.transport import get_transport42from bzrlib.transport import get_transport
4243
43from bzrlib.plugins.builddeb.errors import UnsupportedRepackFormat44from bzrlib.plugins.builddeb.errors import UnsupportedRepackFormat
@@ -64,8 +65,8 @@
64 raise NotImplementedError(self.repack)65 raise NotImplementedError(self.repack)
6566
6667
67class TgzTgzRepacker(TgzRepacker):68class CopyRepacker(TgzRepacker):
68 """A TgzRepacker that just copies."""69 """A Repacker that just copies."""
6970
70 def repack(self, target_f):71 def repack(self, target_f):
71 shutil.copyfileobj(self.source_f, target_f)72 shutil.copyfileobj(self.source_f, target_f)
@@ -94,6 +95,22 @@
94 gz.close()95 gz.close()
9596
9697
98class TarLzma2TgzRepacker(TgzRepacker):
99 """A TgzRepacker that repacks from a .tar.lzma or .tar.xz."""
100
101 def repack(self, target_f):
102 try:
103 import lzma
104 except ImportError, e:
105 raise DependencyNotPresent('lzma', e)
106 content = lzma.decompress(self.source_f.read())
107 gz = gzip.GzipFile(mode='w', fileobj=target_f)
108 try:
109 gz.write(content)
110 finally:
111 gz.close()
112
113
97class ZipTgzRepacker(TgzRepacker):114class ZipTgzRepacker(TgzRepacker):
98 """A TgzRepacker that repacks from a .zip file."""115 """A TgzRepacker that repacks from a .zip file."""
99116
@@ -124,7 +141,8 @@
124141
125142
126def get_filetype(filename):143def get_filetype(filename):
127 types = [".tar.gz", ".tgz", ".tar.bz2", ".tbz2", ".tar", ".zip"]144 types = [".tar.gz", ".tgz", ".tar.bz2", ".tar.xz", ".tar.lzma", ".tbz2",
145 ".tar", ".zip"]
128 for filetype in types:146 for filetype in types:
129 if filename.endswith(filetype):147 if filename.endswith(filetype):
130 return filetype148 return filetype
@@ -134,11 +152,17 @@
134 """Return the appropriate repacker based on the file extension."""152 """Return the appropriate repacker based on the file extension."""
135 filetype = get_filetype(source_filename)153 filetype = get_filetype(source_filename)
136 if (filetype == ".tar.gz" or filetype == ".tgz"):154 if (filetype == ".tar.gz" or filetype == ".tgz"):
137 return TgzTgzRepacker155 return CopyRepacker
138 if (filetype == ".tar.bz2" or filetype == ".tbz2"):156 if (filetype == ".tar.bz2" or filetype == ".tbz2"):
139 if force_gz:157 if force_gz:
140 return Tbz2TgzRepacker158 return Tbz2TgzRepacker
141 return TgzTgzRepacker159 return CopyRepacker
160 if filetype == ".tar.lzma":
161 if force_gz:
162 return TarLzma2TgzRepacker
163 return CopyRepacker
164 if filetype == ".tar.xz":
165 return TarLzma2TgzRepacker
142 if filetype == ".tar":166 if filetype == ".tar":
143 return TarTgzRepacker167 return TarTgzRepacker
144 if filetype == ".zip":168 if filetype == ".zip":
145169
=== modified file 'tests/__init__.py'
--- tests/__init__.py 2011-06-13 23:01:14 +0000
+++ tests/__init__.py 2011-06-24 15:14:30 +0000
@@ -23,10 +23,8 @@
23import tarfile23import tarfile
24import zipfile24import zipfile
2525
26from copy import deepcopy
27import doctest26import doctest
28import os27import os
29from unittest import TestSuite
3028
31from bzrlib import tests29from bzrlib import tests
3230
@@ -36,7 +34,7 @@
36 # Prior to 0.1.15 the debian module was called debian_bundle34 # Prior to 0.1.15 the debian module was called debian_bundle
37 from debian_bundle.changelog import Version, Changelog35 from debian_bundle.changelog import Version, Changelog
3836
39from bzrlib.tests import TestUtil, multiply_tests37from bzrlib.tests import TestUtil, multiply_tests, ModuleAvailableFeature
4038
4139
42def make_new_upstream_dir(source, dest):40def make_new_upstream_dir(source, dest):
@@ -84,33 +82,31 @@
84 shutil.rmtree(source)82 shutil.rmtree(source)
8583
8684
87tarball_functions = [('dir', make_new_upstream_dir, '../package-0.2'),85def make_new_upstream_tarball_xz(source, dest):
88 ('.tar.gz', make_new_upstream_tarball,86 import lzma
89 '../package-0.2.tar.gz'),87 f = lzma.LZMAFile(dest, 'w')
90 ('.tar.bz2', make_new_upstream_tarball_bz2,88 try:
91 '../package-0.2.tar.bz2'),89 tar = tarfile.open(None, 'w', f)
92 ('.zip', make_new_upstream_tarball_zip,90 try:
93 '../package-0.2.zip'),91 tar.add(source)
94 ('.tar', make_new_upstream_tarball_bare,92 finally:
95 '../package-0.2.tar'),93 tar.close()
96 ]94 finally:
9795 f.close()
9896 shutil.rmtree(source)
99class RepackTarballAdaptor(object):97
10098def make_new_upstream_tarball_lzma(source, dest):
101 def adapt(self, test):99 import lzma
102 result = TestSuite()100 f = lzma.LZMAFile(dest, 'w', options={'format': 'alone'})
103 for (name, function, source) in tarball_functions:101 try:
104 new_test = deepcopy(test)102 tar = tarfile.open(None, 'w', f)
105 source = os.path.basename(source)103 try:
106 new_test.build_tarball = function(source)104 tar.add(source)
107 new_test.old_tarball = source105 finally:
108 def make_new_id():106 tar.close()
109 new_id = '%s(%s)' % (test.id(), name)107 finally:
110 return lambda: new_id108 f.close()
111 new_test.id = make_new_id()109 shutil.rmtree(source)
112 result.addTest(new_test)
113 return result
114110
115111
116def load_tests(standard_tests, module, loader):112def load_tests(standard_tests, module, loader):
@@ -151,6 +147,12 @@
151 old_tarball='../package-0.2.tar.gz')),147 old_tarball='../package-0.2.tar.gz')),
152 ('.tar.bz2', dict(build_tarball=make_new_upstream_tarball_bz2,148 ('.tar.bz2', dict(build_tarball=make_new_upstream_tarball_bz2,
153 old_tarball='../package-0.2.tar.bz2')),149 old_tarball='../package-0.2.tar.bz2')),
150 ('.tar.xz', dict(build_tarball=make_new_upstream_tarball_xz,
151 old_tarball='../package-0.2.tar.xz',
152 _test_needs_features=[LzmaFeature])),
153 ('.tar.lzma', dict(build_tarball=make_new_upstream_tarball_lzma,
154 old_tarball='../package-0.2.tar.lzma',
155 _test_needs_features=[LzmaFeature])),
154 ('.zip', dict(build_tarball=make_new_upstream_tarball_zip,156 ('.zip', dict(build_tarball=make_new_upstream_tarball_zip,
155 old_tarball='../package-0.2.zip')),157 old_tarball='../package-0.2.zip')),
156 ('.tar', dict(build_tarball=make_new_upstream_tarball_bare,158 ('.tar', dict(build_tarball=make_new_upstream_tarball_bare,
@@ -435,3 +437,6 @@
435 assert ret == 0, "dpkg-genchanges failed, output:\n%s" % \437 assert ret == 0, "dpkg-genchanges failed, output:\n%s" % \
436 (proc.stdout.read(),)438 (proc.stdout.read(),)
437 shutil.rmtree(basedir)439 shutil.rmtree(basedir)
440
441
442LzmaFeature = ModuleAvailableFeature("lzma")
438443
=== modified file 'tests/test_import_dsc.py'
--- tests/test_import_dsc.py 2011-06-23 15:33:44 +0000
+++ tests/test_import_dsc.py 2011-06-24 15:14:30 +0000
@@ -45,6 +45,7 @@
45 )45 )
46from bzrlib.plugins.builddeb.tests import (46from bzrlib.plugins.builddeb.tests import (
47 BuilddebTestCase,47 BuilddebTestCase,
48 LzmaFeature,
48 SourcePackageBuilder,49 SourcePackageBuilder,
49 )50 )
5051
@@ -889,6 +890,40 @@
889 self.assertEqual(rev.properties['deb-md5'], self.fake_md5_1)890 self.assertEqual(rev.properties['deb-md5'], self.fake_md5_1)
890 self.assertTrue('deb-pristine-delta-bz2' in rev.properties)891 self.assertTrue('deb-pristine-delta-bz2' in rev.properties)
891892
893 def test_import_upstream_with_lzma_tarball(self):
894 self.requireFeature(PristineTarFeature)
895 self.requireFeature(LzmaFeature)
896 import lzma
897 version = Version("0.1-1")
898 name = "package"
899 basedir = name + "-" + str(version.upstream_version)
900 os.mkdir(basedir)
901 write_to_file(os.path.join(basedir, "README"), "Hi\n")
902 write_to_file(os.path.join(basedir, "BUGS"), "")
903 tar_path = "package_0.1.orig.tar.lzma"
904 f = lzma.LZMAFile(tar_path, 'w')
905 try:
906 tf = tarfile.open(None, 'w', f)
907 try:
908 tf.add(basedir)
909 finally:
910 tf.close()
911 finally:
912 f.close()
913 self.db1.import_upstream(basedir, "package", version.upstream_version,
914 [], upstream_tarballs=[(os.path.abspath(tar_path), None, self.fake_md5_1)])
915 tree = self.up_tree1
916 branch = tree.branch
917 rh = branch.revision_history()
918 self.assertEqual(len(rh), 1)
919 self.assertEqual(self.db1.revid_of_upstream_version(
920 "package", version.upstream_version), rh[0])
921 rev = branch.repository.get_revision(rh[0])
922 self.assertEqual(rev.message,
923 "Import upstream version %s" % str(version.upstream_version))
924 self.assertEqual(rev.properties['deb-md5'], self.fake_md5_1)
925 self.assertTrue('deb-pristine-delta-lzma' in rev.properties)
926
892 def test_import_package_init_from_other(self):927 def test_import_package_init_from_other(self):
893 self.requireFeature(PristineTarFeature)928 self.requireFeature(PristineTarFeature)
894 version1 = Version("0.1-1")929 version1 = Version("0.1-1")
895930
=== modified file 'tests/test_repack_tarball.py'
--- tests/test_repack_tarball.py 2011-06-13 23:01:14 +0000
+++ tests/test_repack_tarball.py 2011-06-24 15:14:30 +0000
@@ -1,6 +1,6 @@
1# test_repack_tarball.py -- Testsuite for repacking of tarballs1# test_repack_tarball.py -- Testsuite for repacking of tarballs
2# Copyright (C) 2007 James Westby <jw+debian@jameswestby.net>2# Copyright (C) 2007 James Westby <jw+debian@jameswestby.net>
3# 3#
4# This file is part of bzr-builddeb.4# This file is part of bzr-builddeb.
5#5#
6# bzr-builddeb is free software; you can redistribute it and/or modify6# bzr-builddeb is free software; you can redistribute it and/or modify
77
=== modified file 'tests/test_repack_tarball_extra.py'
--- tests/test_repack_tarball_extra.py 2011-06-13 23:01:14 +0000
+++ tests/test_repack_tarball_extra.py 2011-06-24 15:14:30 +0000
@@ -48,7 +48,7 @@
48 touch(filename)48 touch(filename)
4949
5050
51def make_new_upstream_tarball(tarball):51def make_new_upstream_tarball_gz(tarball):
52 tar = tarfile.open(tarball, 'w:gz')52 tar = tarfile.open(tarball, 'w:gz')
53 try:53 try:
54 tar.add('package-0.2')54 tar.add('package-0.2')
@@ -79,11 +79,11 @@
79 def test_conditional_repack_tarball_different(self):79 def test_conditional_repack_tarball_different(self):
80 tarball_name = 'package-0.2.tar.gz'80 tarball_name = 'package-0.2.tar.gz'
81 create_basedir('package-0.2/', files=['README'])81 create_basedir('package-0.2/', files=['README'])
82 make_new_upstream_tarball(tarball_name)82 make_new_upstream_tarball_gz(tarball_name)
83 target_dir = 'target'83 target_dir = 'target'
84 os.mkdir(target_dir)84 os.mkdir(target_dir)
85 create_basedir('package-0.2/', files=['README', 'NEWS'])85 create_basedir('package-0.2/', files=['README', 'NEWS'])
86 make_new_upstream_tarball(os.path.join(target_dir, tarball_name))86 make_new_upstream_tarball_gz(os.path.join(target_dir, tarball_name))
87 self.assertRaises(FileExists, repack_tarball, tarball_name,87 self.assertRaises(FileExists, repack_tarball, tarball_name,
88 tarball_name, target_dir=target_dir)88 tarball_name, target_dir=target_dir)
89 self.assertPathExists(tarball_name)89 self.assertPathExists(tarball_name)
@@ -92,7 +92,7 @@
92 def test_conditional_repack_tarball_same(self):92 def test_conditional_repack_tarball_same(self):
93 tarball_name = 'package-0.2.tar.gz'93 tarball_name = 'package-0.2.tar.gz'
94 create_basedir('package-0.2/', files=['README'])94 create_basedir('package-0.2/', files=['README'])
95 make_new_upstream_tarball(tarball_name)95 make_new_upstream_tarball_gz(tarball_name)
96 target_dir = 'target'96 target_dir = 'target'
97 os.mkdir(target_dir)97 os.mkdir(target_dir)
98 shutil.copy(tarball_name, target_dir)98 shutil.copy(tarball_name, target_dir)
@@ -108,7 +108,7 @@
108 target_dir = 'target'108 target_dir = 'target'
109 os.mkdir(target_dir)109 os.mkdir(target_dir)
110 create_basedir('package-0.2/', files=['README'])110 create_basedir('package-0.2/', files=['README'])
111 make_new_upstream_tarball(os.path.join(target_dir, tarball_name))111 make_new_upstream_tarball_gz(os.path.join(target_dir, tarball_name))
112 self.assertRaises(FileExists, repack_tarball, bz2_tarball_name,112 self.assertRaises(FileExists, repack_tarball, bz2_tarball_name,
113 tarball_name, target_dir=target_dir)113 tarball_name, target_dir=target_dir)
114 self.assertPathExists(bz2_tarball_name)114 self.assertPathExists(bz2_tarball_name)
@@ -129,7 +129,7 @@
129 target_dir = 'target'129 target_dir = 'target'
130 os.mkdir(target_dir)130 os.mkdir(target_dir)
131 create_basedir('package-0.2/', files=['COPYING'])131 create_basedir('package-0.2/', files=['COPYING'])
132 make_new_upstream_tarball(os.path.join(target_dir, bz2_tarball_name))132 make_new_upstream_tarball_gz(os.path.join(target_dir, bz2_tarball_name))
133 self.assertRaises(FileExists, repack_tarball, bz2_tarball_name,133 self.assertRaises(FileExists, repack_tarball, bz2_tarball_name,
134 bz2_tarball_name, target_dir=target_dir)134 bz2_tarball_name, target_dir=target_dir)
135 self.assertPathExists(bz2_tarball_name)135 self.assertPathExists(bz2_tarball_name)
136136
=== modified file 'tests/test_upstream.py'
--- tests/test_upstream.py 2011-06-15 18:44:09 +0000
+++ tests/test_upstream.py 2011-06-24 15:14:30 +0000
@@ -35,6 +35,7 @@
35 )35 )
36from bzrlib.tests import (36from bzrlib.tests import (
37 Feature,37 Feature,
38 KnownFailure,
38 TestCase,39 TestCase,
39 )40 )
40from bzrlib.plugins.builddeb.config import (41from bzrlib.plugins.builddeb.config import (
@@ -46,6 +47,7 @@
46 WatchFileMissing,47 WatchFileMissing,
47 )48 )
48from bzrlib.plugins.builddeb.tests import (49from bzrlib.plugins.builddeb.tests import (
50 LzmaFeature,
49 TestCaseWithTransport,51 TestCaseWithTransport,
50 )52 )
51from bzrlib.plugins.builddeb.upstream import (53from bzrlib.plugins.builddeb.upstream import (
@@ -216,6 +218,18 @@
216 _apt_pkg=apt_pkg)218 _apt_pkg=apt_pkg)
217 self.assertEquals(paths, ["target/apackage_0.2.orig.tar.bz2"])219 self.assertEquals(paths, ["target/apackage_0.2.orig.tar.bz2"])
218220
221 def test_apt_provider_right_version_lzma(self):
222 caller = MockAptCaller(work=True)
223 sources = MockSources(["0.1-1", "0.2-1"],
224 [[("checksum", 0L, "apackage_0.1.orig.tar.gz", "tar")],
225 [("checksum", 0L, "apackage_0.2.orig.tar.lzma", "tar")]])
226 apt_pkg = MockAptPkg(sources)
227 src = AptSource()
228 src._run_apt_source = caller.call
229 paths = src.fetch_tarball("apackage", "0.2", "target",
230 _apt_pkg=apt_pkg)
231 self.assertEquals(paths, ["target/apackage_0.2.orig.tar.lzma"])
232
219 def test_apt_provider_right_version(self):233 def test_apt_provider_right_version(self):
220 caller = MockAptCaller(work=True)234 caller = MockAptCaller(work=True)
221 sources = MockSources(["0.1-1", "0.2-1"],235 sources = MockSources(["0.1-1", "0.2-1"],
@@ -693,6 +707,11 @@
693 rev.properties["deb-pristine-delta-bz2"] = "1"707 rev.properties["deb-pristine-delta-bz2"] = "1"
694 self.assertEquals("bz2", self.source.pristine_tar_format(rev))708 self.assertEquals("bz2", self.source.pristine_tar_format(rev))
695709
710 def test_pristine_tar_format_lzma(self):
711 rev = Revision("myrevid")
712 rev.properties["deb-pristine-delta-lzma"] = "1"
713 self.assertEquals("lzma", self.source.pristine_tar_format(rev))
714
696 def test_pristine_tar_format_unknown(self):715 def test_pristine_tar_format_unknown(self):
697 rev = Revision("myrevid")716 rev = Revision("myrevid")
698 self.assertRaises(AssertionError,717 self.assertRaises(AssertionError,
@@ -769,6 +788,22 @@
769 self.assertPathExists("bar/foo_1.0.orig.tar.gz")788 self.assertPathExists("bar/foo_1.0.orig.tar.gz")
770 gzip.open("bar/foo_1.0.orig.tar.gz").close()789 gzip.open("bar/foo_1.0.orig.tar.gz").close()
771790
791 def test_fetch_tarball_lzma(self):
792 self.requireFeature(LzmaFeature)
793 import lzma
794 lzma_f = lzma.LZMAFile("foo-1.0.tar.lzma", 'w')
795 try:
796 tar = tarfile.open("foo-1.0.tar", "w", lzma_f)
797 tar.close()
798 finally:
799 lzma_f.close()
800 source = TarfileSource("foo-1.0.tar.lzma", "1.0")
801 os.mkdir("bar")
802 self.assertEquals(["bar/foo_1.0.orig.tar.gz"],
803 source.fetch_tarball("foo", "1.0", "bar"))
804 self.assertPathExists("bar/foo_1.0.orig.tar.gz")
805 gzip.open("bar/foo_1.0.orig.tar.gz").close()
806
772807
773class _MissingUpstreamProvider(UpstreamProvider):808class _MissingUpstreamProvider(UpstreamProvider):
774 """For tests"""809 """For tests"""
775810
=== modified file 'tests/test_util.py'
--- tests/test_util.py 2011-06-16 11:11:36 +0000
+++ tests/test_util.py 2011-06-24 15:14:30 +0000
@@ -18,6 +18,8 @@
18# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA18# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19#19#
2020
21import bz2
22import gzip
21try:23try:
22 import hashlib as md524 import hashlib as md5
23except ImportError:25except ImportError:
@@ -33,7 +35,6 @@
33 from debian_bundle.changelog import Changelog, Version35 from debian_bundle.changelog import Changelog, Version
3436
35from bzrlib.plugins.builddeb.config import (37from bzrlib.plugins.builddeb.config import (
36 DebBuildConfig,
37 BUILD_TYPE_MERGE,38 BUILD_TYPE_MERGE,
38 BUILD_TYPE_NATIVE,39 BUILD_TYPE_NATIVE,
39 BUILD_TYPE_NORMAL,40 BUILD_TYPE_NORMAL,
@@ -45,6 +46,7 @@
45 NoPreviousUpload,46 NoPreviousUpload,
46 )47 )
47from bzrlib.plugins.builddeb.tests import (48from bzrlib.plugins.builddeb.tests import (
49 LzmaFeature,
48 SourcePackageBuilder,50 SourcePackageBuilder,
49 TestCaseInTempDir,51 TestCaseInTempDir,
50 TestCaseWithTransport,52 TestCaseWithTransport,
@@ -858,11 +860,24 @@
858 if part is not None:860 if part is not None:
859 prefix += "-%s" % part861 prefix += "-%s" % part
860 tar_path = os.path.abspath(prefix + ".tar." + compression)862 tar_path = os.path.abspath(prefix + ".tar." + compression)
861 tf = tarfile.open(tar_path, 'w:%s' % compression)863 if compression == "gz":
864 f = gzip.GzipFile(tar_path, "w")
865 elif compression == "bz2":
866 f = bz2.BZ2File(tar_path, "w")
867 elif compression == "lzma":
868 import lzma
869 f = lzma.LZMAFile(tar_path, "w")
870 else:
871 raise AssertionError("Unknown compressin type %r" %
872 compression)
862 try:873 try:
863 tf.add(basedir)874 tf = tarfile.open(None, 'w', f)
875 try:
876 tf.add(basedir)
877 finally:
878 tf.close()
864 finally:879 finally:
865 tf.close()880 f.close()
866 finally:881 finally:
867 shutil.rmtree(basedir)882 shutil.rmtree(basedir)
868 return tar_path883 return tar_path
@@ -881,6 +896,14 @@
881 strip_components=1)896 strip_components=1)
882 self.assertEquals(os.listdir("target"), ["README"])897 self.assertEquals(os.listdir("target"), ["README"])
883898
899 def test_single_orig_tar_lzma(self):
900 self.requireFeature(LzmaFeature)
901 tar_path = self.create_tarball("package", "0.1", "lzma")
902 os.mkdir("target")
903 extract_orig_tarballs([(tar_path, None)], "target",
904 strip_components=1)
905 self.assertEquals(os.listdir("target"), ["README"])
906
884 def test_multiple_tarballs(self):907 def test_multiple_tarballs(self):
885 base_tar_path = self.create_tarball("package", "0.1", "bz2")908 base_tar_path = self.create_tarball("package", "0.1", "bz2")
886 tar_path_extra = self.create_tarball("package", "0.1", "bz2", part="extra")909 tar_path_extra = self.create_tarball("package", "0.1", "bz2", part="extra")
887910
=== modified file 'upstream/__init__.py'
--- upstream/__init__.py 2011-06-17 01:37:55 +0000
+++ upstream/__init__.py 2011-06-24 15:14:30 +0000
@@ -451,7 +451,8 @@
451 :param packagename: Name of the package (e.g. "bzr-builddeb")451 :param packagename: Name of the package (e.g. "bzr-builddeb")
452 """452 """
453 basename = os.path.basename(path)453 basename = os.path.basename(path)
454 for extension in [".tar.gz", ".tgz", ".tar.bz2", ".zip"]:454 for extension in [".tar.gz", ".tgz", ".tar.bz2", ".tar.lzma", ".tar.xz",
455 ".zip"]:
455 if basename.endswith(extension):456 if basename.endswith(extension):
456 basename = basename[:-len(extension)]457 basename = basename[:-len(extension)]
457 break458 break
458459
=== modified file 'upstream/pristinetar.py'
--- upstream/pristinetar.py 2011-06-23 21:41:36 +0000
+++ upstream/pristinetar.py 2011-06-24 15:14:30 +0000
@@ -249,13 +249,16 @@
249249
250 def has_pristine_tar_delta(self, rev):250 def has_pristine_tar_delta(self, rev):
251 return ('deb-pristine-delta' in rev.properties251 return ('deb-pristine-delta' in rev.properties
252 or 'deb-pristine-delta-bz2' in rev.properties)252 or 'deb-pristine-delta-bz2' in rev.properties
253 or 'deb-pristine-delta-lzma' in rev.properties)
253254
254 def pristine_tar_format(self, rev):255 def pristine_tar_format(self, rev):
255 if 'deb-pristine-delta' in rev.properties:256 if 'deb-pristine-delta' in rev.properties:
256 return 'gz'257 return 'gz'
257 elif 'deb-pristine-delta-bz2' in rev.properties:258 elif 'deb-pristine-delta-bz2' in rev.properties:
258 return 'bz2'259 return 'bz2'
260 elif 'deb-pristine-delta-lzma' in rev.properties:
261 return 'lzma'
259 assert self.has_pristine_tar_delta(rev)262 assert self.has_pristine_tar_delta(rev)
260 raise AssertionError("Not handled new delta type in "263 raise AssertionError("Not handled new delta type in "
261 "pristine_tar_format")264 "pristine_tar_format")
@@ -265,6 +268,8 @@
265 uuencoded = rev.properties['deb-pristine-delta']268 uuencoded = rev.properties['deb-pristine-delta']
266 elif 'deb-pristine-delta-bz2' in rev.properties:269 elif 'deb-pristine-delta-bz2' in rev.properties:
267 uuencoded = rev.properties['deb-pristine-delta-bz2']270 uuencoded = rev.properties['deb-pristine-delta-bz2']
271 elif 'deb-pristine-delta-lzma' in rev.properties:
272 uuencoded = rev.properties['deb-pristine-delta-lzma']
268 else:273 else:
269 assert self.has_pristine_tar_delta(rev)274 assert self.has_pristine_tar_delta(rev)
270 raise AssertionError("Not handled new delta type in "275 raise AssertionError("Not handled new delta type in "
@@ -315,6 +320,8 @@
315 uuencoded = standard_b64encode(delta)320 uuencoded = standard_b64encode(delta)
316 if tarball.endswith(".tar.bz2"):321 if tarball.endswith(".tar.bz2"):
317 ret["deb-pristine-delta-bz2"] = uuencoded322 ret["deb-pristine-delta-bz2"] = uuencoded
323 elif tarball.endswith(".tar.lzma"):
324 ret["deb-pristine-delta-lzma"] = uuencoded
318 else:325 else:
319 ret["deb-pristine-delta"] = uuencoded326 ret["deb-pristine-delta"] = uuencoded
320 return ret327 return ret
321328
=== modified file 'util.py'
--- util.py 2011-06-15 19:09:24 +0000
+++ util.py 2011-06-24 15:14:30 +0000
@@ -692,7 +692,7 @@
692 "invalid orig tarball file %s does not have expected prefix %s" % (692 "invalid orig tarball file %s does not have expected prefix %s" % (
693 tarball_filename, prefix))693 tarball_filename, prefix))
694 base = tarball_filename[len(prefix):]694 base = tarball_filename[len(prefix):]
695 for ext in (".tar.gz", ".tar.bz2", ".tar.lzma", ".tar.xz"):695 for ext in (".tar.gz", ".tar.bz2", ".tar.lzma"):
696 if tarball_filename.endswith(ext):696 if tarball_filename.endswith(ext):
697 base = base[:-len(ext)]697 base = base[:-len(ext)]
698 break698 break
@@ -720,6 +720,8 @@
720 tar_args = ["tar"]720 tar_args = ["tar"]
721 if tarball_filename.endswith(".tar.bz2"):721 if tarball_filename.endswith(".tar.bz2"):
722 tar_args.append('xjf')722 tar_args.append('xjf')
723 elif tarball_filename.endswith(".tar.lzma"):
724 tar_args.append('xJf')
723 else:725 else:
724 tar_args.append('xzf')726 tar_args.append('xzf')
725 if component is not None:727 if component is not None:

Subscribers

People subscribed via source and target branches