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