/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')
6844.1.1 by Jelmer Vernooij
Many more foreign branch fixes.
67
        tree.add('subtree')
2655.2.4 by Marius Kruger
* workingtree.remove
68
69
        tree.remove('subtree')
2655.2.15 by Marius Kruger
Apply Alexander's comments:
70
        self.assertRemovedAndNotDeleted('subtree')
2655.2.4 by Marius Kruger
* workingtree.remove
71
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
72
    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()
73
        """Check that unchanged files are removed and deleted."""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
74
        tree = self.get_committed_tree(TestRemove.files)
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
75
        tree.remove(TestRemove.files, keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
76
        self.assertRemovedAndDeleted(TestRemove.files)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
77
        tree._validate()
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
78
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
79
    def test_remove_added_files(self):
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
80
        """Removal of newly added files must back them up."""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
81
        tree = self.get_tree(TestRemove.files)
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
82
        tree.add(TestRemove.files)
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
83
        tree.remove(TestRemove.files, keep_files=False)
84
        self.assertNotInWorkingTree(TestRemove.files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
85
        self.assertPathExists(TestRemove.backup_files)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
86
        tree._validate()
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
87
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
88
    def test_remove_changed_file(self):
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
89
        """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
90
        tree = self.get_committed_tree(['a'])
6855.4.1 by Jelmer Vernooij
Yet more bees.
91
        self.build_tree_contents([('a', b"some other new content!")])
2655.2.9 by Marius Kruger
* workingtree_implementations/test_remove
92
        self.assertInWorkingTree('a')
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
93
        tree.remove('a', keep_files=False)
94
        self.assertNotInWorkingTree(TestRemove.files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
95
        self.assertPathExists('a.~1~')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
96
        tree._validate()
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
97
98
    def test_remove_deleted_files(self):
99
        """Check that files are removed if they don't exist any more."""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
100
        tree = self.get_committed_tree(TestRemove.files)
2475.5.1 by Marius Kruger
Fix bug and test: bzr rm refuses to delete renamed files
101
        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()
102
            osutils.delete_any(f)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
103
        self.assertPathDoesNotExist(TestRemove.files)
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
104
        tree.remove(TestRemove.files, keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
105
        self.assertRemovedAndDeleted(TestRemove.files)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
106
        tree._validate()
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
107
2475.5.1 by Marius Kruger
Fix bug and test: bzr rm refuses to delete renamed files
108
    def test_remove_renamed_files(self):
2475.5.2 by Marius Kruger
* blackbox/test_remove
109
        """Check that files are removed even if they are renamed."""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
110
        tree = self.get_committed_tree(TestRemove.files)
2475.5.1 by Marius Kruger
Fix bug and test: bzr rm refuses to delete renamed files
111
112
        for f in TestRemove.rfiles:
6809.1.1 by Martin
Apply 2to3 ws_comma fixer
113
            tree.rename_one(f, f+'x')
2475.5.1 by Marius Kruger
Fix bug and test: bzr rm refuses to delete renamed files
114
        rfilesx = ['bx/cx', 'bx', 'ax', 'dx']
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
115
        self.assertPathExists(rfilesx)
2475.5.1 by Marius Kruger
Fix bug and test: bzr rm refuses to delete renamed files
116
117
        tree.remove(rfilesx, keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
118
        self.assertRemovedAndDeleted(rfilesx)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
119
        tree._validate()
2475.5.1 by Marius Kruger
Fix bug and test: bzr rm refuses to delete renamed files
120
2475.5.2 by Marius Kruger
* blackbox/test_remove
121
    def test_remove_renamed_changed_files(self):
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
122
        """Check that files that are renamed and changed are backed up."""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
123
        tree = self.get_committed_tree(TestRemove.files)
2475.5.2 by Marius Kruger
* blackbox/test_remove
124
125
        for f in TestRemove.rfiles:
6809.1.1 by Martin
Apply 2to3 ws_comma fixer
126
            tree.rename_one(f, f+'x')
2475.5.2 by Marius Kruger
* blackbox/test_remove
127
        rfilesx = ['bx/cx', 'bx', 'ax', 'dx']
6855.4.1 by Jelmer Vernooij
Yet more bees.
128
        self.build_tree_contents([('ax', b'changed and renamed!'),
129
                                  ('bx/cx', b'changed and renamed!')])
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
130
        self.assertPathExists(rfilesx)
2475.5.2 by Marius Kruger
* blackbox/test_remove
131
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
132
        tree.remove(rfilesx, keep_files=False)
133
        self.assertNotInWorkingTree(rfilesx)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
134
        self.assertPathExists(['bx.~1~/cx.~1~', 'bx.~1~', 'ax.~1~'])
6913.4.1 by Jelmer Vernooij
Fix some remove tests for foreign branches.
135
        if tree.supports_rename_tracking():
136
            self.assertPathDoesNotExist('dx.~1~') # unchanged file
137
        else:
138
            self.assertPathExists('dx.~1~') # renamed, so appears changed
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
139
        tree._validate()
2475.5.2 by Marius Kruger
* blackbox/test_remove
140
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
141
    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()
142
        """Check that changed files are removed and deleted when forced."""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
143
        tree = self.get_tree(TestRemove.files)
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
144
        tree.add(TestRemove.files)
145
146
        tree.remove(TestRemove.files, keep_files=False, force=True)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
147
        self.assertRemovedAndDeleted(TestRemove.files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
148
        self.assertPathDoesNotExist(['a.~1~', 'b.~1~/', 'b.~1~/c', 'd.~1~/'])
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
149
        tree._validate()
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
150
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
151
    def test_remove_unknown_files(self):
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
152
        """Unknown files shuld be backed up"""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
153
        tree = self.get_tree(TestRemove.files)
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
154
        tree.remove(TestRemove.files, keep_files=False)
155
        self.assertRemovedAndDeleted(TestRemove.files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
156
        self.assertPathExists(TestRemove.backup_files)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
157
        tree._validate()
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
158
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
159
    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()
160
        """Try to delete non-existing files."""
2655.2.15 by Marius Kruger
Apply Alexander's comments:
161
        tree = self.get_tree(TestRemove.files)
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
162
        tree.remove([''], keep_files=False)
2475.5.2 by Marius Kruger
* blackbox/test_remove
163
        tree.remove(['xyz', 'abc/def'], keep_files=False)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
164
        tree._validate()
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
165
2655.2.12 by Marius Kruger
Remove unknown ignored files wihtout needing --force'
166
    def test_remove_unchanged_directory(self):
2655.2.8 by Marius Kruger
* workingtree_implementations/test_remove
167
        """Unchanged directories should be deleted."""
2655.2.6 by Marius Kruger
* workingtree.remove
168
        files = ['b/', 'b/c', 'b/sub_directory/', 'b/sub_directory/with_file']
2655.2.15 by Marius Kruger
Apply Alexander's comments:
169
        tree = self.get_committed_tree(files)
2655.2.6 by Marius Kruger
* workingtree.remove
170
        tree.remove('b', keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
171
        self.assertRemovedAndDeleted('b')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
172
        tree._validate()
173
174
    def test_remove_absent_directory(self):
175
        """Removing a absent directory succeeds without corruption (#150438)."""
176
        paths = ['a/', 'a/b']
177
        tree = self.get_committed_tree(paths)
6653.6.1 by Jelmer Vernooij
Rename a number of attributes from bzrdir to controldir.
178
        tree.controldir.root_transport.delete_tree('a')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
179
        tree.remove(['a'])
180
        self.assertRemovedAndDeleted('b')
181
        tree._validate()
2292.1.30 by Marius Kruger
* Minor text fixes.
182
2655.2.12 by Marius Kruger
Remove unknown ignored files wihtout needing --force'
183
    def test_remove_unknown_ignored_files(self):
2655.2.15 by Marius Kruger
Apply Alexander's comments:
184
        """Unknown ignored files should be deleted."""
185
        tree = self.get_committed_tree(['b/'])
2655.2.12 by Marius Kruger
Remove unknown ignored files wihtout needing --force'
186
        ignores.add_runtime_ignores(["*ignored*"])
187
188
        self.build_tree(['unknown_ignored_file'])
6614.1.2 by Vincent Ladeuil
Fix assertNotEquals being deprecated by using assertNotEqual.
189
        self.assertNotEqual(None, tree.is_ignored('unknown_ignored_file'))
2655.2.12 by Marius Kruger
Remove unknown ignored files wihtout needing --force'
190
        tree.remove('unknown_ignored_file', keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
191
        self.assertRemovedAndDeleted('unknown_ignored_file')
2655.2.12 by Marius Kruger
Remove unknown ignored files wihtout needing --force'
192
193
        self.build_tree(['b/unknown_ignored_file', 'b/unknown_ignored_dir/'])
6614.1.2 by Vincent Ladeuil
Fix assertNotEquals being deprecated by using assertNotEqual.
194
        self.assertNotEqual(None, tree.is_ignored('b/unknown_ignored_file'))
195
        self.assertNotEqual(None, tree.is_ignored('b/unknown_ignored_dir'))
2655.2.12 by Marius Kruger
Remove unknown ignored files wihtout needing --force'
196
        tree.remove('b', keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
197
        self.assertRemovedAndDeleted('b')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
198
        tree._validate()
2655.2.12 by Marius Kruger
Remove unknown ignored files wihtout needing --force'
199
3042.2.1 by Lukáš Lalinský
Fix ``bzr rm`` to not delete modified and ignored files.
200
    def test_remove_changed_ignored_files(self):
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
201
        """Changed ignored files should be backed up."""
3042.2.1 by Lukáš Lalinský
Fix ``bzr rm`` to not delete modified and ignored files.
202
        files = ['an_ignored_file']
203
        tree = self.get_tree(files)
204
        tree.add(files)
205
        ignores.add_runtime_ignores(["*ignored*"])
6614.1.2 by Vincent Ladeuil
Fix assertNotEquals being deprecated by using assertNotEqual.
206
        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
207
208
        tree.remove(files, keep_files=False)
209
        self.assertNotInWorkingTree(files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
210
        self.assertPathExists('an_ignored_file.~1~')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
211
        tree._validate()
3042.2.1 by Lukáš Lalinský
Fix ``bzr rm`` to not delete modified and ignored files.
212
2655.2.8 by Marius Kruger
* workingtree_implementations/test_remove
213
    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
214
        """Directories with unknowns should be backed up."""
6913.4.1 by Jelmer Vernooij
Fix some remove tests for foreign branches.
215
        directories = ['a/', 'b/', 'c/', 'c/c/', 'c/blah']
2655.2.15 by Marius Kruger
Apply Alexander's comments:
216
        tree = self.get_committed_tree(directories)
2655.2.8 by Marius Kruger
* workingtree_implementations/test_remove
217
218
        self.build_tree(['a/unknown_file'])
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
219
        tree.remove('a', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
220
        self.assertPathExists('a.~1~/unknown_file')
2655.2.8 by Marius Kruger
* workingtree_implementations/test_remove
221
222
        self.build_tree(['b/unknown_directory'])
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
223
        tree.remove('b', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
224
        self.assertPathExists('b.~1~/unknown_directory')
2655.2.8 by Marius Kruger
* workingtree_implementations/test_remove
225
226
        self.build_tree(['c/c/unknown_file'])
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
227
        tree.remove('c/c', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
228
        self.assertPathExists('c/c.~1~/unknown_file')
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
229
230
        tree.remove('c', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
231
        self.assertPathExists('c.~1~/')
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
232
233
        self.assertNotInWorkingTree(directories)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
234
        tree._validate()
2655.2.8 by Marius Kruger
* workingtree_implementations/test_remove
235
236
    def test_force_remove_directory_with_unknowns(self):
2655.2.4 by Marius Kruger
* workingtree.remove
237
        """Unchanged non-empty directories should be deleted when forced."""
2655.2.9 by Marius Kruger
* workingtree_implementations/test_remove
238
        files = ['b/', 'b/c']
2655.2.15 by Marius Kruger
Apply Alexander's comments:
239
        tree = self.get_committed_tree(files)
2655.2.4 by Marius Kruger
* workingtree.remove
240
241
        other_files = ['b/unknown_file', 'b/sub_directory/',
2655.2.6 by Marius Kruger
* workingtree.remove
242
            'b/sub_directory/with_file', 'b/sub_directory/sub_directory/']
2655.2.4 by Marius Kruger
* workingtree.remove
243
        self.build_tree(other_files)
244
2655.2.9 by Marius Kruger
* workingtree_implementations/test_remove
245
        self.assertInWorkingTree(files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
246
        self.assertPathExists(files)
2655.2.9 by Marius Kruger
* workingtree_implementations/test_remove
247
248
        tree.remove('b', keep_files=False, force=True)
249
2655.2.15 by Marius Kruger
Apply Alexander's comments:
250
        self.assertRemovedAndDeleted(files)
251
        self.assertRemovedAndDeleted(other_files)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
252
        tree._validate()
2292.1.20 by Marius Kruger
move test_workingtree.TestRemove to workingtree_implementations/test_remove
253
2292.1.25 by Marius Kruger
* Add utility method delta.get_changes_as_text to get the output of .show()
254
    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
255
        """Backup directories with changed files."""
256
        files = ['b/', 'b/c']
257
        tree = self.get_committed_tree(files)
6855.4.1 by Jelmer Vernooij
Yet more bees.
258
        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
259
260
        tree.remove('b', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
261
        self.assertPathExists('b.~1~/c.~1~')
5340.8.1 by Marius Kruger
* make the backup file name generator in bzrdir available to others
262
        self.assertNotInWorkingTree(files)
263
264
    def test_remove_force_directory_with_changed_file(self):
265
        """Delete directories with changed files when forced."""
266
        files = ['b/', 'b/c']
267
        tree = self.get_committed_tree(files)
6855.4.1 by Jelmer Vernooij
Yet more bees.
268
        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
269
2655.2.15 by Marius Kruger
Apply Alexander's comments:
270
        # see if we can force it now..
2655.2.9 by Marius Kruger
* workingtree_implementations/test_remove
271
        tree.remove('b', keep_files=False, force=True)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
272
        self.assertRemovedAndDeleted(files)
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
273
        tree._validate()
1551.15.11 by Aaron Bentley
Bugfix WorkingTree.remove to handle subtrees, and non-cwd trees
274
2668.3.1 by Daniel Watkins
Added test to fix bug #129880.
275
    def test_remove_directory_with_changed_emigrated_file(self):
276
        # As per bug #129880
277
        tree = self.make_branch_and_tree('.')
6855.4.1 by Jelmer Vernooij
Yet more bees.
278
        self.build_tree_contents([('somedir/',), (b'somedir/file', b'contents')])
2668.3.1 by Daniel Watkins
Added test to fix bug #129880.
279
        tree.add(['somedir', 'somedir/file'])
280
        tree.commit(message="first")
6855.4.1 by Jelmer Vernooij
Yet more bees.
281
        self.build_tree_contents([('somedir/file', b'changed')])
2668.3.1 by Daniel Watkins
Added test to fix bug #129880.
282
        tree.rename_one('somedir/file', 'moved-file')
283
        tree.remove('somedir', keep_files=False)
284
        self.assertNotInWorkingTree('somedir')
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
285
        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
286
        self.assertInWorkingTree('moved-file')
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
287
        self.assertPathExists('moved-file')
2668.3.1 by Daniel Watkins
Added test to fix bug #129880.
288
2655.2.11 by Marius Kruger
* Update NEWS
289
    def test_remove_directory_with_renames(self):
290
        """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
291
6913.4.1 by Jelmer Vernooij
Fix some remove tests for foreign branches.
292
        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
293
        files_to_move = ['a/file', 'a/directory/']
294
2655.2.15 by Marius Kruger
Apply Alexander's comments:
295
        tree = self.get_committed_tree(files)
296
        # move stuff from a=>b
2655.2.10 by Marius Kruger
add test for removing a direcory with something that has been moved out
297
        tree.move(['a/file', 'a/directory'], to_dir='b')
298
299
        moved_files = ['b/file', 'b/directory/']
2655.2.15 by Marius Kruger
Apply Alexander's comments:
300
        self.assertRemovedAndDeleted(files_to_move)
2655.2.10 by Marius Kruger
add test for removing a direcory with something that has been moved out
301
        self.assertInWorkingTree(moved_files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
302
        self.assertPathExists(moved_files)
2655.2.10 by Marius Kruger
add test for removing a direcory with something that has been moved out
303
2655.2.11 by Marius Kruger
* Update NEWS
304
        # 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
305
        tree.remove('a', keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
306
        self.assertRemovedAndDeleted(['a/'])
2655.2.11 by Marius Kruger
* Update NEWS
307
308
        # check if it works with renames in
309
        tree.remove('b', keep_files=False)
2655.2.15 by Marius Kruger
Apply Alexander's comments:
310
        self.assertRemovedAndDeleted(['b/'])
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
311
        tree._validate()
2655.2.10 by Marius Kruger
add test for removing a direcory with something that has been moved out
312
1551.15.11 by Aaron Bentley
Bugfix WorkingTree.remove to handle subtrees, and non-cwd trees
313
    def test_non_cwd(self):
314
        tree = self.make_branch_and_tree('tree')
315
        self.build_tree(['tree/dir/', 'tree/dir/file'])
316
        tree.add(['dir', 'dir/file'])
317
        tree.commit('add file')
318
        tree.remove('dir/', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
319
        self.assertPathDoesNotExist('tree/dir/file')
2655.2.15 by Marius Kruger
Apply Alexander's comments:
320
        self.assertNotInWorkingTree('tree/dir/file', 'tree')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
321
        tree._validate()
2967.5.8 by Daniel Watkins
Moved tests to correct location.
322
323
    def test_remove_uncommitted_removed_file(self):
324
        # As per bug #152811
325
        tree = self.get_committed_tree(['a'])
326
        tree.remove('a', keep_files=False)
327
        tree.remove('a', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
328
        self.assertPathDoesNotExist('a')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
329
        tree._validate()
2967.5.8 by Daniel Watkins
Moved tests to correct location.
330
331
    def test_remove_file_and_containing_dir(self):
332
        tree = self.get_committed_tree(['config/', 'config/file'])
333
        tree.remove('config/file', keep_files=False)
334
        tree.remove('config', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
335
        self.assertPathDoesNotExist('config/file')
336
        self.assertPathDoesNotExist('config')
3585.2.1 by Robert Collins
Create acceptance test for bug 150438.
337
        tree._validate()
3719.1.1 by Vincent Ladeuil
Fix bug #272648
338
339
    def test_remove_dir_before_bzr(self):
340
        # As per bug #272648. Note that a file must be present in the directory
341
        # or the bug doesn't manifest itself.
342
        tree = self.get_committed_tree(['.aaa/', '.aaa/file'])
343
        tree.remove('.aaa/', keep_files=False)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
344
        self.assertPathDoesNotExist('.aaa/file')
345
        self.assertPathDoesNotExist('.aaa')
3719.1.1 by Vincent Ladeuil
Fix bug #272648
346
        tree._validate()