43
43
# points later into the dirstate.
44
44
tree = self.make_branch_and_tree('.')
45
45
self.build_tree(['del/', 'del/sub/', 'del/sub/b'])
46
tree.add(['del', 'del/sub', 'del/sub/b'], ['del', 'sub', 'b'])
46
tree.add(['del', 'del/sub', 'del/sub/b'])
47
b_id = tree.path2id('del/sub/b')
47
48
tree.commit('setup')
48
49
tree.rename_one('del/sub', 'sub')
49
self.assertEqual('sub/b', tree.id2path('b'))
50
self.assertEqual('sub/b', tree.id2path(b_id))
50
51
tree.unversion(['del', 'sub/b'])
51
self.assertRaises(errors.NoSuchId, tree.id2path, 'b')
52
self.assertRaises(errors.NoSuchId, tree.id2path, b_id)
53
54
def test_unversion_several_files(self):
54
55
"""After unversioning several files, they should not be versioned."""
55
56
tree = self.make_branch_and_tree('.')
56
57
self.build_tree(['a', 'b', 'c'])
57
tree.add(['a', 'b', 'c'], ['a-id', 'b-id', 'c-id'])
58
tree.add(['a', 'b', 'c'])
59
a_id = tree.path2id('a')
60
b_id = tree.path2id('b')
61
c_id = tree.path2id('c')
58
62
# within a lock unversion should take effect
60
64
tree.unversion(['a', 'b'])
61
self.assertFalse(tree.has_id('a-id'))
62
self.assertFalse(tree.has_id('b-id'))
63
self.assertTrue(tree.has_id('c-id'))
65
self.assertFalse(tree.has_id(a_id))
66
self.assertFalse(tree.has_id(b_id))
67
self.assertTrue(tree.has_id(c_id))
64
68
self.assertTrue(tree.has_filename('a'))
65
69
self.assertTrue(tree.has_filename('b'))
66
70
self.assertTrue(tree.has_filename('c'))
68
72
# the changes should have persisted to disk - reopen the workingtree
70
74
tree = tree.controldir.open_workingtree()
72
self.assertFalse(tree.has_id('a-id'))
73
self.assertFalse(tree.has_id('b-id'))
74
self.assertTrue(tree.has_id('c-id'))
75
self.addCleanup(tree.lock_read().unlock)
76
self.assertFalse(tree.has_id(a_id))
77
self.assertFalse(tree.has_id(b_id))
78
self.assertTrue(tree.has_id(c_id))
75
79
self.assertTrue(tree.has_filename('a'))
76
80
self.assertTrue(tree.has_filename('b'))
77
81
self.assertTrue(tree.has_filename('c'))
80
83
def test_unversion_subtree(self):
81
84
"""Unversioning the root of a subtree unversions the entire subtree."""
82
85
tree = self.make_branch_and_tree('.')
83
86
self.build_tree(['a/', 'a/b', 'c'])
84
tree.add(['a', 'a/b', 'c'], ['a-id', 'b-id', 'c-id'])
87
tree.add(['a', 'a/b', 'c'])
88
a_id = tree.path2id('a')
89
b_id = tree.path2id('a/b')
90
c_id = tree.path2id('c')
85
91
# within a lock unversion should take effect
87
93
tree.unversion(['a'])
88
self.assertFalse(tree.has_id('a-id'))
89
self.assertFalse(tree.has_id('b-id'))
90
self.assertTrue(tree.has_id('c-id'))
94
self.assertFalse(tree.has_id(a_id))
95
self.assertFalse(tree.has_id(b_id))
96
self.assertTrue(tree.has_id(c_id))
91
97
self.assertTrue(tree.has_filename('a'))
92
98
self.assertTrue(tree.has_filename('a/b'))
93
99
self.assertTrue(tree.has_filename('c'))
101
107
tree = self.make_branch_and_tree('.')
102
108
self.build_tree(['a/', 'a/b', 'a/c', 'd'])
103
tree.add(['a', 'a/b', 'a/c', 'd'], ['a-id', 'b-id', 'c-id', 'd-id'])
109
tree.add(['a', 'a/b', 'a/c', 'd'])
110
a_id = tree.path2id('a')
111
b_id = tree.path2id('a/b')
112
c_id = tree.path2id('a/c')
113
d_id = tree.path2id('d')
104
114
tree.lock_write()
106
116
tree.unversion(['a/b', 'a'])
107
self.assertFalse(tree.has_id('a-id'))
108
self.assertFalse(tree.has_id('b-id'))
109
self.assertFalse(tree.has_id('c-id'))
110
self.assertTrue(tree.has_id('d-id'))
117
self.assertFalse(tree.has_id(a_id))
118
self.assertFalse(tree.has_id(b_id))
119
self.assertFalse(tree.has_id(c_id))
120
self.assertTrue(tree.has_id(d_id))
111
121
# The files are still on disk
112
122
self.assertTrue(tree.has_filename('a'))
113
123
self.assertTrue(tree.has_filename('a/b'))
120
130
tree = self.make_branch_and_tree('a')
121
131
self.build_tree(['a/dir/', 'a/dir/f1', 'a/dir/f2', 'a/dir/f3',
123
tree.add(['dir', 'dir/f1', 'dir/f2', 'dir/f3', 'dir2'],
124
['dir-id', 'f1-id', 'f2-id', 'f3-id', 'dir2-id'])
133
tree.add(['dir', 'dir/f1', 'dir/f2', 'dir/f3', 'dir2'])
134
dir_id = tree.path2id('dir')
135
dir2_id = tree.path2id('dir2')
136
f1_id = tree.path2id('dir/f1')
137
f2_id = tree.path2id('dir/f2')
138
f3_id = tree.path2id('dir/f3')
125
139
rev_id1 = tree.commit('init')
126
140
# Start off by renaming entries, and then unversion a bunch of entries
127
141
# https://bugs.launchpad.net/bzr/+bug/114615
149
163
for path, ie in tree.iter_entries_by_dir()]
151
165
self.assertEqual([('', root_id),
153
('dir2/f3', 'f3-id'),
156
170
def test_unversion_after_conflicted_merge(self):
157
171
# Test for bug #114615
158
172
tree_a = self.make_branch_and_tree('A')
159
173
self.build_tree(['A/a/', 'A/a/m', 'A/a/n'])
160
tree_a.add(['a', 'a/m', 'a/n'], ['a-id', 'm-id', 'n-id'])
174
tree_a.add(['a', 'a/m', 'a/n'])
175
a_id = tree_a.path2id('a')
176
m_id = tree_a.path2id('a/m')
177
n_id = tree_a.path2id('a/n')
161
178
tree_a.commit('init')
163
180
tree_a.lock_read()
169
186
tree_b = tree_a.controldir.sprout('B').open_workingtree()
170
187
self.build_tree(['B/xyz/'])
171
tree_b.add(['xyz'], ['xyz-id'])
189
xyz_id = tree_b.path2id('xyz')
172
190
tree_b.rename_one('a/m', 'xyz/m')
173
191
tree_b.unversion(['a'])
174
192
tree_b.commit('delete in B')
176
194
paths = [(path, ie.file_id)
177
195
for path, ie in tree_b.iter_entries_by_dir()]
178
196
self.assertEqual([('', root_id),
183
201
self.build_tree_contents([('A/a/n', 'new contents for n\n')])
191
209
paths = [(path, ie.file_id)
192
210
for path, ie in tree_b.iter_entries_by_dir()]
193
211
self.assertEqual([('', root_id),
196
('a/n.OTHER', 'n-id'),
199
217
tree_b.unversion(['a'])
200
218
paths = [(path, ie.file_id)
201
219
for path, ie in tree_b.iter_entries_by_dir()]
202
220
self.assertEqual([('', root_id),