[Pkg-bazaar-commits] r139 ./bzr-builddeb/people/jdw/merge_upstream: Make the config say 'native = True' when it is so that the packages will build.
James Westby
jw+debian at jameswestby.net
Sun Jul 1 18:18:16 UTC 2007
------------------------------------------------------------
revno: 139
committer: James Westby <jw+debian at jameswestby.net>
branch nick: merge_upstream
timestamp: Sun 2007-07-01 19:15:12 +0100
message:
Make the config say 'native = True' when it is so that the packages will build.
This does remove the config file when it transitions to non-native, so it
might play funny buggers with merges a bit, but it's a rare situation.
Also add some helpers in the tests for common things. Doesn't reduce the line
count much, but it makes the intention a bit clearer for some.
modified:
import_dsc.py
tests/test_import_dsc.py
-------------- next part --------------
=== modified file 'import_dsc.py'
--- a/import_dsc.py 2007-07-01 14:58:33 +0000
+++ b/import_dsc.py 2007-07-01 18:15:12 +0000
@@ -30,6 +30,7 @@
generate_ids,
urlutils,
)
+from bzrlib.config import ConfigObj
from bzrlib.errors import FileExists, BzrError
from bzrlib.osutils import file_iterator, isdir, basename
from bzrlib.trace import warning, info
@@ -44,7 +45,6 @@
from errors import ImportError
from merge_upstream import make_upstream_tag
-# TODO: Allow native->non-native transitions and back
# TODO: support explicit upstream branch.
def import_tar(tree, tar_input, file_ids_from=None):
@@ -236,9 +236,12 @@
try:
dangling_revid = None
dangling_tree = None
+ old_upstream_tree = None
if last_upstream is not None:
old_upstream_revid = tree.branch.tags.lookup_tag(
make_upstream_tag(last_upstream))
+ old_upstream_tree = tree.branch.repository.revision_tree(
+ old_upstream_revid)
if old_upstream_revid != tree.branch.last_revision():
dangling_revid = tree.branch.last_revision()
dangling_tree = tree.branch.repository.revision_tree(dangling_revid)
@@ -251,6 +254,46 @@
tree.branch.set_last_revision_info(revno, old_upstream_revid)
if dangling_revid is not None:
tree.add_parent_tree_id(dangling_revid)
+ config_filename = '.bzr-builddeb/default.conf'
+ to_add = False
+ to_add_dir = False
+ if not tree.has_filename(config_filename):
+ if not tree.has_filename(os.path.dirname(config_filename)):
+ os.mkdir(os.path.join(tree.basedir,
+ os.path.dirname(config_filename)))
+ to_add_dir = True
+ conf = open(os.path.join(tree.basedir, config_filename), 'wb')
+ conf.close()
+ to_add = True
+ config_ = ConfigObj(os.path.join(tree.basedir, config_filename))
+ try:
+ config_['BUILDDEB']
+ except KeyError:
+ config_['BUILDDEB'] = {}
+ try:
+ current_value = config_['BUILDDEB']['native']
+ except KeyError:
+ current_value = False
+ if not current_value:
+ config_['BUILDDEB']['native'] = True
+ config_.write()
+ if to_add_dir:
+ file_id = None
+ parent = os.path.dirname(config_filename)
+ if old_upstream_tree is not None:
+ file_id = old_upstream_tree.path2id(parent)
+ if file_id is not None:
+ tree.add([parent], [file_id])
+ else:
+ tree.add([parent])
+ if to_add:
+ file_id = None
+ if old_upstream_tree is not None:
+ file_id = old_upstream_tree.path2id(config_filename)
+ if file_id is not None:
+ tree.add([config_filename], [file_id])
+ else:
+ tree.add([config_filename])
tree.commit('import package from %s' % (os.path.basename(origname)))
upstream_version = version.upstream_version
tree.branch.tags.set_tag(make_upstream_tag(upstream_version),
@@ -434,25 +477,31 @@
try:
last_upstream = None
dangling_revid = None
+ last_native = False
for (filename, version, type, base_dir, transport) in self.safe_files:
if type == 'orig':
+ if last_native:
+ last_upstream = None
dangling_revid = self.import_orig(tree, filename, version,
last_upstream=last_upstream,
transport=transport,
base_dir=base_dir)
info("imported %s" % filename)
last_upstream = version.upstream_version
+ last_native = False
elif type == 'diff':
self.import_diff(tree, filename, version,
dangling_revid=dangling_revid,
transport=transport, base_dir=base_dir)
info("imported %s" % filename)
dangling_revid = None
+ last_native = False
elif type == 'native':
self.import_native(tree, filename, version,
last_upstream=last_upstream,
transport=transport, base_dir=base_dir)
- last_upstream = None
+ last_upstream = version.upstream_version
+ last_native = True
info("imported %s" % filename)
finally:
tree.unlock()
=== modified file 'tests/test_import_dsc.py'
--- a/tests/test_import_dsc.py 2007-07-01 14:58:33 +0000
+++ b/tests/test_import_dsc.py 2007-07-01 18:15:12 +0000
@@ -22,6 +22,7 @@
import shutil
import tarfile
+from bzrlib.config import ConfigObj
from bzrlib.errors import FileExists
from bzrlib.tests import TestCaseWithTransport
from bzrlib.workingtree import WorkingTree
@@ -62,6 +63,8 @@
native_dsc_1 = 'package_0.1.dsc'
native_dsc_2 = 'package_0.2.dsc'
+ config_files = ['.bzr-builddeb/', '.bzr-builddeb/default.conf']
+
def make_base_package(self):
os.mkdir(self.basedir)
write_to_file(os.path.join(self.basedir, 'README'), 'hello\n')
@@ -225,18 +228,10 @@
tree.unlock()
for path in expected_inv:
self.failUnlessExists(os.path.join(self.target, path))
- f = open(os.path.join(self.target, 'Makefile'))
- try:
- contents = f.read()
- finally:
- f.close()
- self.assertEqual(contents, 'good command\n')
- f = open(os.path.join(self.target, 'debian', 'changelog'))
- try:
- contents = f.read()
- finally:
- f.close()
- self.assertEqual(contents, 'version 1-1\n')
+ self.assertContentsAre(os.path.join(self.target, 'Makefile'),
+ 'good command\n')
+ self.assertContentsAre(os.path.join(self.target, 'debian', 'changelog'),
+ 'version 1-1\n')
self.assertEqual(tree.changes_from(tree.basis_tree()).has_changed(),
False)
@@ -245,27 +240,15 @@
tree = WorkingTree.open(self.target)
rh = tree.branch.revision_history()
self.assertEqual(len(rh), 2)
- msg = tree.branch.repository.get_revision(rh[0]).message
- self.assertEqual(msg, 'import upstream from %s' % self.orig_1)
- msg = tree.branch.repository.get_revision(rh[1]).message
- self.assertEqual(msg, 'merge packaging changes from %s' % self.diff_1)
+ self.check_revision_message(tree, rh[0],
+ 'import upstream from %s' % self.orig_1)
+ self.check_revision_message(tree, rh[1],
+ 'merge packaging changes from %s' % self.diff_1)
changes = tree.changes_from(tree.branch.repository.revision_tree(rh[0]))
- added = changes.added
- self.assertEqual(len(added), 3)
- self.assertEqual(added[0][0], 'debian')
- self.assertEqual(added[0][2], 'directory')
- self.assertEqual(added[1][0], 'debian/changelog')
- self.assertEqual(added[1][2], 'file')
- self.assertEqual(added[2][0], 'debian/install')
- self.assertEqual(added[2][2], 'file')
- self.assertEqual(len(changes.removed), 0)
- self.assertEqual(len(changes.renamed), 0)
- modified = changes.modified
- self.assertEqual(len(modified), 1)
- self.assertEqual(modified[0][0], 'Makefile')
- self.assertEqual(modified[0][2], 'file')
- self.assertEqual(modified[0][3], True)
- self.assertEqual(modified[0][4], False)
+ expected_added = ['debian/', 'debian/changelog', 'debian/install']
+ expected_modified = ['Makefile']
+ self.check_changes(changes, added=expected_added,
+ modified=expected_modified)
tag = tree.branch.tags.lookup_tag('upstream-0.1')
self.assertEqual(tag, rh[0])
@@ -282,18 +265,10 @@
tree.unlock()
for path in expected_inv:
self.failUnlessExists(os.path.join(self.target, path))
- f = open(os.path.join(self.target, 'Makefile'))
- try:
- contents = f.read()
- finally:
- f.close()
- self.assertEqual(contents, 'good command\n')
- f = open(os.path.join(self.target, 'debian', 'changelog'))
- try:
- contents = f.read()
- finally:
- f.close()
- self.assertEqual(contents, 'version 1-1\nversion 1-2\n')
+ self.assertContentsAre(os.path.join(self.target, 'Makefile'),
+ 'good command\n')
+ self.assertContentsAre(os.path.join(self.target, 'debian', 'changelog'),
+ 'version 1-1\nversion 1-2\n')
self.assertEqual(tree.changes_from(tree.basis_tree()).has_changed(),
False)
@@ -302,54 +277,36 @@
tree = WorkingTree.open(self.target)
rh = tree.branch.revision_history()
self.assertEqual(len(rh), 3)
- msg = tree.branch.repository.get_revision(rh[0]).message
- self.assertEqual(msg, 'import upstream from %s' % self.orig_1)
- msg = tree.branch.repository.get_revision(rh[1]).message
- self.assertEqual(msg, 'merge packaging changes from %s' % self.diff_1)
- msg = tree.branch.repository.get_revision(rh[2]).message
- self.assertEqual(msg, 'merge packaging changes from %s' % self.diff_1b)
+ self.check_revision_message(tree, rh[0],
+ 'import upstream from %s' % self.orig_1)
+ self.check_revision_message(tree, rh[1],
+ 'merge packaging changes from %s' % self.diff_1)
+ self.check_revision_message(tree, rh[2],
+ 'merge packaging changes from %s' % self.diff_1b)
changes = tree.changes_from(tree.branch.repository.revision_tree(rh[1]))
- added = changes.added
- self.assertEqual(len(added), 1, str(added))
- self.assertEqual(added[0][0], 'debian/control')
- self.assertEqual(added[0][2], 'file')
- self.assertEqual(len(changes.removed), 1)
- self.assertEqual(changes.removed[0][0], 'debian/install')
- self.assertEqual(changes.removed[0][2], 'file')
- self.assertEqual(len(changes.renamed), 0)
- modified = changes.modified
- self.assertEqual(len(modified), 1)
- self.assertEqual(modified[0][0], 'debian/changelog')
- self.assertEqual(modified[0][2], 'file')
- self.assertEqual(modified[0][3], True)
- self.assertEqual(modified[0][4], False)
+ expected_added = ['debian/control']
+ expected_removed = ['debian/install']
+ expected_modified = ['debian/changelog']
+ self.check_changes(changes, added=expected_added,
+ removed=expected_removed, modified=expected_modified)
def test_import_two_dsc_one_upstream_history_repeated_diff(self):
self.import_dsc_1b_repeated_diff()
tree = WorkingTree.open(self.target)
rh = tree.branch.revision_history()
self.assertEqual(len(rh), 3)
- msg = tree.branch.repository.get_revision(rh[0]).message
- self.assertEqual(msg, 'import upstream from %s' % self.orig_1)
- msg = tree.branch.repository.get_revision(rh[1]).message
- self.assertEqual(msg, 'merge packaging changes from %s' % self.diff_1)
- msg = tree.branch.repository.get_revision(rh[2]).message
- self.assertEqual(msg, 'merge packaging changes from %s' % self.diff_1b)
+ self.check_revision_message(tree, rh[0],
+ 'import upstream from %s' % self.orig_1)
+ self.check_revision_message(tree, rh[1],
+ 'merge packaging changes from %s' % self.diff_1)
+ self.check_revision_message(tree, rh[2],
+ 'merge packaging changes from %s' % self.diff_1b)
changes = tree.changes_from(tree.branch.repository.revision_tree(rh[1]))
- added = changes.added
- self.assertEqual(len(added), 1, str(added))
- self.assertEqual(added[0][0], 'debian/control')
- self.assertEqual(added[0][2], 'file')
- self.assertEqual(len(changes.removed), 1)
- self.assertEqual(changes.removed[0][0], 'debian/install')
- self.assertEqual(changes.removed[0][2], 'file')
- self.assertEqual(len(changes.renamed), 0)
- modified = changes.modified
- self.assertEqual(len(modified), 1)
- self.assertEqual(modified[0][0], 'debian/changelog')
- self.assertEqual(modified[0][2], 'file')
- self.assertEqual(modified[0][3], True)
- self.assertEqual(modified[0][4], False)
+ expected_added = ['debian/control']
+ expected_removed = ['debian/install']
+ expected_modified = ['debian/changelog']
+ self.check_changes(changes, added=expected_added,
+ removed=expected_removed, modified=expected_modified)
def test_import_three_dsc_one_upstream_tree(self):
self.import_dsc_1c()
@@ -365,18 +322,10 @@
tree.unlock()
for path in expected_inv:
self.failUnlessExists(os.path.join(self.target, path))
- f = open(os.path.join(self.target, 'Makefile'))
- try:
- contents = f.read()
- finally:
- f.close()
- self.assertEqual(contents, 'good command\n')
- f = open(os.path.join(self.target, 'debian', 'changelog'))
- try:
- contents = f.read()
- finally:
- f.close()
- self.assertEqual(contents, 'version 1-1\nversion 1-2\nversion 1-3\n')
+ self.assertContentsAre(os.path.join(self.target, 'Makefile'),
+ 'good command\n')
+ self.assertContentsAre(os.path.join(self.target, 'debian', 'changelog'),
+ 'version 1-1\nversion 1-2\nversion 1-3\n')
self.assertEqual(tree.changes_from(tree.basis_tree()).has_changed(),
False)
@@ -385,28 +334,19 @@
tree = WorkingTree.open(self.target)
rh = tree.branch.revision_history()
self.assertEqual(len(rh), 4)
- msg = tree.branch.repository.get_revision(rh[0]).message
- self.assertEqual(msg, 'import upstream from %s' % self.orig_1)
- msg = tree.branch.repository.get_revision(rh[1]).message
- self.assertEqual(msg, 'merge packaging changes from %s' % self.diff_1)
- msg = tree.branch.repository.get_revision(rh[2]).message
- self.assertEqual(msg, 'merge packaging changes from %s' % self.diff_1b)
- msg = tree.branch.repository.get_revision(rh[3]).message
- self.assertEqual(msg, 'merge packaging changes from %s' % self.diff_1c)
+ self.check_revision_message(tree, rh[0],
+ 'import upstream from %s' % self.orig_1)
+ self.check_revision_message(tree, rh[1],
+ 'merge packaging changes from %s' % self.diff_1)
+ self.check_revision_message(tree, rh[2],
+ 'merge packaging changes from %s' % self.diff_1b)
+ self.check_revision_message(tree, rh[3],
+ 'merge packaging changes from %s' % self.diff_1c)
changes = tree.changes_from(tree.branch.repository.revision_tree(rh[2]))
- added = changes.added
- self.assertEqual(len(added), 2, str(added))
- self.assertEqual(added[0][0], 'debian/install')
- self.assertEqual(added[0][2], 'file')
- self.assertEqual(added[1][0], 'from_debian')
- self.assertEqual(len(changes.removed), 0)
- self.assertEqual(len(changes.renamed), 0)
- modified = changes.modified
- self.assertEqual(len(modified), 1)
- self.assertEqual(modified[0][0], 'debian/changelog')
- self.assertEqual(modified[0][2], 'file')
- self.assertEqual(modified[0][3], True)
- self.assertEqual(modified[0][4], False)
+ expected_added = ['debian/install', 'from_debian']
+ expected_modified = ['debian/changelog']
+ self.check_changes(changes, added=expected_added,
+ modified=expected_modified)
def test_import_three_dsc_two_upstream_tree(self):
self.import_dsc_2()
@@ -421,64 +361,52 @@
tree.unlock()
for path in expected_inv:
self.failUnlessExists(os.path.join(self.target, path))
- f = open(os.path.join(self.target, 'Makefile'))
- try:
- contents = f.read()
- finally:
- f.close()
- self.assertEqual(contents, 'good command\n')
- f = open(os.path.join(self.target, 'debian', 'changelog'))
- try:
- contents = f.read()
- finally:
- f.close()
- self.assertEqual(contents,
+ self.assertContentsAre(os.path.join(self.target, 'Makefile'),
+ 'good command\n')
+ self.assertContentsAre(os.path.join(self.target, 'debian', 'changelog'),
'version 1-1\nversion 1-2\nversion 1-3\nversion 2-1\n')
self.assertEqual(tree.changes_from(tree.basis_tree()).has_changed(),
False)
+ def assertContentsAre(self, filename, expected_contents):
+ f = open(filename)
+ try:
+ contents = f.read()
+ finally:
+ f.close()
+ self.assertEqual(contents, expected_contents,
+ "Contents of %s are not as expected" % filename)
+
def test_import_four_dsc_two_upstream_history(self):
self.import_dsc_2()
tree = WorkingTree.open(self.target)
rh = tree.branch.revision_history()
self.assertEqual(len(rh), 3)
- msg = tree.branch.repository.get_revision(rh[0]).message
- self.assertEqual(msg, 'import upstream from %s' % self.orig_1)
- msg = tree.branch.repository.get_revision(rh[1]).message
- self.assertEqual(msg, 'import upstream from %s' % self.orig_2)
- msg = tree.branch.repository.get_revision(rh[2]).message
- self.assertEqual(msg, 'merge packaging changes from %s' % self.diff_2)
+ self.check_revision_message(tree, rh[0],
+ 'import upstream from %s' % self.orig_1)
+ self.check_revision_message(tree, rh[1],
+ 'import upstream from %s' % self.orig_2)
+ self.check_revision_message(tree, rh[2],
+ 'merge packaging changes from %s' % self.diff_2)
parents = tree.branch.repository.revision_tree(rh[1]).get_parent_ids()
self.assertEqual(parents, [rh[0]], rh)
parents = tree.branch.repository.revision_tree(rh[2]).get_parent_ids()
self.assertEqual(len(parents), 2)
self.assertEqual(parents[0], rh[1], rh)
- self.assertEqual(tree.branch.repository.get_revision(parents[1]).message,
+ self.check_revision_message(tree, parents[1],
'merge packaging changes from %s' % self.diff_1c)
# Check the diff against upstream.
changes = tree.changes_from(tree.branch.repository.revision_tree(rh[1]))
- added = changes.added
- self.assertEqual(len(added), 3, str(added))
- self.assertEqual(added[0][0], 'debian')
- self.assertEqual(added[0][2], 'directory')
- self.assertEqual(added[1][0], 'debian/changelog')
- self.assertEqual(added[1][2], 'file')
- self.assertEqual(added[2][0], 'debian/install')
- self.assertEqual(added[2][2], 'file')
- self.assertEqual(changes.removed, [])
- self.assertEqual(changes.modified, [])
+ expected_added = ['debian/', 'debian/changelog', 'debian/install']
+ self.check_changes(changes, added=expected_added)
# Check the diff against last packaging version
changes = tree.changes_from(
tree.branch.repository.revision_tree(parents[1]))
- self.assertEqual(len(changes.added), 1, str(changes.added))
- self.assertEqual(changes.added[0][0], 'NEWS')
- self.assertEqual(changes.added[0][2], 'file')
- self.assertEqual(len(changes.removed), 1)
- self.assertEqual(changes.removed[0][0], 'debian/control')
- self.assertEqual(changes.removed[0][2], 'file')
- self.assertEqual(len(changes.modified), 1)
- self.assertEqual(changes.modified[0][0], 'debian/changelog')
- self.assertEqual(changes.modified[0][2], 'file')
+ expected_added = ['NEWS']
+ expected_removed = ['debian/control']
+ expected_modified = ['debian/changelog']
+ self.check_changes(changes, added=expected_added,
+ removed=expected_removed, modified=expected_modified)
def test_import_dsc_restrictions_on_dscs(self):
"""Test that errors are raised for confusing sets of .dsc files."""
@@ -511,12 +439,12 @@
tree = WorkingTree.open(self.target)
rh = tree.branch.revision_history()
self.assertEqual(len(rh), 3)
- msg = tree.branch.repository.get_revision(rh[0]).message
- self.assertEqual(msg, 'import upstream from %s' % self.orig_1)
- msg = tree.branch.repository.get_revision(rh[1]).message
- self.assertEqual(msg, 'import upstream from %s' % self.orig_2)
- msg = tree.branch.repository.get_revision(rh[2]).message
- self.assertEqual(msg, 'merge packaging changes from %s' % self.diff_2)
+ self.check_revision_message(tree, rh[0], 'import upstream from %s' % \
+ self.orig_1)
+ self.check_revision_message(tree, rh[1], 'import upstream from %s' % \
+ self.orig_2)
+ self.check_revision_message(tree, rh[2],
+ 'merge packaging changes from %s' % self.diff_2)
parents = tree.branch.repository.revision_tree(rh[1]).get_parent_ids()
self.assertEqual(parents, [rh[0]], rh)
parents = tree.branch.repository.revision_tree(rh[2]).get_parent_ids()
@@ -526,28 +454,16 @@
'merge packaging changes from %s' % self.diff_1c)
# Check the diff against upstream.
changes = tree.changes_from(tree.branch.repository.revision_tree(rh[1]))
- added = changes.added
- self.assertEqual(len(added), 3, str(added))
- self.assertEqual(added[0][0], 'debian')
- self.assertEqual(added[0][2], 'directory')
- self.assertEqual(added[1][0], 'debian/changelog')
- self.assertEqual(added[1][2], 'file')
- self.assertEqual(added[2][0], 'debian/install')
- self.assertEqual(added[2][2], 'file')
- self.assertEqual(changes.removed, [])
- self.assertEqual(changes.modified, [])
+ expected_added = ['debian/', 'debian/changelog', 'debian/install']
+ self.check_changes(changes, added=expected_added)
# Check the diff against last packaging version
changes = tree.changes_from(
tree.branch.repository.revision_tree(parents[1]))
- self.assertEqual(len(changes.added), 1)
- self.assertEqual(changes.added[0][0], 'NEWS')
- self.assertEqual(changes.added[0][2], 'file')
- self.assertEqual(len(changes.removed), 1)
- self.assertEqual(changes.removed[0][0], 'debian/control')
- self.assertEqual(changes.removed[0][2], 'file')
- self.assertEqual(len(changes.modified), 1)
- self.assertEqual(changes.modified[0][0], 'debian/changelog')
- self.assertEqual(changes.modified[0][2], 'file')
+ expected_added = ['NEWS']
+ expected_removed = ['debian/control']
+ expected_modified = ['debian/changelog']
+ self.check_changes(changes, added=expected_added,
+ removed=expected_removed, modified=expected_modified)
def test_import_dsc_different_dir(self):
source = 'source'
@@ -609,7 +525,7 @@
importer.import_dsc(self.target)
tree = WorkingTree.open(self.target)
expected_inv = ['CHANGELOG', 'README', 'Makefile', 'debian/',
- 'debian/changelog']
+ 'debian/changelog'] + self.config_files
tree.lock_read()
try:
self.check_inventory_shape(tree.inventory, expected_inv)
@@ -617,11 +533,10 @@
tree.unlock()
rh = tree.branch.revision_history()
self.assertEqual(len(rh), 1)
- rev = tree.branch.repository.get_revision(rh[0])
- self.assertEqual(rev.message,
- "import package from %s" % \
+ self.check_revision_message(tree, rh[0], "import package from %s" % \
os.path.basename(self.native_1))
self.assertEqual(len(tree.get_parent_ids()), 1)
+ self.check_is_native_in_config(tree)
def test_import_dsc_native_double(self):
self.make_native_dsc_1()
@@ -630,7 +545,7 @@
importer.import_dsc(self.target)
tree = WorkingTree.open(self.target)
expected_inv = ['CHANGELOG', 'README', 'Makefile', 'NEWS', 'from_debian',
- 'debian/', 'debian/changelog']
+ 'debian/', 'debian/changelog'] + self.config_files
tree.lock_read()
try:
self.check_inventory_shape(tree.inventory, expected_inv)
@@ -638,17 +553,25 @@
tree.unlock()
rh = tree.branch.revision_history()
self.assertEqual(len(rh), 2)
- rev = tree.branch.repository.get_revision(rh[0])
- self.assertEqual(rev.message,
- "import package from %s" % \
+ self.check_revision_message(tree, rh[0], "import package from %s" % \
os.path.basename(self.native_1))
- rev = tree.branch.repository.get_revision(rh[1])
- self.assertEqual(rev.message,
- "import package from %s" % \
+ self.check_revision_message(tree, rh[1], "import package from %s" % \
os.path.basename(self.native_2))
self.assertEqual(len(tree.get_parent_ids()), 1)
parents = tree.branch.repository.revision_tree(rh[1]).get_parent_ids()
self.assertEqual(len(parents), 1)
+ self.check_is_native_in_config(tree)
+ old_tree = tree.branch.repository.revision_tree(rh[0])
+ self.check_is_native_in_config(old_tree)
+ changes = tree.changes_from(old_tree)
+ expected_added = ['NEWS', 'from_debian']
+ expected_modified = ['Makefile', 'debian/changelog']
+ self.check_changes(changes, added=expected_added,
+ modified=expected_modified)
+
+ def check_revision_message(self, tree, revision, expected_message):
+ rev = tree.branch.repository.get_revision(revision)
+ self.assertEqual(rev.message, expected_message)
def test_non_native_to_native(self):
self.make_dsc_1()
@@ -657,7 +580,7 @@
importer.import_dsc(self.target)
tree = WorkingTree.open(self.target)
expected_inv = ['CHANGELOG', 'README', 'Makefile', 'NEWS', 'from_debian',
- 'debian/', 'debian/changelog']
+ 'debian/', 'debian/changelog'] + self.config_files
tree.lock_read()
try:
self.check_inventory_shape(tree.inventory, expected_inv)
@@ -666,39 +589,84 @@
self.assertEqual(tree.changes_from(tree.basis_tree()).has_changed(), False)
rh = tree.branch.revision_history()
self.assertEqual(len(rh), 2)
- rev = tree.branch.repository.get_revision(rh[0])
- self.assertEqual(rev.message,
- "import upstream from %s" % \
+ self.check_revision_message(tree, rh[0], "import upstream from %s" % \
os.path.basename(self.orig_1))
- rev = tree.branch.repository.get_revision(rh[1])
- self.assertEqual(rev.message,
- "import package from %s" % \
+ self.check_revision_message(tree, rh[1], "import package from %s" % \
os.path.basename(self.native_2))
self.assertEqual(len(tree.get_parent_ids()), 1)
parents = tree.branch.repository.revision_tree(rh[1]).get_parent_ids()
self.assertEqual(len(parents), 2)
- rev = tree.branch.repository.get_revision(parents[1])
- self.assertEqual(rev.message,
+ self.check_revision_message(tree, parents[1],
"merge packaging changes from %s" % \
os.path.basename(self.diff_1))
- changes = tree.changes_from(tree.branch.repository.revision_tree(rh[0]))
- self.assertEqual(len(changes.added), 4)
- self.assertEqual(changes.added[0][0], 'NEWS')
- self.assertEqual(changes.added[1][0], 'debian')
- self.assertEqual(changes.added[2][0], 'debian/changelog')
- self.assertEqual(changes.added[3][0], 'from_debian')
- self.assertEqual(len(changes.modified), 1)
- self.assertEqual(changes.modified[0][0], 'Makefile')
- self.assertEqual(changes.removed, [])
- changes = tree.changes_from(
- tree.branch.repository.revision_tree(parents[1]))
- self.assertEqual(len(changes.added), 2)
- self.assertEqual(changes.added[0][0], 'NEWS')
- self.assertEqual(changes.added[1][0], 'from_debian')
- self.assertEqual(len(changes.modified), 1, str(changes.modified))
- self.assertEqual(changes.modified[0][0], 'debian/changelog')
- self.assertEqual(len(changes.removed), 1)
- self.assertEqual(changes.removed[0][0], 'debian/install')
+ up_tree = tree.branch.repository.revision_tree(rh[0])
+ changes = tree.changes_from(up_tree)
+ expected_added = ['NEWS', 'debian/', 'debian/changelog', 'from_debian']
+ expected_added += self.config_files
+ self.check_changes(changes, added=expected_added, modified=['Makefile'])
+ package_tree = tree.branch.repository.revision_tree(parents[1])
+ changes = tree.changes_from(package_tree)
+ expected_added = ['NEWS', 'from_debian'] + self.config_files
+ expected_modified = ['debian/changelog']
+ expected_removed = ['debian/install']
+ self.check_changes(changes, added=expected_added,
+ modified=expected_modified, removed=expected_removed)
+ self.check_is_not_native_in_config(up_tree)
+ self.check_is_not_native_in_config(package_tree)
+ self.check_is_native_in_config(tree)
+
+ def check_changes(self, changes, added=[], removed=[], modified=[],
+ renamed=[]):
+ exp_added = set(added)
+ exp_removed = set(removed)
+ exp_modified = set(modified)
+ exp_renamed = set(renamed)
+
+ def make_set(list):
+ output = set()
+ for item in list:
+ if item[2] == 'directory':
+ output.add(item[0] + '/')
+ else:
+ output.add(item[0])
+ return output
+
+ real_added = make_set(changes.added)
+ real_removed = make_set(changes.removed)
+ real_modified = make_set(changes.modified)
+ real_renamed = make_set(changes.renamed)
+ missing_added = exp_added.difference(real_added)
+ missing_removed = exp_removed.difference(real_removed)
+ missing_modified = exp_modified.difference(real_modified)
+ missing_renamed = exp_renamed.difference(real_renamed)
+ extra_added = real_added.difference(exp_added)
+ extra_removed = real_removed.difference(exp_removed)
+ extra_modified = real_modified.difference(exp_modified)
+ extra_renamed = real_renamed.difference(exp_renamed)
+ if len(missing_added) > 0:
+ self.fail("Some expected paths not found added in the changes: %s" % \
+ str(missing_added))
+ if len(missing_removed) > 0:
+ self.fail("Some expected paths not found removed in the changes: %s" % \
+ str(missing_removed))
+ if len(missing_modified) > 0:
+ self.fail("Some expected paths not found modified in the changes: %s" % \
+ str(missing_modified))
+ if len(missing_renamed) > 0:
+ self.fail("Some expected paths not found renamed in the changes: %s" % \
+ str(missing_renamed))
+ if len(extra_added) > 0:
+ self.fail("Some extra paths found added in the changes: %s" % \
+ str(extra_added))
+ if len(extra_removed) > 0:
+ self.fail("Some extra paths found removed in the changes: %s" % \
+ str(extra_removed))
+ if len(extra_modified) > 0:
+ self.fail("Some extra paths found modified in the changes: %s" % \
+ str(extra_modified))
+ if len(extra_renamed) > 0:
+ self.fail("Some extra paths found renamed in the changes: %s" % \
+ str(extra_renamed))
def test_native_to_non_native(self):
self.make_native_dsc_1()
@@ -717,16 +685,13 @@
self.assertEqual(tree.changes_from(tree.basis_tree()).has_changed(), False)
rh = tree.branch.revision_history()
self.assertEqual(len(rh), 3)
- rev = tree.branch.repository.get_revision(rh[0])
- self.assertEqual(rev.message,
+ self.check_revision_message(tree, rh[0],
"import package from %s" % \
os.path.basename(self.native_1))
- rev = tree.branch.repository.get_revision(rh[1])
- self.assertEqual(rev.message,
+ self.check_revision_message(tree, rh[1],
"import upstream from %s" % \
os.path.basename(self.orig_2))
- rev = tree.branch.repository.get_revision(rh[2])
- self.assertEqual(rev.message,
+ self.check_revision_message(tree, rh[2],
"merge packaging changes from %s" % \
os.path.basename(self.diff_2))
self.assertEqual(len(tree.get_parent_ids()), 1)
@@ -736,32 +701,44 @@
self.assertEqual(len(parents), 1)
up_tree = tree.branch.repository.revision_tree(rh[1])
changes = tree.changes_from(up_tree)
- self.assertEqual(len(changes.added), 3)
- self.assertEqual(changes.added[0][0], 'debian')
- self.assertEqual(changes.added[1][0], 'debian/changelog')
- self.assertEqual(changes.added[2][0], 'debian/install')
- self.assertEqual(changes.modified, [])
- self.assertEqual(changes.removed, [])
- changes = up_tree.changes_from(tree.branch.repository.revision_tree(rh[0]))
- self.assertEqual(len(changes.added), 2)
- self.assertEqual(changes.added[0][0], 'NEWS')
- self.assertEqual(changes.added[1][0], 'from_debian')
- self.assertEqual(len(changes.modified), 1, str(changes.modified))
- self.assertEqual(changes.modified[0][0], 'Makefile')
- self.assertEqual(len(changes.removed), 2)
- self.assertEqual(changes.removed[0][0], 'debian')
- self.assertEqual(changes.removed[1][0], 'debian/changelog')
+ expected_added = ['debian/', 'debian/changelog', 'debian/install']
+ self.check_changes(changes, added=expected_added)
+ native_tree = tree.branch.repository.revision_tree(rh[0])
+ changes = up_tree.changes_from(native_tree)
+ expected_added = ['NEWS', 'from_debian']
+ expected_modified = ['Makefile']
+ expected_removed = ['debian/', 'debian/changelog'] + self.config_files
+ self.check_changes(changes, added=expected_added, removed=expected_removed,
+ modified=expected_modified)
# FIXME: Should changelog etc. be added/removed or not?
- changes = tree.changes_from(tree.branch.repository.revision_tree(rh[0]))
- self.assertEqual(len(changes.added), 5, str(changes.added))
- self.assertEqual(changes.added[0][0], 'NEWS')
- self.assertEqual(changes.added[1][0], 'debian')
- self.assertEqual(changes.added[2][0], 'debian/changelog')
- self.assertEqual(changes.added[3][0], 'debian/install')
- self.assertEqual(changes.added[4][0], 'from_debian')
- self.assertEqual(len(changes.modified), 1)
- self.assertEqual(changes.modified[0][0], 'Makefile')
- self.assertEqual(len(changes.removed), 2)
- self.assertEqual(changes.removed[0][0], 'debian')
- self.assertEqual(changes.removed[1][0], 'debian/changelog')
+ changes = tree.changes_from(native_tree)
+ expected_added = ['NEWS', 'debian/', 'debian/install', 'from_debian',
+ 'debian/changelog']
+ expected_modified = ['Makefile']
+ expected_removed = ['debian/', 'debian/changelog'] + self.config_files
+ self.check_changes(changes, added=expected_added,
+ modified=expected_modified, removed=expected_removed)
+ self.check_is_native_in_config(native_tree)
+ self.check_is_not_native_in_config(up_tree)
+ self.check_is_not_native_in_config(tree)
+
+ def _get_tree_default_config(self, tree, fail_on_none=True):
+ config_file_id = tree.path2id('.bzr-builddeb/default.conf')
+ if config_file_id is None:
+ if fail_on_none:
+ self.fail("The tree has no config file")
+ else:
+ return None
+ config_file = tree.get_file_text(config_file_id).split('\n')
+ config = ConfigObj(config_file)
+ return config
+
+ def check_is_native_in_config(self, tree):
+ config = self._get_tree_default_config(tree)
+ self.assertEqual(bool(config['BUILDDEB']['native']), True)
+
+ def check_is_not_native_in_config(self, tree):
+ config = self._get_tree_default_config(tree, fail_on_none=False)
+ if config is not None:
+ self.assertEqual(bool(config['BUILDDEB']['native']), False)
More information about the Pkg-bazaar-commits
mailing list