1
# Copyright (C) 2005 by Canonical Ltd
1
# Copyright (C) 2005 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
5
5
# the Free Software Foundation; either version 2 of the License, or
6
6
# (at your option) any later version.
8
8
# This program is distributed in the hope that it will be useful,
9
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
11
# GNU General Public License for more details.
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25
from bzrlib.tests import BzrTestBase, TestCaseInTempDir
25
from bzrlib.tests import TestCaseInTempDir
26
26
from bzrlib.branch import Branch
27
27
from bzrlib.trace import mutter
28
28
from bzrlib.osutils import pathjoin
29
from bzrlib.workingtree import WorkingTree
31
32
class TestVersioning(TestCaseInTempDir):
34
35
"""Basic 'bzr mkdir' operation"""
36
37
self.run_bzr('init')
37
self.run_bzr('mkdir', 'foo')
38
self.run_bzr('mkdir foo')
38
39
self.assert_(os.path.isdir('foo'))
40
self.run_bzr('mkdir', 'foo', retcode=3)
42
from bzrlib.diff import compare_trees
43
from bzrlib.branch import Branch
46
delta = compare_trees(b.basis_tree(), b.working_tree())
41
self.run_bzr('mkdir foo', retcode=3)
43
wt = WorkingTree.open('.')
45
delta = wt.changes_from(wt.basis_tree())
48
47
self.log('delta.added = %r' % delta.added)
55
54
"""'bzr mkdir' operation in subdirectory"""
57
56
self.run_bzr('init')
58
self.run_bzr('mkdir', 'dir')
57
self.run_bzr('mkdir dir')
59
58
self.assert_(os.path.isdir('dir'))
62
61
self.log('Run mkdir in subdir')
63
self.run_bzr('mkdir', 'subdir')
62
self.run_bzr('mkdir subdir')
64
63
self.assert_(os.path.isdir('subdir'))
67
from bzrlib.diff import compare_trees
68
from bzrlib.branch import Branch
71
delta = compare_trees(b.basis_tree(), b.working_tree())
66
wt = WorkingTree.open('.')
68
delta = wt.changes_from(wt.basis_tree())
73
70
self.log('delta.added = %r' % delta.added)
89
86
self.run_bzr('init')
92
self.run_bzr('mkdir', 'dir', 'a/dir', 'a/b/dir')
89
self.run_bzr('mkdir dir a/dir a/b/dir')
93
90
self.failUnless(os.path.isdir('dir'))
94
91
self.failUnless(os.path.isdir('a/dir'))
95
92
self.failUnless(os.path.isdir('a/b/dir'))
97
from bzrlib.diff import compare_trees
99
b_a = Branch.open('a')
100
b_b = Branch.open('a/b')
102
delta = compare_trees(b.basis_tree(), b.working_tree())
103
self.assertEquals(len(delta.added), 1)
104
self.assertEquals(delta.added[0][0], 'dir')
105
self.failIf(delta.modified)
107
delta = compare_trees(b_a.basis_tree(), b_a.working_tree())
108
self.assertEquals(len(delta.added), 1)
109
self.assertEquals(delta.added[0][0], 'dir')
110
self.failIf(delta.modified)
112
delta = compare_trees(b_b.basis_tree(), b_b.working_tree())
113
self.assertEquals(len(delta.added), 1)
114
self.assertEquals(delta.added[0][0], 'dir')
115
self.failIf(delta.modified)
117
def test_working_tree_add_in_unversioned(self):
118
"""Try to add a file in an unversioned directory.
120
"bzr add" adds the parent as necessary, but simple working tree add
123
from bzrlib.branch import Branch
124
from bzrlib.errors import NotVersionedError
125
from bzrlib.workingtree import WorkingTree
127
b = Branch.initialize(u'.')
129
self.build_tree(['foo/',
132
self.assertRaises(NotVersionedError,
133
WorkingTree(b.base, b).add,
94
wt = WorkingTree.open('.')
95
wt_a = WorkingTree.open('a')
96
wt_b = WorkingTree.open('a/b')
98
delta = wt.changes_from(wt.basis_tree())
99
self.assertEquals(len(delta.added), 1)
100
self.assertEquals(delta.added[0][0], 'dir')
101
self.failIf(delta.modified)
103
delta = wt_a.changes_from(wt_a.basis_tree())
104
self.assertEquals(len(delta.added), 1)
105
self.assertEquals(delta.added[0][0], 'dir')
106
self.failIf(delta.modified)
108
delta = wt_b.changes_from(wt_b.basis_tree())
109
self.assertEquals(len(delta.added), 1)
110
self.assertEquals(delta.added[0][0], 'dir')
111
self.failIf(delta.modified)
138
113
def check_branch(self):
139
114
"""After all the above changes, run the check and upgrade commands.
155
130
eq = self.assertEqual
157
132
self.build_tree(['a/', 'b/'])
160
135
b = Branch.open(u'.')
162
137
for fn in ('a/one', 'b/two', 'top'):
163
138
file(fn, 'w').write('old contents')
166
run_bzr('commit', '-m', 'first revision')
141
run_bzr(['commit', '-m', 'first revision'])
168
143
for fn in ('a/one', 'b/two', 'top'):
169
144
file(fn, 'w').write('new contents')
171
146
mutter('start selective subdir commit')
172
run_bzr('commit', 'a', '-m', 'commit a only')
147
run_bzr(['commit', 'a', '-m', 'commit a only'])
174
149
old = b.repository.revision_tree(b.get_rev_id(1))
175
150
new = b.repository.revision_tree(b.get_rev_id(2))
177
153
eq(new.get_file_by_path('b/two').read(), 'old contents')
178
154
eq(new.get_file_by_path('top').read(), 'old contents')
179
155
eq(new.get_file_by_path('a/one').read(), 'new contents')
182
159
# commit from here should do nothing
183
run_bzr('commit', '.', '-m', 'commit subdir only', '--unchanged')
160
run_bzr(['commit', '.', '-m', 'commit subdir only', '--unchanged'])
184
161
v3 = b.repository.revision_tree(b.get_rev_id(3))
185
163
eq(v3.get_file_by_path('b/two').read(), 'old contents')
186
164
eq(v3.get_file_by_path('top').read(), 'old contents')
187
165
eq(v3.get_file_by_path('a/one').read(), 'new contents')
189
168
# commit in subdirectory commits whole tree
190
run_bzr('commit', '-m', 'commit whole tree from subdir')
169
run_bzr(['commit', '-m', 'commit whole tree from subdir'])
191
170
v4 = b.repository.revision_tree(b.get_rev_id(4))
192
eq(v4.get_file_by_path('b/two').read(), 'new contents')
172
eq(v4.get_file_by_path('b/two').read(), 'new contents')
193
173
eq(v4.get_file_by_path('top').read(), 'new contents')
195
176
# TODO: factor out some kind of assert_tree_state() method
198
179
if __name__ == '__main__':