/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
6614.1.2 by Vincent Ladeuil
Fix assertNotEquals being deprecated by using assertNotEqual.
1
# Copyright (C) 2007-2012, 2016 Canonical Ltd
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
16
17
"""Tests for interface conformance of 'WorkingTree.remove'"""
18
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
19
from breezy.tests.per_workingtree import TestCaseWithWorkingTree
20
from breezy import ignores, osutils
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
21
22
class TestRemove(TestCaseWithWorkingTree):
23
    """Tests WorkingTree.remove"""
24
2475.5.2 by Marius Kruger
* blackbox/test_remove
25
    files = ['a', 'b/', 'b/c', 'd/']
26
    rfiles = ['b/c', 'b', 'a', 'd']
5340.8.5 by Marius Kruger
* extract backup_files
27
    backup_files = ['a.~1~', 'b.~1~/', 'b.~1~/c.~1~', 'd.~1~/']
2292.1.24 by Marius Kruger
minor text cleanups
28
2655.2.15 by Marius Kruger
Apply Alexander's comments:
29
    def get_tree(self, files):
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
30
        tree = self.make_branch_and_tree('.')
2655.2.8 by Marius Kruger
* workingtree_implementations/test_remove
31
        self.build_tree(files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
32
        self.assertPathExists(files)
2655.2.8 by Marius Kruger
* workingtree_implementations/test_remove
33
        return tree
34
2655.2.15 by Marius Kruger
Apply Alexander's comments:
35
    def get_committed_tree(self, files, message="Committing"):
36
        tree = self.get_tree(files)
2655.2.8 by Marius Kruger
* workingtree_implementations/test_remove
37
        tree.add(files)
38
        tree.commit(message)
6913.4.1 by Jelmer Vernooij
Fix some remove tests for foreign branches.
39
        if not tree.has_versioned_directories():
40
            self.assertInWorkingTree(
41
                [f for f in files if not f.endswith("/")])
42
            self.assertPathExists(files)
43
        else:
44
            self.assertInWorkingTree(files)
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
45
        return tree
46
2655.2.15 by Marius Kruger
Apply Alexander's comments:
47
    def assertRemovedAndDeleted(self, files):
48
        self.assertNotInWorkingTree(files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
49
        self.assertPathDoesNotExist(files)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
50
51
    def assertRemovedAndNotDeleted(self, files):
52
        self.assertNotInWorkingTree(files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
53
        self.assertPathExists(files)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
54
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
55
    def test_remove_keep(self):
2655.2.4 by Marius Kruger
* workingtree.remove
56
        """Check that files and directories are unversioned but not deleted."""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
57
        tree = self.get_tree(TestRemove.files)
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
58
        tree.add(TestRemove.files)
59
60
        tree.remove(TestRemove.files)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
61
        self.assertRemovedAndNotDeleted(TestRemove.files)
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
62
2655.2.4 by Marius Kruger
* workingtree.remove
63
    def test_remove_keep_subtree(self):
64
        """Check that a directory is unversioned but not deleted."""
65
        tree = self.make_branch_and_tree('.')
66
        subtree = self.make_branch_and_tree('subtree')
6926.2.8 by Jelmer Vernooij
Fix some more tests.
67
        subtree.commit('')
6844.1.1 by Jelmer Vernooij
Many more foreign branch fixes.
68
        tree.add('subtree')
2655.2.4 by Marius Kruger
* workingtree.remove
69
70
        tree.remove('subtree')
2655.2.15 by Marius Kruger
Apply Alexander's comments:
71
        self.assertRemovedAndNotDeleted('subtree')
2655.2.4 by Marius Kruger
* workingtree.remove
72
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
73
    def test_remove_unchanged_files(self):
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
74
        """Check that unchanged files are removed and deleted."""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
75
        tree = self.get_committed_tree(TestRemove.files)
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
76
        tree.remove(TestRemove.files, keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
77
        self.assertRemovedAndDeleted(TestRemove.files)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
78
        tree._validate()
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
79
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
80
    def test_remove_added_files(self):
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
81
        """Removal of newly added files must back them up."""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
82
        tree = self.get_tree(TestRemove.files)
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
83
        tree.add(TestRemove.files)
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
84
        tree.remove(TestRemove.files, keep_files=False)
85
        self.assertNotInWorkingTree(TestRemove.files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
86
        self.assertPathExists(TestRemove.backup_files)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
87
        tree._validate()
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
88
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
89
    def test_remove_changed_file(self):
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
90
        """Removal of changed files must back it up."""
3044.1.1 by Martin Pool
Fix up calls to TestCase.build_tree passing a string rather than a list
91
        tree = self.get_committed_tree(['a'])
6855.4.1 by Jelmer Vernooij
Yet more bees.
92
        self.build_tree_contents([('a', b"some other new content!")])
2655.2.9 by Marius Kruger
* workingtree_implementations/test_remove
93
        self.assertInWorkingTree('a')
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
94
        tree.remove('a', keep_files=False)
95
        self.assertNotInWorkingTree(TestRemove.files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
96
        self.assertPathExists('a.~1~')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
97
        tree._validate()
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
98
99
    def test_remove_deleted_files(self):
100
        """Check that files are removed if they don't exist any more."""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
101
        tree = self.get_committed_tree(TestRemove.files)
2475.5.1 by Marius Kruger
Fix bug and test: bzr rm refuses to delete renamed files
102
        for f in TestRemove.rfiles:
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
103
            osutils.delete_any(f)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
104
        self.assertPathDoesNotExist(TestRemove.files)
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
105
        tree.remove(TestRemove.files, keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
106
        self.assertRemovedAndDeleted(TestRemove.files)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
107
        tree._validate()
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
108
2475.5.1 by Marius Kruger
Fix bug and test: bzr rm refuses to delete renamed files
109
    def test_remove_renamed_files(self):
2475.5.2 by Marius Kruger
* blackbox/test_remove
110
        """Check that files are removed even if they are renamed."""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
111
        tree = self.get_committed_tree(TestRemove.files)
2475.5.1 by Marius Kruger
Fix bug and test: bzr rm refuses to delete renamed files
112
113
        for f in TestRemove.rfiles:
6809.1.1 by Martin
Apply 2to3 ws_comma fixer
114
            tree.rename_one(f, f+'x')
2475.5.1 by Marius Kruger
Fix bug and test: bzr rm refuses to delete renamed files
115
        rfilesx = ['bx/cx', 'bx', 'ax', 'dx']
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
116
        self.assertPathExists(rfilesx)
2475.5.1 by Marius Kruger
Fix bug and test: bzr rm refuses to delete renamed files
117
118
        tree.remove(rfilesx, keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
119
        self.assertRemovedAndDeleted(rfilesx)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
120
        tree._validate()
2475.5.1 by Marius Kruger
Fix bug and test: bzr rm refuses to delete renamed files
121
2475.5.2 by Marius Kruger
* blackbox/test_remove
122
    def test_remove_renamed_changed_files(self):
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
123
        """Check that files that are renamed and changed are backed up."""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
124
        tree = self.get_committed_tree(TestRemove.files)
2475.5.2 by Marius Kruger
* blackbox/test_remove
125
126
        for f in TestRemove.rfiles:
6809.1.1 by Martin
Apply 2to3 ws_comma fixer
127
            tree.rename_one(f, f+'x')
2475.5.2 by Marius Kruger
* blackbox/test_remove
128
        rfilesx = ['bx/cx', 'bx', 'ax', 'dx']
6855.4.1 by Jelmer Vernooij
Yet more bees.
129
        self.build_tree_contents([('ax', b'changed and renamed!'),
130
                                  ('bx/cx', b'changed and renamed!')])
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
131
        self.assertPathExists(rfilesx)
2475.5.2 by Marius Kruger
* blackbox/test_remove
132
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
133
        tree.remove(rfilesx, keep_files=False)
134
        self.assertNotInWorkingTree(rfilesx)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
135
        self.assertPathExists(['bx.~1~/cx.~1~', 'bx.~1~', 'ax.~1~'])
6913.4.1 by Jelmer Vernooij
Fix some remove tests for foreign branches.
136
        if tree.supports_rename_tracking():
137
            self.assertPathDoesNotExist('dx.~1~') # unchanged file
138
        else:
139
            self.assertPathExists('dx.~1~') # renamed, so appears changed
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
140
        tree._validate()
2475.5.2 by Marius Kruger
* blackbox/test_remove
141
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
142
    def test_force_remove_changed_files(self):
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
143
        """Check that changed files are removed and deleted when forced."""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
144
        tree = self.get_tree(TestRemove.files)
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
145
        tree.add(TestRemove.files)
146
147
        tree.remove(TestRemove.files, keep_files=False, force=True)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
148
        self.assertRemovedAndDeleted(TestRemove.files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
149
        self.assertPathDoesNotExist(['a.~1~', 'b.~1~/', 'b.~1~/c', 'd.~1~/'])
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
150
        tree._validate()
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
151
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
152
    def test_remove_unknown_files(self):
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
153
        """Unknown files shuld be backed up"""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
154
        tree = self.get_tree(TestRemove.files)
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
155
        tree.remove(TestRemove.files, keep_files=False)
156
        self.assertRemovedAndDeleted(TestRemove.files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
157
        self.assertPathExists(TestRemove.backup_files)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
158
        tree._validate()
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
159
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
160
    def test_remove_nonexisting_files(self):
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
161
        """Try to delete non-existing files."""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
162
        tree = self.get_tree(TestRemove.files)
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
163
        tree.remove([''], keep_files=False)
2475.5.2 by Marius Kruger
* blackbox/test_remove
164
        tree.remove(['xyz', 'abc/def'], keep_files=False)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
165
        tree._validate()
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
166
2655.2.12 by Marius Kruger
Remove unknown ignored files wihtout needing --force'
167
    def test_remove_unchanged_directory(self):
2655.2.8 by Marius Kruger
* workingtree_implementations/test_remove
168
        """Unchanged directories should be deleted."""
2655.2.6 by Marius Kruger
* workingtree.remove
169
        files = ['b/', 'b/c', 'b/sub_directory/', 'b/sub_directory/with_file']
2655.2.15 by Marius Kruger
Apply Alexander's comments:
170
        tree = self.get_committed_tree(files)
2655.2.6 by Marius Kruger
* workingtree.remove
171
        tree.remove('b', keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
172
        self.assertRemovedAndDeleted('b')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
173
        tree._validate()
174
175
    def test_remove_absent_directory(self):
176
        """Removing a absent directory succeeds without corruption (#150438)."""
177
        paths = ['a/', 'a/b']
178
        tree = self.get_committed_tree(paths)
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
179
        tree.controldir.root_transport.delete_tree('a')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
180
        tree.remove(['a'])
181
        self.assertRemovedAndDeleted('b')
182
        tree._validate()
2292.1.30 by Marius Kruger
* Minor text fixes.
183
2655.2.12 by Marius Kruger
Remove unknown ignored files wihtout needing --force'
184
    def test_remove_unknown_ignored_files(self):
2655.2.15 by Marius Kruger
Apply Alexander's comments:
185
        """Unknown ignored files should be deleted."""
186
        tree = self.get_committed_tree(['b/'])
2655.2.12 by Marius Kruger
Remove unknown ignored files wihtout needing --force'
187
        ignores.add_runtime_ignores(["*ignored*"])
188
189
        self.build_tree(['unknown_ignored_file'])
6614.1.2 by Vincent Ladeuil
Fix assertNotEquals being deprecated by using assertNotEqual.
190
        self.assertNotEqual(None, tree.is_ignored('unknown_ignored_file'))
2655.2.12 by Marius Kruger
Remove unknown ignored files wihtout needing --force'
191
        tree.remove('unknown_ignored_file', keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
192
        self.assertRemovedAndDeleted('unknown_ignored_file')
2655.2.12 by Marius Kruger
Remove unknown ignored files wihtout needing --force'
193
194
        self.build_tree(['b/unknown_ignored_file', 'b/unknown_ignored_dir/'])
6614.1.2 by Vincent Ladeuil
Fix assertNotEquals being deprecated by using assertNotEqual.
195
        self.assertNotEqual(None, tree.is_ignored('b/unknown_ignored_file'))
196
        self.assertNotEqual(None, tree.is_ignored('b/unknown_ignored_dir'))
2655.2.12 by Marius Kruger
Remove unknown ignored files wihtout needing --force'
197
        tree.remove('b', keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
198
        self.assertRemovedAndDeleted('b')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
199
        tree._validate()
2655.2.12 by Marius Kruger
Remove unknown ignored files wihtout needing --force'
200
3042.2.1 by Lukáš Lalinský
Fix ``bzr rm`` to not delete modified and ignored files.
201
    def test_remove_changed_ignored_files(self):
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
202
        """Changed ignored files should be backed up."""
3042.2.1 by Lukáš Lalinský
Fix ``bzr rm`` to not delete modified and ignored files.
203
        files = ['an_ignored_file']
204
        tree = self.get_tree(files)
205
        tree.add(files)
206
        ignores.add_runtime_ignores(["*ignored*"])
6614.1.2 by Vincent Ladeuil
Fix assertNotEquals being deprecated by using assertNotEqual.
207
        self.assertNotEqual(None, tree.is_ignored(files[0]))
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
208
209
        tree.remove(files, keep_files=False)
210
        self.assertNotInWorkingTree(files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
211
        self.assertPathExists('an_ignored_file.~1~')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
212
        tree._validate()
3042.2.1 by Lukáš Lalinský
Fix ``bzr rm`` to not delete modified and ignored files.
213
2655.2.8 by Marius Kruger
* workingtree_implementations/test_remove
214
    def test_dont_remove_directory_with_unknowns(self):
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
215
        """Directories with unknowns should be backed up."""
6913.4.1 by Jelmer Vernooij
Fix some remove tests for foreign branches.
216
        directories = ['a/', 'b/', 'c/', 'c/c/', 'c/blah']
2655.2.15 by Marius Kruger
Apply Alexander's comments:
217
        tree = self.get_committed_tree(directories)
2655.2.8 by Marius Kruger
* workingtree_implementations/test_remove
218
219
        self.build_tree(['a/unknown_file'])
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
220
        tree.remove('a', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
221
        self.assertPathExists('a.~1~/unknown_file')
2655.2.8 by Marius Kruger
* workingtree_implementations/test_remove
222
223
        self.build_tree(['b/unknown_directory'])
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
224
        tree.remove('b', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
225
        self.assertPathExists('b.~1~/unknown_directory')
2655.2.8 by Marius Kruger
* workingtree_implementations/test_remove
226
227
        self.build_tree(['c/c/unknown_file'])
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
228
        tree.remove('c/c', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
229
        self.assertPathExists('c/c.~1~/unknown_file')
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
230
231
        tree.remove('c', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
232
        self.assertPathExists('c.~1~/')
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
233
234
        self.assertNotInWorkingTree(directories)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
235
        tree._validate()
2655.2.8 by Marius Kruger
* workingtree_implementations/test_remove
236
237
    def test_force_remove_directory_with_unknowns(self):
2655.2.4 by Marius Kruger
* workingtree.remove
238
        """Unchanged non-empty directories should be deleted when forced."""
2655.2.9 by Marius Kruger
* workingtree_implementations/test_remove
239
        files = ['b/', 'b/c']
2655.2.15 by Marius Kruger
Apply Alexander's comments:
240
        tree = self.get_committed_tree(files)
2655.2.4 by Marius Kruger
* workingtree.remove
241
242
        other_files = ['b/unknown_file', 'b/sub_directory/',
2655.2.6 by Marius Kruger
* workingtree.remove
243
            'b/sub_directory/with_file', 'b/sub_directory/sub_directory/']
2655.2.4 by Marius Kruger
* workingtree.remove
244
        self.build_tree(other_files)
245
2655.2.9 by Marius Kruger
* workingtree_implementations/test_remove
246
        self.assertInWorkingTree(files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
247
        self.assertPathExists(files)
2655.2.9 by Marius Kruger
* workingtree_implementations/test_remove
248
249
        tree.remove('b', keep_files=False, force=True)
250
2655.2.15 by Marius Kruger
Apply Alexander's comments:
251
        self.assertRemovedAndDeleted(files)
252
        self.assertRemovedAndDeleted(other_files)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
253
        tree._validate()
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
254
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
255
    def test_remove_directory_with_changed_file(self):
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
256
        """Backup directories with changed files."""
257
        files = ['b/', 'b/c']
258
        tree = self.get_committed_tree(files)
6855.4.1 by Jelmer Vernooij
Yet more bees.
259
        self.build_tree_contents([('b/c', b"some other new content!")])
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
260
261
        tree.remove('b', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
262
        self.assertPathExists('b.~1~/c.~1~')
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
263
        self.assertNotInWorkingTree(files)
264
265
    def test_remove_force_directory_with_changed_file(self):
266
        """Delete directories with changed files when forced."""
267
        files = ['b/', 'b/c']
268
        tree = self.get_committed_tree(files)
6855.4.1 by Jelmer Vernooij
Yet more bees.
269
        self.build_tree_contents([('b/c', b"some other new content!")])
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
270
2655.2.15 by Marius Kruger
Apply Alexander's comments:
271
        # see if we can force it now..
2655.2.9 by Marius Kruger
* workingtree_implementations/test_remove
272
        tree.remove('b', keep_files=False, force=True)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
273
        self.assertRemovedAndDeleted(files)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
274
        tree._validate()
1551.15.11 by Aaron Bentley
Bugfix WorkingTree.remove to handle subtrees, and non-cwd trees
275
2668.3.1 by Daniel Watkins
Added test to fix bug #129880.
276
    def test_remove_directory_with_changed_emigrated_file(self):
277
        # As per bug #129880
278
        tree = self.make_branch_and_tree('.')
6855.4.1 by Jelmer Vernooij
Yet more bees.
279
        self.build_tree_contents([('somedir/',), (b'somedir/file', b'contents')])
2668.3.1 by Daniel Watkins
Added test to fix bug #129880.
280
        tree.add(['somedir', 'somedir/file'])
281
        tree.commit(message="first")
6855.4.1 by Jelmer Vernooij
Yet more bees.
282
        self.build_tree_contents([('somedir/file', b'changed')])
2668.3.1 by Daniel Watkins
Added test to fix bug #129880.
283
        tree.rename_one('somedir/file', 'moved-file')
284
        tree.remove('somedir', keep_files=False)
285
        self.assertNotInWorkingTree('somedir')
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
286
        self.assertPathDoesNotExist('somedir')
5160.2.6 by Marius Kruger
check that the file that was moved out of the dir isn't deleted - as per review
287
        self.assertInWorkingTree('moved-file')
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
288
        self.assertPathExists('moved-file')
2668.3.1 by Daniel Watkins
Added test to fix bug #129880.
289
2655.2.11 by Marius Kruger
* Update NEWS
290
    def test_remove_directory_with_renames(self):
291
        """Delete directory with renames in or out."""
2655.2.10 by Marius Kruger
add test for removing a direcory with something that has been moved out
292
6913.4.1 by Jelmer Vernooij
Fix some remove tests for foreign branches.
293
        files = ['a/', 'a/file', 'a/directory/', 'a/directory/stuff', 'b/']
2655.2.10 by Marius Kruger
add test for removing a direcory with something that has been moved out
294
        files_to_move = ['a/file', 'a/directory/']
295
2655.2.15 by Marius Kruger
Apply Alexander's comments:
296
        tree = self.get_committed_tree(files)
297
        # move stuff from a=>b
2655.2.10 by Marius Kruger
add test for removing a direcory with something that has been moved out
298
        tree.move(['a/file', 'a/directory'], to_dir='b')
299
300
        moved_files = ['b/file', 'b/directory/']
2655.2.15 by Marius Kruger
Apply Alexander's comments:
301
        self.assertRemovedAndDeleted(files_to_move)
2655.2.10 by Marius Kruger
add test for removing a direcory with something that has been moved out
302
        self.assertInWorkingTree(moved_files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
303
        self.assertPathExists(moved_files)
2655.2.10 by Marius Kruger
add test for removing a direcory with something that has been moved out
304
2655.2.11 by Marius Kruger
* Update NEWS
305
        # check if it works with renames out
2655.2.10 by Marius Kruger
add test for removing a direcory with something that has been moved out
306
        tree.remove('a', keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
307
        self.assertRemovedAndDeleted(['a/'])
2655.2.11 by Marius Kruger
* Update NEWS
308
309
        # check if it works with renames in
310
        tree.remove('b', keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
311
        self.assertRemovedAndDeleted(['b/'])
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
312
        tree._validate()
2655.2.10 by Marius Kruger
add test for removing a direcory with something that has been moved out
313
1551.15.11 by Aaron Bentley
Bugfix WorkingTree.remove to handle subtrees, and non-cwd trees
314
    def test_non_cwd(self):
315
        tree = self.make_branch_and_tree('tree')
316
        self.build_tree(['tree/dir/', 'tree/dir/file'])
317
        tree.add(['dir', 'dir/file'])
318
        tree.commit('add file')
319
        tree.remove('dir/', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
320
        self.assertPathDoesNotExist('tree/dir/file')
2655.2.15 by Marius Kruger
Apply Alexander's comments:
321
        self.assertNotInWorkingTree('tree/dir/file', 'tree')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
322
        tree._validate()
2967.5.8 by Daniel Watkins
Moved tests to correct location.
323
324
    def test_remove_uncommitted_removed_file(self):
325
        # As per bug #152811
326
        tree = self.get_committed_tree(['a'])
327
        tree.remove('a', keep_files=False)
328
        tree.remove('a', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
329
        self.assertPathDoesNotExist('a')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
330
        tree._validate()
2967.5.8 by Daniel Watkins
Moved tests to correct location.
331
332
    def test_remove_file_and_containing_dir(self):
333
        tree = self.get_committed_tree(['config/', 'config/file'])
334
        tree.remove('config/file', keep_files=False)
335
        tree.remove('config', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
336
        self.assertPathDoesNotExist('config/file')
337
        self.assertPathDoesNotExist('config')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
338
        tree._validate()
3719.1.1 by Vincent Ladeuil
Fix bug #272648
339
340
    def test_remove_dir_before_bzr(self):
341
        # As per bug #272648. Note that a file must be present in the directory
342
        # or the bug doesn't manifest itself.
343
        tree = self.get_committed_tree(['.aaa/', '.aaa/file'])
344
        tree.remove('.aaa/', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
345
        self.assertPathDoesNotExist('.aaa/file')
346
        self.assertPathDoesNotExist('.aaa')
3719.1.1 by Vincent Ladeuil
Fix bug #272648
347
        tree._validate()