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

Proposed by Jelmer Vernooij
Status: Merged
Merged at revision: 507
Proposed branch: lp:~jelmer/bzr-builddeb/tarfilesource
Merge into: lp:bzr-builddeb
Diff against target: 178 lines (+68/-13)
3 files modified
cmds.py (+8/-11)
tests/test_upstream.py (+41/-1)
upstream.py (+19/-1)
To merge this branch: bzr merge lp:~jelmer/bzr-builddeb/tarfilesource
Reviewer Review Type Date Requested Status
James Westby Approve
Review via email: mp+48312@code.launchpad.net

Description of the change

This adds a TarfileSource class which is used for simple tar/zip/etc upstream files. This should make tar files a bit less special in merge-upstream.

TarfileSource does a repack, like merge-upstream. The other UpstreamSource subclasses also already do repacks if necessary. In my next branch I'm going to move the repacks completely into the UpstreamSource classes, to simplify merge-upstream further.

To post a comment you must log in.
Revision history for this message
James Westby (james-w) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'cmds.py'
--- cmds.py 2011-01-31 18:47:05 +0000
+++ cmds.py 2011-02-02 13:35:33 +0000
@@ -93,7 +93,7 @@
93 GetOrigSourceSource,93 GetOrigSourceSource,
94 PristineTarSource,94 PristineTarSource,
95 SelfSplitSource,95 SelfSplitSource,
96 StackedUpstreamSource,96 TarfileSource,
97 UScanSource,97 UScanSource,
98 UpstreamProvider,98 UpstreamProvider,
99 UpstreamBranchSource,99 UpstreamBranchSource,
@@ -535,7 +535,6 @@
535535
536 v3_opt = Option('v3', help='Use dpkg-source format v3.')536 v3_opt = Option('v3', help='Use dpkg-source format v3.')
537537
538
539 takes_options = [package_opt, version_opt,538 takes_options = [package_opt, version_opt,
540 distribution_opt, directory_opt, last_version_opt,539 distribution_opt, directory_opt, last_version_opt,
541 force_opt, v3_opt, 'revision', 'merge-type',540 force_opt, v3_opt, 'revision', 'merge-type',
@@ -566,8 +565,7 @@
566 from bzrlib.plugins.builddeb.repack_tarball import repack_tarball565 from bzrlib.plugins.builddeb.repack_tarball import repack_tarball
567 format = None566 format = None
568 if v3:567 if v3:
569 if (location.endswith(".tar.bz2")568 if location.endswith(".tar.bz2") or location.endswith(".tbz2"):
570 or location.endswith(".tbz2")):
571 format = "bz2"569 format = "bz2"
572 dest_name = tarball_name(package, version, format=format)570 dest_name = tarball_name(package, version, format=format)
573 tarball_filename = os.path.join(orig_dir, dest_name)571 tarball_filename = os.path.join(orig_dir, dest_name)
@@ -675,12 +673,12 @@
675 primary_upstream_source = UpstreamBranchSource(673 primary_upstream_source = UpstreamBranchSource(
676 Branch.open(location), config=config)674 Branch.open(location), config=config)
677 except NotBranchError:675 except NotBranchError:
678 primary_upstream_source = None676 primary_upstream_source = TarfileSource(location, version)
679 else:677 else:
680 if snapshot:678 if snapshot:
681 if upstream_branch_source is None:679 if upstream_branch_source is None:
682 raise BzrCommandError("--snapshot requires an upstream "680 raise BzrCommandError("--snapshot requires an upstream"
683 "branch source")681 " branch source")
684 primary_upstream_source = upstream_branch_source682 primary_upstream_source = upstream_branch_source
685 else:683 else:
686 primary_upstream_source = UScanSource(tree, larstiq)684 primary_upstream_source = UScanSource(tree, larstiq)
@@ -705,10 +703,6 @@
705 elif version is None and primary_upstream_source is not None:703 elif version is None and primary_upstream_source is not None:
706 version = primary_upstream_source.get_latest_version(704 version = primary_upstream_source.get_latest_version(
707 package, current_version)705 package, current_version)
708 target_dir = tempfile.mkdtemp() # FIXME: Cleanup?
709 if need_upstream_tarball:
710 location = primary_upstream_source.fetch_tarball(
711 package, version, target_dir)
712 if version is None:706 if version is None:
713 raise BzrCommandError("You must specify the version number using --version.")707 raise BzrCommandError("You must specify the version number using --version.")
714 note("Using version string %s." % (version))708 note("Using version string %s." % (version))
@@ -717,6 +711,9 @@
717 upstream_revision = upstream_branch_source.version_as_revision(711 upstream_revision = upstream_branch_source.version_as_revision(
718 package, version)712 package, version)
719 if need_upstream_tarball:713 if need_upstream_tarball:
714 target_dir = tempfile.mkdtemp() # FIXME: Cleanup?
715 location = primary_upstream_source.fetch_tarball(
716 package, version, target_dir)
720 tarball_filename = self._get_tarball(config, tree, package,717 tarball_filename = self._get_tarball(config, tree, package,
721 version, upstream_branch, upstream_revision, v3,718 version, upstream_branch, upstream_revision, v3,
722 location)719 location)
723720
=== modified file 'tests/test_upstream.py'
--- tests/test_upstream.py 2011-01-24 05:46:47 +0000
+++ tests/test_upstream.py 2011-02-02 13:35:33 +0000
@@ -24,6 +24,8 @@
2424
2525
26import os26import os
27import tarfile
28import zipfile
2729
28from bzrlib.tests import (30from bzrlib.tests import (
29 TestCase,31 TestCase,
@@ -40,8 +42,10 @@
40from bzrlib.plugins.builddeb.upstream import (42from bzrlib.plugins.builddeb.upstream import (
41 AptSource,43 AptSource,
42 StackedUpstreamSource,44 StackedUpstreamSource,
45 TarfileSource,
43 UpstreamBranchSource,46 UpstreamBranchSource,
44 UpstreamProvider,47 UpstreamProvider,
48 UpstreamSource,
45 UScanSource,49 UScanSource,
46 Version,50 Version,
47 )51 )
@@ -180,7 +184,7 @@
180 self.assertEqual("target", caller.target_dir)184 self.assertEqual("target", caller.target_dir)
181185
182186
183class RecordingSource(object):187class RecordingSource(UpstreamSource):
184188
185 def __init__(self, succeed, latest=None):189 def __init__(self, succeed, latest=None):
186 self._succeed = succeed190 self._succeed = succeed
@@ -194,6 +198,7 @@
194 self._specific_versions.append((package, version, target_dir))198 self._specific_versions.append((package, version, target_dir))
195 if not self._succeed:199 if not self._succeed:
196 raise PackageVersionNotPresent(package, version, self)200 raise PackageVersionNotPresent(package, version, self)
201 return self._tarball_path(package, version, target_dir)
197202
198 def __repr__(self):203 def __repr__(self):
199 return "%s()" % self.__class__.__name__204 return "%s()" % self.__class__.__name__
@@ -328,6 +333,41 @@
328 self.assertEquals(revid1, source.version_as_revision("foo", "2.1"))333 self.assertEquals(revid1, source.version_as_revision("foo", "2.1"))
329334
330335
336class TarfileSourceTests(TestCaseWithTransport):
337 """Tests for TarfileSource."""
338
339 def setUp(self):
340 super(TarfileSourceTests, self).setUp()
341 tar = tarfile.open("foo-1.0.tar.gz", "w:gz")
342 tar.close()
343
344 def test_version(self):
345 source = TarfileSource("foo-1.0.tar.gz", "1.0")
346 self.assertEquals("1.0", source.get_latest_version("foo", "0.9"))
347
348 def test_fetch_tarball(self):
349 source = TarfileSource("foo-1.0.tar.gz", "1.0")
350 os.mkdir("bar")
351 self.assertEquals("bar/foo_1.0.orig.tar.gz",
352 source.fetch_tarball("foo", "1.0", "bar"))
353 self.failUnlessExists("bar/foo_1.0.orig.tar.gz")
354
355 def test_fetch_tarball_repack(self):
356 zf = zipfile.ZipFile("bla-2.0.zip", "w")
357 zf.close()
358 source = TarfileSource("bla-2.0.zip", "2.0")
359 os.mkdir("bar")
360 self.assertEquals("bar/foo_2.0.orig.tar.gz",
361 source.fetch_tarball("foo", "2.0", "bar"))
362 self.failUnlessExists("bar/foo_2.0.orig.tar.gz")
363
364 def test_fetch_tarball_not_present(self):
365 source = TarfileSource("foo-1.0.tar.gz", "1.0")
366 os.mkdir("bar")
367 self.assertRaises(PackageVersionNotPresent,
368 source.fetch_tarball, "foo", "0.9", "bar")
369
370
331class _MissingUpstreamProvider(UpstreamProvider):371class _MissingUpstreamProvider(UpstreamProvider):
332 """For tests"""372 """For tests"""
333373
334374
=== modified file 'upstream.py'
--- upstream.py 2011-01-31 23:15:42 +0000
+++ upstream.py 2011-02-02 13:35:33 +0000
@@ -511,4 +511,22 @@
511 tarball_name(self.package, self.version.upstream_version, format='lzma')]511 tarball_name(self.package, self.version.upstream_version, format='lzma')]
512512
513513
514514class TarfileSource(UpstreamSource):
515 """Source that uses a single local tarball."""
516
517 def __init__(self, path, version=None):
518 self.path = path
519 # TODO: Parse self.path for version is version is None?
520 self.version = version
521
522 def fetch_tarball(self, package, version, target_dir):
523 if version != self.version:
524 raise PackageVersionNotPresent(package, version, self)
525 dest_name = tarball_name(package, version)
526 repack_tarball(self.path, dest_name, target_dir=target_dir)
527 target_filename = self._tarball_path(package, version, target_dir)
528 shutil.copy(self.path, target_filename)
529 return target_filename
530
531 def get_latest_version(self, package, version):
532 return self.version

Subscribers

People subscribed via source and target branches