[MERGE] Convert tests.blackbox.test_[pull|nick] to use internals where appropriate
Daniel Watkins
D.M.Watkins at warwick.ac.uk
Tue Aug 21 15:16:40 BST 2007
On Thu, 2007-08-16 at 09:45 -0400, Aaron Bentley wrote:
> Please use osutils.pathjoin, rather than string concatenation.
Done.
> assertEquals? That works? We use assertEqual.
It does, and is used fairly prevalently. I've changed all the
occurences in test_pull.
> ^^^ The internal version of "merge" is WorkingTree.merge_from_branch()
Thanks, changed.
> ^^^ Please use WorkingTree.open(). It's more precise.
I couldn't get this to work, I've left it as is. Where I'm using
WorkingTree.open_containing('.')[0], what should the equivalent
WorkingTree.open call be?
> ^^^ I think John pointed out that this breaks with spaces.
Fixed.
> + def get_rh(self, tree, expected_len):
> + # Make sure we don't have trailing empty revisions
>
> ^^^ I think this comment is out of date. But the whole function is
> questionable, since you're implicitly checking the length by comparing
> the revision history against an expected value. So using
> tree.branch.revision_history probably makes sense.
I've completely removed this method and moved its functionality back to
where it was originally, as this is much clearer.
--
Daniel Watkins (Odd_Bloke) <D.M.Watkins at warwick.ac.uk>
University of Warwick Christian Focus President
University of Warwick Computing Society WUGLUG Liaison Officer
-------------- next part --------------
# Bazaar merge directive format 2 (Bazaar 0.19)
# revision_id: d.m.watkins at warwick.ac.uk-20070821135255-\
# tgicf49ud4jr7fk4
# target_branch: file:///home/daniel/devel/bzr/bzr.dev/
# testament_sha1: 27e5958cb6e08802cd39ac5bee6f0c057c80e65d
# timestamp: 2007-08-21 16:01:09 +0200
# base_revision_id: pqm at pqm.ubuntu.com-20070821044713-ttnupbvhlsbwh1he
#
# Begin patch
=== modified file 'bzrlib/tests/blackbox/test_nick.py'
--- bzrlib/tests/blackbox/test_nick.py 2007-06-27 19:13:50 +0000
+++ bzrlib/tests/blackbox/test_nick.py 2007-08-08 01:56:29 +0000
@@ -26,9 +26,8 @@
def test_nick_command(self):
"""bzr nick for viewing, setting nicknames"""
- os.mkdir('me.dev')
+ self.make_branch_and_tree('me.dev')
os.chdir('me.dev')
- self.run_bzr('init')
nick = self.run_bzr('nick')[0]
self.assertEqual(nick, 'me.dev\n')
# set the nickname
@@ -39,8 +38,7 @@
def test_autonick_urlencoded(self):
# https://bugs.launchpad.net/bzr/+bug/66857 -- nick was printed
# urlencoded but shouldn't be
- os.mkdir('!repo')
+ self.make_branch_and_tree('!repo')
os.chdir('!repo')
- self.run_bzr('init')
nick = self.run_bzr('nick')[0]
self.assertEqual(nick, '!repo\n')
=== modified file 'bzrlib/tests/blackbox/test_pull.py'
--- bzrlib/tests/blackbox/test_pull.py 2007-07-31 16:33:46 +0000
+++ bzrlib/tests/blackbox/test_pull.py 2007-08-21 13:52:55 +0000
@@ -21,28 +21,30 @@
import sys
from bzrlib.branch import Branch
+from bzrlib.osutils import pathjoin
from bzrlib.tests.blackbox import ExternalBase
from bzrlib.uncommit import uncommit
+from bzrlib.workingtree import WorkingTree
from bzrlib import urlutils
class TestPull(ExternalBase):
- def example_branch(test):
- test.run_bzr('init')
- file('hello', 'wt').write('foo')
- test.run_bzr('add hello')
- test.run_bzr('commit -m setup hello')
- file('goodbye', 'wt').write('baz')
- test.run_bzr('add goodbye')
- test.run_bzr('commit -m setup goodbye')
+ def example_branch(self, path='.'):
+ tree = self.make_branch_and_tree(path)
+ self.build_tree_contents([
+ (pathjoin(path, 'hello'), 'foo'),
+ (pathjoin(path, 'goodbye'), 'baz')])
+ tree.add('hello')
+ tree.commit(message='setup')
+ tree.add('goodbye')
+ tree.commit(message='setup')
+ return tree
def test_pull(self):
"""Pull changes from one branch to another."""
- os.mkdir('a')
+ a_tree = self.example_branch('a')
os.chdir('a')
-
- self.example_branch()
self.run_bzr('pull', retcode=3)
self.run_bzr('missing', retcode=3)
self.run_bzr('missing .')
@@ -55,178 +57,153 @@
self.run_bzr('pull')
os.chdir('..')
- self.run_bzr('branch a b')
+ b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
os.chdir('b')
self.run_bzr('pull')
os.mkdir('subdir')
- self.run_bzr('add subdir')
- self.run_bzr('commit -m blah --unchanged')
- os.chdir('../a')
- a = Branch.open('.')
- b = Branch.open('../b')
- self.assertEquals(a.revision_history(), b.revision_history()[:-1])
+ b_tree.add('subdir')
+ b_tree.commit(message='blah', allow_pointless=True)
+
+ os.chdir('..')
+ a = Branch.open('a')
+ b = Branch.open('b')
+ self.assertEqual(a.revision_history(), b.revision_history()[:-1])
+
+ os.chdir('a')
self.run_bzr('pull ../b')
- self.assertEquals(a.revision_history(), b.revision_history())
- self.run_bzr('commit -m blah2 --unchanged')
- os.chdir('../b')
- self.run_bzr('commit -m blah3 --unchanged')
+ self.assertEqual(a.revision_history(), b.revision_history())
+ a_tree.commit(message='blah2', allow_pointless=True)
+ b_tree.commit(message='blah3', allow_pointless=True)
# no overwrite
+ os.chdir('../b')
self.run_bzr('pull ../a', retcode=3)
os.chdir('..')
- self.run_bzr('branch b overwriteme')
+ b_tree.bzrdir.sprout('overwriteme')
os.chdir('overwriteme')
self.run_bzr('pull --overwrite ../a')
overwritten = Branch.open('.')
self.assertEqual(overwritten.revision_history(),
a.revision_history())
- os.chdir('../a')
- self.run_bzr('merge ../b')
- self.run_bzr('commit -m blah4 --unchanged')
+ a_tree.merge_from_branch(b_tree.branch)
+ a_tree.commit(message="blah4", allow_pointless=True)
os.chdir('../b/subdir')
self.run_bzr('pull ../../a')
- self.assertEquals(a.revision_history()[-1], b.revision_history()[-1])
- self.run_bzr('commit -m blah5 --unchanged')
- self.run_bzr('commit -m blah6 --unchanged')
+ self.assertEqual(a.revision_history()[-1], b.revision_history()[-1])
+ sub_tree = WorkingTree.open_containing('.')[0]
+ sub_tree.commit(message="blah5", allow_pointless=True)
+ sub_tree.commit(message="blah6", allow_pointless=True)
os.chdir('..')
self.run_bzr('pull ../a')
os.chdir('../a')
- self.run_bzr('commit -m blah7 --unchanged')
- self.run_bzr('merge ../b')
- self.run_bzr('commit -m blah8 --unchanged')
+ a_tree.commit(message="blah7", allow_pointless=True)
+ a_tree.merge_from_branch(b_tree.branch)
+ a_tree.commit(message="blah8", allow_pointless=True)
self.run_bzr('pull ../b')
self.run_bzr('pull ../b')
def test_pull_dash_d(self):
- os.mkdir('a')
- os.chdir('a')
- self.example_branch()
- self.run_bzr('init ../b')
- self.run_bzr('init ../c')
+ self.example_branch('a')
+ self.make_branch_and_tree('b')
+ self.make_branch_and_tree('c')
# pull into that branch
- self.run_bzr('pull -d ../b .')
+ self.run_bzr('pull -d b a')
# pull into a branch specified by a url
- c_url = urlutils.local_path_to_url('../c')
+ c_url = urlutils.local_path_to_url('c')
self.assertStartsWith(c_url, 'file://')
- self.run_bzr('pull -d %s .' % c_url)
+ self.run_bzr(['pull', '-d', c_url, 'a'])
def test_pull_revision(self):
"""Pull some changes from one branch to another."""
- os.mkdir('a')
- os.chdir('a')
-
- self.example_branch()
- file('hello2', 'wt').write('foo')
- self.run_bzr('add hello2')
- self.run_bzr('commit -m setup hello2')
- file('goodbye2', 'wt').write('baz')
- self.run_bzr('add goodbye2')
- self.run_bzr('commit -m setup goodbye2')
-
- os.chdir('..')
- self.run_bzr('branch -r 1 a b')
+ a_tree = self.example_branch('a')
+ self.build_tree_contents([
+ ('a/hello2', 'foo'),
+ ('a/goodbye2', 'baz')])
+ a_tree.add('hello2')
+ a_tree.commit(message="setup")
+ a_tree.add('goodbye2')
+ a_tree.commit(message="setup")
+
+ b_tree = a_tree.bzrdir.sprout('b',
+ revision_id=a_tree.branch.get_rev_id(1)).open_workingtree()
os.chdir('b')
self.run_bzr('pull -r 2')
a = Branch.open('../a')
b = Branch.open('.')
- self.assertEquals(a.revno(),4)
- self.assertEquals(b.revno(),2)
+ self.assertEqual(a.revno(),4)
+ self.assertEqual(b.revno(),2)
self.run_bzr('pull -r 3')
- self.assertEquals(b.revno(),3)
+ self.assertEqual(b.revno(),3)
self.run_bzr('pull -r 4')
- self.assertEquals(a.revision_history(), b.revision_history())
+ self.assertEqual(a.revision_history(), b.revision_history())
def test_overwrite_uptodate(self):
# Make sure pull --overwrite overwrites
# even if the target branch has merged
# everything already.
- bzr = self.run_bzr
-
- def get_rh(expected_len):
- rh = self.run_bzr('revision-history')[0]
- # Make sure we don't have trailing empty revisions
- rh = rh.strip().split('\n')
- self.assertEqual(len(rh), expected_len)
- return rh
-
- os.mkdir('a')
- os.chdir('a')
- bzr('init')
- open('foo', 'wb').write('original\n')
- bzr('add foo')
- bzr(['commit', '-m', 'initial commit'])
-
- os.chdir('..')
- bzr('branch a b')
-
- os.chdir('a')
- open('foo', 'wb').write('changed\n')
- bzr(['commit', '-m', 'later change'])
-
- open('foo', 'wb').write('another\n')
- bzr(['commit', '-m', 'a third change'])
-
- rev_history_a = get_rh(3)
-
- os.chdir('../b')
- bzr('merge ../a')
- bzr('commit -m merge')
-
- rev_history_b = get_rh(2)
-
- bzr('pull --overwrite ../a')
- rev_history_b = get_rh(3)
+ a_tree = self.make_branch_and_tree('a')
+ self.build_tree_contents([('a/foo', 'original\n')])
+ a_tree.add('foo')
+ a_tree.commit(message='initial commit')
+
+ b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
+
+ self.build_tree_contents([('a/foo', 'changed\n')])
+ a_tree.commit(message='later change')
+
+ self.build_tree_contents([('a/foo', 'a third change')])
+ a_tree.commit(message='a third change')
+
+ rev_history_a = a_tree.branch.revision_history()
+ self.assertEqual(len(rev_history_a), 3)
+
+ b_tree.merge_from_branch(a_tree.branch)
+ b_tree.commit(message='merge')
+
+ self.assertEqual(len(b_tree.branch.revision_history()), 2)
+
+ os.chdir('b')
+ self.run_bzr('pull --overwrite ../a')
+ rev_history_b = b_tree.branch.revision_history()
+ self.assertEqual(len(rev_history_b), 3)
self.assertEqual(rev_history_b, rev_history_a)
def test_overwrite_children(self):
# Make sure pull --overwrite sets the revision-history
# to be identical to the pull source, even if we have convergence
- bzr = self.run_bzr
-
- def get_rh(expected_len):
- rh = self.run_bzr('revision-history')[0]
- # Make sure we don't have trailing empty revisions
- rh = rh.strip().split('\n')
- self.assertEqual(len(rh), expected_len)
- return rh
-
- os.mkdir('a')
- os.chdir('a')
- bzr('init')
- open('foo', 'wb').write('original\n')
- bzr('add foo')
- bzr(['commit', '-m', 'initial commit'])
-
- os.chdir('..')
- bzr('branch a b')
-
- os.chdir('a')
- open('foo', 'wb').write('changed\n')
- bzr(['commit', '-m', 'later change'])
-
- open('foo', 'wb').write('another\n')
- bzr(['commit', '-m', 'a third change'])
-
- rev_history_a = get_rh(3)
-
- os.chdir('../b')
- bzr('merge ../a')
- bzr('commit -m merge')
-
- rev_history_b = get_rh(2)
-
- os.chdir('../a')
- open('foo', 'wb').write('a fourth change\n')
- bzr(['commit', '-m', 'a fourth change'])
-
- rev_history_a = get_rh(4)
+ a_tree = self.make_branch_and_tree('a')
+ self.build_tree_contents([('a/foo', 'original\n')])
+ a_tree.add('foo')
+ a_tree.commit(message='initial commit')
+
+ b_tree = a_tree.bzrdir.sprout('b').open_workingtree()
+
+ self.build_tree_contents([('a/foo', 'changed\n')])
+ a_tree.commit(message='later change')
+
+ self.build_tree_contents([('a/foo', 'a third change')])
+ a_tree.commit(message='a third change')
+
+ self.assertEqual(len(a_tree.branch.revision_history()), 3)
+
+ b_tree.merge_from_branch(a_tree.branch)
+ b_tree.commit(message='merge')
+
+ self.assertEqual(len(b_tree.branch.revision_history()), 2)
+
+ self.build_tree_contents([('a/foo', 'a fourth change\n')])
+ a_tree.commit(message='a fourth change')
+
+ rev_history_a = a_tree.branch.revision_history()
+ self.assertEqual(len(rev_history_a), 4)
# With convergence, we could just pull over the
# new change, but with --overwrite, we want to switch our history
- os.chdir('../b')
- bzr('pull --overwrite ../a')
- rev_history_b = get_rh(4)
+ os.chdir('b')
+ self.run_bzr('pull --overwrite ../a')
+ rev_history_b = b_tree.branch.revision_history()
+ self.assertEqual(len(rev_history_b), 4)
self.assertEqual(rev_history_b, rev_history_a)
@@ -252,25 +229,25 @@
# test pull for failure without parent set
os.chdir('branch_b')
out = self.run_bzr('pull', retcode=3)
- self.assertEquals(out,
+ self.assertEqual(out,
('','bzr: ERROR: No pull location known or specified.\n'))
# test implicit --remember when no parent set, this pull conflicts
self.build_tree(['d'])
tree_b.add('d')
tree_b.commit('commit d')
out = self.run_bzr('pull ../branch_a', retcode=3)
- self.assertEquals(out,
+ self.assertEqual(out,
('','bzr: ERROR: These branches have diverged.'
' Use the merge command to reconcile them.\n'))
- self.assertEquals(branch_b.get_parent(), parent)
+ self.assertEqual(branch_b.get_parent(), parent)
# test implicit --remember after resolving previous failure
uncommit(branch=branch_b, tree=tree_b)
transport.delete('branch_b/d')
self.run_bzr('pull')
- self.assertEquals(branch_b.get_parent(), parent)
+ self.assertEqual(branch_b.get_parent(), parent)
# test explicit --remember
self.run_bzr('pull ../branch_c --remember')
- self.assertEquals(branch_b.get_parent(),
+ self.assertEqual(branch_b.get_parent(),
branch_c.bzrdir.root_transport.base)
def test_pull_bundle(self):
# Begin bundle
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
80aIdaOhJKBGB2EEl/i7kinChIKJ5pso
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : https://lists.ubuntu.com/archives/bazaar/attachments/20070821/c7303da9/attachment-0001.pgp
More information about the bazaar
mailing list