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
152
eq(new.get_file_by_path('b/two').read(), 'old contents')
178
153
eq(new.get_file_by_path('top').read(), 'old contents')
179
154
eq(new.get_file_by_path('a/one').read(), 'new contents')
182
157
# commit from here should do nothing
183
run_bzr('commit', '.', '-m', 'commit subdir only', '--unchanged')
158
run_bzr(['commit', '.', '-m', 'commit subdir only', '--unchanged'])
184
159
v3 = b.repository.revision_tree(b.get_rev_id(3))
185
160
eq(v3.get_file_by_path('b/two').read(), 'old contents')
186
161
eq(v3.get_file_by_path('top').read(), 'old contents')
187
162
eq(v3.get_file_by_path('a/one').read(), 'new contents')
189
164
# commit in subdirectory commits whole tree
190
run_bzr('commit', '-m', 'commit whole tree from subdir')
165
run_bzr(['commit', '-m', 'commit whole tree from subdir'])
191
166
v4 = b.repository.revision_tree(b.get_rev_id(4))
192
eq(v4.get_file_by_path('b/two').read(), 'new contents')
167
eq(v4.get_file_by_path('b/two').read(), 'new contents')
193
168
eq(v4.get_file_by_path('top').read(), 'new contents')
195
170
# TODO: factor out some kind of assert_tree_state() method
198
173
if __name__ == '__main__':