[Pkg-bazaar-commits] r119 ./bzr-builddeb/people/jdw/merge_upstream: Add support for importing from directories and .tar.bz2 archives.
James Westby
jw+debian at jameswestby.net
Fri Jun 22 22:52:45 UTC 2007
------------------------------------------------------------
revno: 119
committer: James Westby <jw+debian at jameswestby.net>
branch nick: merge-upstream.siretart
timestamp: Fri 2007-06-22 23:52:45 +0100
message:
Add support for importing from directories and .tar.bz2 archives.
Parameterise the test suite so that each test is run against each import
type.
modified:
merge_upstream.py
tests/__init__.py
tests/test_merge_upstream.py
-------------- next part --------------
=== modified file 'merge_upstream.py'
--- a/merge_upstream.py 2007-06-22 17:05:26 +0000
+++ b/merge_upstream.py 2007-06-22 22:52:45 +0000
@@ -19,10 +19,14 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
+from bz2 import BZ2File
import os
+from StringIO import StringIO
from bzrlib.errors import BzrCommandError
-from bzrlib.plugins.bzrtools.upstream_import import import_tar
+from bzrlib.plugins.bzrtools.upstream_import import (import_tar,
+ import_dir,
+ )
# TODO: handle more input sources.
# TODO: rename/repack tarball in to place.
@@ -63,22 +67,43 @@
revno, rev_id = old_revision.in_branch(tree.branch)
if rev_id != tree.branch.last_revision():
tree.revert([], tree.branch.repository.revision_tree(rev_id))
- tar_input = open(source, 'rb')
- try:
- import_tar(tree, tar_input)
- finally:
- tar_input.close()
+ if os.path.isdir(source):
+ s = StringIO(source)
+ s.seek(0)
+ import_dir(tree, s)
+ else:
+ if (source.endswith('.tar') or source.endswith('.tar.gz') or
+ source.endswith('.tar.bz2') or source.endswith('.tgz')):
+ if source.endswith('.bz2'):
+ tar_input = BZ2File(source, 'r')
+ tar_input = StringIO(tar_input.read())
+ else:
+ tar_input = open(source, 'rb')
+ try:
+ import_tar(tree, tar_input)
+ finally:
+ tar_input.close()
tree.set_parent_ids([rev_id])
tree.branch.set_last_revision_info(revno, rev_id)
tree.commit('import upstream from %s' % os.path.basename(source))
tree.merge_from_branch(tree.branch, to_revision=current_revision)
else:
# Fast forward the merge.
- tar_input = open(source, 'rb')
- try:
- import_tar(tree, tar_input)
- finally:
- tar_input.close()
+ if os.path.isdir(source):
+ s = StringIO(source)
+ s.seek(0)
+ import_dir(tree, s)
+ else:
+ if (source.endswith('.tar') or source.endswith('.tar.gz') or
+ source.endswith('.tar.bz2') or source.endswith('.tgz')):
+ if source.endswith('.bz2'):
+ tar_input = BZ2File(source, 'r')
+ tar_input = StringIO(tar_input.read())
+ else:
+ tar_input = open(source, 'rb')
+ try:
+ import_tar(tree, tar_input)
+ finally:
+ tar_input.close()
tree.commit('import upstream from %s' % os.path.basename(source))
-
=== modified file 'tests/__init__.py'
--- a/tests/__init__.py 2007-06-21 22:55:10 +0000
+++ b/tests/__init__.py 2007-06-22 22:52:45 +0000
@@ -18,13 +18,66 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
+from copy import deepcopy
import doctest
+import os
from unittest import TestSuite
-from bzrlib.tests import TestUtil
+from bzrlib.tests import TestUtil, adapt_modules
import changes
import config
+import shutil
+import tarfile
+
+def make_new_upstream_dir(dir):
+ def _make_upstream_dir():
+ os.rename('package-0.2', dir)
+ return _make_upstream_dir
+
+def make_new_upstream_tarball(tarball):
+ def _make_upstream_tarball():
+ tar = tarfile.open(tarball, 'w:gz')
+ try:
+ tar.add('package-0.2')
+ finally:
+ tar.close()
+ shutil.rmtree('package-0.2')
+ return _make_upstream_tarball
+
+def make_new_upstream_tarball_bz2(tarball):
+ def _make_upstream_tarball():
+ tar = tarfile.open(tarball, 'w:bz2')
+ try:
+ tar.add('package-0.2')
+ finally:
+ tar.close()
+ shutil.rmtree('package-0.2')
+ return _make_upstream_tarball
+
+tarball_functions = [('dir', make_new_upstream_dir, '../package-0.2'),
+ ('.tar.gz', make_new_upstream_tarball,
+ '../package-0.2.tar.gz'),
+ ('.tar.bz2', make_new_upstream_tarball_bz2,
+ '../package-0.2.tar.bz2'),
+ ]
+
+
+class MergeUpstreamAdaptor(object):
+
+ def adapt(self, test):
+ result = TestSuite()
+ for (name, function, source) in tarball_functions:
+ new_test = deepcopy(test)
+ new_test.build_tarball = function(source)
+ new_test.upstream_tarball = source
+ def make_new_id():
+ new_id = '%s(%s)' % (test.id(), name)
+ return lambda: new_id
+ new_test.id = make_new_id()
+ result.addTest(new_test)
+ return result
+
def test_suite():
loader = TestUtil.TestLoader()
@@ -32,7 +85,6 @@
testmod_names = [
'test_builder',
'test_config',
- 'test_merge_upstream',
'test_util',
]
suite.addTest(loader.loadTestsFromModuleNames(["%s.%s" % (__name__, i)
@@ -45,5 +97,8 @@
for mod in doctest_mod_names:
suite.addTest(doctest.DocTestSuite(mod))
+ adapt_modules(['%s.test_merge_upstream' % __name__],
+ MergeUpstreamAdaptor(), loader, suite)
+
return suite
=== modified file 'tests/test_merge_upstream.py'
--- a/tests/test_merge_upstream.py 2007-06-22 17:53:51 +0000
+++ b/tests/test_merge_upstream.py 2007-06-22 22:52:45 +0000
@@ -20,7 +20,6 @@
import os
import shutil
-import tarfile
from bzrlib.errors import (BzrCommandError,
InvalidRevisionSpec,
@@ -44,11 +43,16 @@
"""Turn the rev_id passed in to a revision spec."""
return RevisionSpec.from_string('revid:' + rev_id)
-class TestSimpleMergeUpstreamNormal(TestCaseWithTransport):
+class TestMergeUpstreamNormal(TestCaseWithTransport):
"""Test that builddeb can merge upstream in normal mode"""
upstream_rev_id_1 = 'upstream-1'
- upstream_tarball = '../package-0.2.tar.gz'
+
+ def make_new_upstream(self):
+ self.build_tree(['package-0.2/', 'package-0.2/README-NEW',
+ 'package-0.2/CHANGELOG'])
+ write_to_file('package-0.2/CHANGELOG', 'version 2\n')
+ self.build_tarball()
def make_first_upstream_commit(self):
self.wt = self.make_branch_and_tree('.')
@@ -62,28 +66,12 @@
['debian-id', 'debian-changelog-id'])
self.wt.commit('debian version 1-1', rev_id='debian-1-1')
- def make_new_upstream_tarball(self):
- self.build_tree(['package-0.2/', 'package-0.2/README-NEW',
- 'package-0.2/CHANGELOG'])
- write_to_file('package-0.2/CHANGELOG', 'version 2\n')
- tar = tarfile.open(self.upstream_tarball, 'w:gz')
- try:
- tar.add('package-0.2')
- finally:
- tar.close()
- shutil.rmtree('package-0.2')
-
- def make_new_upstream_tarball_with_debian(self):
+ def make_new_upstream_with_debian(self):
self.build_tree(['package-0.2/', 'package-0.2/README-NEW',
'package-0.2/CHANGELOG', 'package-0.2/debian/',
'package-0.2/debian/changelog'])
write_to_file('package-0.2/CHANGELOG', 'version 2\n')
- tar = tarfile.open(self.upstream_tarball, 'w:gz')
- try:
- tar.add('package-0.2')
- finally:
- tar.close()
- shutil.rmtree('package-0.2')
+ self.build_tarball()
def perform_upstream_merge(self):
"""Perform a simple upstream merge.
@@ -94,54 +82,14 @@
self.make_first_upstream_commit()
old_upstream_revision = self.wt.branch.last_revision()
self.make_first_debian_commit()
- self.make_new_upstream_tarball()
+ self.make_new_upstream()
merge_upstream(self.wt, self.upstream_tarball,
make_revspec(old_upstream_revision))
- os.unlink(self.upstream_tarball)
return self.wt
- def test_merge_upstream_gives_correct_tree(self):
- """Check that a merge leaves the tree as expected."""
- wt = self.perform_upstream_merge()
- self.failUnlessExists('CHANGELOG')
- self.failUnlessExists('README-NEW')
- self.failIfExists('README')
- self.failUnlessExists('debian/changelog')
- f = open('CHANGELOG')
- try:
- self.assertEqual(f.read(), 'version 2\n')
- finally:
- f.close()
-
- def test_merge_upstream_gives_correct_status(self):
- wt = self.perform_upstream_merge()
- basis = wt.basis_tree()
- changes = wt.changes_from(basis, want_unchanged=True,
- want_unversioned=True)
- added = [('debian', 'debian-id', 'directory'),
- ('debian/changelog', 'debian-changelog-id', 'file')]
- self.assertEqual(changes.added, added)
- self.assertEqual(changes.removed, [])
- self.assertEqual(changes.renamed, [])
- self.assertEqual(changes.modified, [])
- self.assertEqual(changes.unchanged[0],
- ('CHANGELOG', 'CHANGELOG-id', 'file'))
- self.assertEqual(changes.unchanged[1][0], 'README-NEW')
- self.assertEqual(changes.unchanged[1][2], 'file')
- self.assertEqual(changes.unversioned, [])
- self.assertEqual(changes.kind_changed, [])
- parents = wt.get_parent_ids()
- self.assertEqual(len(parents), 2)
- self.assertEqual(parents[1], 'debian-1-1')
- self.assertEqual(wt.conflicts(), [])
-
- def test_merge_upstream_gives_correct_history(self):
- wt = self.perform_upstream_merge()
- rh = wt.branch.revision_history()
- self.assertEqual(len(rh), 2)
- self.assertEqual(rh[0], self.upstream_rev_id_1)
- self.assertEqual(wt.branch.repository.get_revision(rh[1]).message,
- 'import upstream from package-0.2.tar.gz')
+ def test_merge_upstream(self):
+ self.perform_upstream_merge()
+ self.check_simple_merge_results()
def test_merge_upstream_requires_clean_tree(self):
wt = self.make_branch_and_tree('.')
@@ -159,7 +107,7 @@
def test_merge_upstream_handles_invalid_revision(self):
self.make_first_upstream_commit()
self.make_first_debian_commit()
- self.make_new_upstream_tarball()
+ self.make_new_upstream()
self.assertRaises(InvalidRevisionSpec, merge_upstream, self.wt,
self.upstream_tarball, make_revspec('NOTAREVID'))
@@ -170,7 +118,7 @@
branch the code should do a fast-forward.
"""
self.make_first_upstream_commit()
- self.make_new_upstream_tarball()
+ self.make_new_upstream()
revspec = make_revspec(self.wt.branch.last_revision())
merge_upstream(self.wt, self.upstream_tarball, revspec)
wt = self.wt
@@ -187,13 +135,17 @@
self.assertEqual(rh[0], self.upstream_rev_id_1)
self.assertEqual(len(wt.get_parent_ids()), 1)
self.assertEqual(wt.get_parent_ids()[0], rh[1])
+ revision = wt.branch.repository.get_revision(rh[1])
+ self.assertEqual(revision.message,
+ 'import upstream from %s' % \
+ os.path.basename(self.upstream_tarball))
def perform_conflicted_merge(self):
self.make_first_upstream_commit()
revspec = make_revspec(self.wt.branch.last_revision())
write_to_file('CHANGELOG', 'debian version\n')
self.make_first_debian_commit()
- self.make_new_upstream_tarball_with_debian()
+ self.make_new_upstream_with_debian()
merge_upstream(self.wt, self.upstream_tarball, revspec)
return self.wt
@@ -265,6 +217,34 @@
self.assertEqual(len(rh), 2)
self.assertEqual(rh[0], 'upstream-1')
self.assertEqual(wt.branch.repository.get_revision(rh[1]).message,
- 'import upstream from package-0.2.tar.gz')
+ 'import upstream from %s' % \
+ os.path.basename(self.upstream_tarball))
+ def check_simple_merge_results(self):
+ wt = self.wt
+ basis = wt.basis_tree()
+ changes = wt.changes_from(basis, want_unchanged=True,
+ want_unversioned=True)
+ added = [('debian', 'debian-id', 'directory'),
+ ('debian/changelog', 'debian-changelog-id', 'file')]
+ self.assertEqual(changes.added, added)
+ self.assertEqual(changes.removed, [])
+ self.assertEqual(changes.renamed, [])
+ self.assertEqual(changes.modified, [])
+ self.assertEqual(changes.unchanged[0],
+ ('CHANGELOG', 'CHANGELOG-id', 'file'))
+ self.assertEqual(changes.unchanged[1][0], 'README-NEW')
+ self.assertEqual(changes.unchanged[1][2], 'file')
+ self.assertEqual(changes.unversioned, [])
+ self.assertEqual(changes.kind_changed, [])
+ parents = wt.get_parent_ids()
+ self.assertEqual(len(parents), 2)
+ self.assertEqual(parents[1], 'debian-1-1')
+ self.assertEqual(wt.conflicts(), [])
+ rh = wt.branch.revision_history()
+ self.assertEqual(len(rh), 2)
+ self.assertEqual(rh[0], self.upstream_rev_id_1)
+ self.assertEqual(wt.branch.repository.get_revision(rh[1]).message,
+ 'import upstream from %s' % \
+ os.path.basename(self.upstream_tarball))
More information about the Pkg-bazaar-commits
mailing list