/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
5273.1.8 by Vincent Ladeuil
Merge bzr.dev into cleanup
1
# Copyright (C) 2006-2010 Canonical Ltd
1551.6.25 by Aaron Bentley
split out blackbox test for bzr 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
1551.6.25 by Aaron Bentley
split out blackbox test for bzr remove
16
17
2655.2.5 by Marius Kruger
* Improve BzrRemoveChangedFilesError message.
18
import os
2804.4.1 by Alexander Belchenko
some win32-specific fixes for selftest
19
import sys
1551.6.25 by Aaron Bentley
split out blackbox test for bzr remove
20
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
21
from breezy.tests import (
5444.3.3 by Marius Kruger
* convert the touched tests to rather use ScriptRunner
22
    script,
5967.12.1 by Martin Pool
Move all test features into bzrlib.tests.features
23
    features,
5444.3.3 by Marius Kruger
* convert the touched tests to rather use ScriptRunner
24
    TestCaseWithTransport,
25
    TestSkipped,
7290.18.6 by Jelmer Vernooij
Fix some more tests.
26
    TestNotApplicable,
5444.3.3 by Marius Kruger
* convert the touched tests to rather use ScriptRunner
27
    )
6622.1.34 by Jelmer Vernooij
Rename brzlib => breezy.
28
from breezy.workingtree import WorkingTree
29
from breezy import osutils
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
30
7143.15.2 by Jelmer Vernooij
Run autopep8.
31
_id = b'-id'
32
a = 'a'
33
b = 'b/'
34
c = 'b/c'
35
d = 'd/'
36
files = (a, b, c, d)
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
37
38
5283.4.5 by Martin Pool
Update remaining subclasses of ExternalBase
39
class TestRemove(TestCaseWithTransport):
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
40
3619.5.3 by Robert Collins
Review feedback.
41
    def _make_tree_and_add(self, paths):
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
42
        tree = self.make_branch_and_tree('.')
7356.1.5 by Jelmer Vernooij
Use more ExitStacks.
43
        with tree.lock_write():
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
44
            self.build_tree(paths)
45
            for path in paths:
7143.15.2 by Jelmer Vernooij
Run autopep8.
46
                file_id = path.replace('/', '_').encode('utf-8') + _id
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
47
                tree.add(path, file_id)
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
48
        return tree
49
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
50
    def assertFilesDeleted(self, files):
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
51
        for f in files:
7143.15.2 by Jelmer Vernooij
Run autopep8.
52
            id = f.encode('utf-8') + _id
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
53
            self.assertNotInWorkingTree(f)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
54
            self.assertPathDoesNotExist(f)
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
55
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
56
    def assertFilesUnversioned(self, files):
2292.1.13 by Marius Kruger
* merge the unversion command back into the remove command,
57
        for f in files:
58
            self.assertNotInWorkingTree(f)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
59
            self.assertPathExists(f)
2292.1.13 by Marius Kruger
* merge the unversion command back into the remove command,
60
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
61
    def changeFile(self, file_name):
6973.7.5 by Jelmer Vernooij
s/file/open.
62
        with open(file_name, 'ab') as f:
63
            f.write(b"\nsome other new content!")
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
64
5340.8.2 by Marius Kruger
* update the blackbox tests too (unsave removals are just backed up, and don't complain)
65
    def run_bzr_remove_changed_files(self, files_to_remove, working_dir=None):
66
        self.run_bzr(['remove'] + list(files_to_remove),
7143.15.2 by Jelmer Vernooij
Run autopep8.
67
                     working_dir=working_dir)
2292.1.26 by Marius Kruger
* tests/__init__
68
3619.5.3 by Robert Collins
Review feedback.
69
    def test_remove_new_no_files_specified(self):
70
        tree = self.make_branch_and_tree('.')
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
71
        self.run_bzr_error(["brz: ERROR: No matching files."], 'remove --new')
7143.15.2 by Jelmer Vernooij
Run autopep8.
72
        self.run_bzr_error(
73
            ["brz: ERROR: No matching files."], 'remove --new .')
3619.5.3 by Robert Collins
Review feedback.
74
2292.1.13 by Marius Kruger
* merge the unversion command back into the remove command,
75
    def test_remove_no_files_specified(self):
3619.5.3 by Robert Collins
Review feedback.
76
        tree = self._make_tree_and_add(['foo'])
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
77
        out, err = self.run_bzr(['rm'])
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
78
        self.assertEqual('', err)
79
        self.assertEqual('', out)
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
80
        self.assertInWorkingTree('foo', tree=tree)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
81
        self.assertPathExists('foo')
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
82
83
    def test_remove_no_files_specified_missing_dir_and_contents(self):
3619.5.3 by Robert Collins
Review feedback.
84
        tree = self._make_tree_and_add(
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
85
            ['foo', 'dir/', 'dir/missing/', 'dir/missing/child'])
86
        self.get_transport('.').delete_tree('dir/missing')
87
        out, err = self.run_bzr(['rm'])
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
88
        self.assertEqual('', out)
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
89
        self.assertEqual(
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
90
            'removed dir/missing/child\n'
91
            'removed dir/missing\n',
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
92
            err)
93
        # non-missing paths not touched:
94
        self.assertInWorkingTree('foo', tree=tree)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
95
        self.assertPathExists('foo')
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
96
        self.assertInWorkingTree('dir', tree=tree)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
97
        self.assertPathExists('dir')
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
98
        # missing files unversioned
99
        self.assertNotInWorkingTree('dir/missing', tree=tree)
100
        self.assertNotInWorkingTree('dir/missing/child', tree=tree)
101
3619.5.3 by Robert Collins
Review feedback.
102
    def test_remove_no_files_specified_already_deleted(self):
103
        tree = self._make_tree_and_add(['foo', 'bar'])
104
        tree.commit('save foo and bar')
105
        os.unlink('bar')
106
        self.run_bzr(['rm'])
6852.3.1 by Jelmer Vernooij
add Tree.is_versioned.
107
        self.assertFalse(tree.is_versioned('bar'))
3619.5.3 by Robert Collins
Review feedback.
108
        # Running rm with a deleted file does not error.
109
        out, err = self.run_bzr(['rm'])
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
110
        self.assertEqual('', out)
111
        self.assertEqual('', err)
3619.5.3 by Robert Collins
Review feedback.
112
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
113
    def test_remove_no_files_specified_missing_file(self):
3619.5.3 by Robert Collins
Review feedback.
114
        tree = self._make_tree_and_add(['foo', 'bar'])
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
115
        os.unlink('bar')
116
        out, err = self.run_bzr(['rm'])
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
117
        self.assertEqual('', out)
118
        self.assertEqual('removed bar\n', err)
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
119
        # non-missing files not touched:
120
        self.assertInWorkingTree('foo', tree=tree)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
121
        self.assertPathExists('foo')
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
122
        # missing files unversioned
123
        self.assertNotInWorkingTree('bar', tree=tree)
124
125
    def test_remove_no_files_specified_missing_link(self):
5967.12.1 by Martin Pool
Move all test features into bzrlib.tests.features
126
        self.requireFeature(features.SymlinkFeature)
3619.5.3 by Robert Collins
Review feedback.
127
        tree = self._make_tree_and_add(['foo'])
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
128
        os.symlink('foo', 'linkname')
129
        tree.add(['linkname'])
130
        os.unlink('linkname')
131
        out, err = self.run_bzr(['rm'])
7027.4.1 by Jelmer Vernooij
Use StringIOWithEncoding on Python3.
132
        self.assertEqual('', out)
133
        self.assertEqual('removed linkname\n', err)
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
134
        # non-missing files not touched:
135
        self.assertInWorkingTree('foo', tree=tree)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
136
        self.assertPathExists('foo')
3619.5.1 by Robert Collins
* ``bzr rm`` will now scan for files that are missing and remove just
137
        # missing files unversioned
138
        self.assertNotInWorkingTree('linkname', tree=tree)
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
139
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
140
    def test_rm_one_file(self):
3619.5.3 by Robert Collins
Review feedback.
141
        tree = self._make_tree_and_add([a])
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
142
        self.run_bzr("commit -m 'added a'")
143
        self.run_bzr('rm a', error_regexes=["deleted a"])
144
        self.assertFilesDeleted([a])
145
146
    def test_remove_one_file(self):
3619.5.3 by Robert Collins
Review feedback.
147
        tree = self._make_tree_and_add([a])
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
148
        self.run_bzr("commit -m 'added a'")
149
        self.run_bzr('remove a', error_regexes=["deleted a"])
150
        self.assertFilesDeleted([a])
151
152
    def test_remove_keep_one_file(self):
3619.5.3 by Robert Collins
Review feedback.
153
        tree = self._make_tree_and_add([a])
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
154
        self.run_bzr('remove --keep a', error_regexes=["removed a"])
155
        self.assertFilesUnversioned([a])
156
157
    def test_remove_one_deleted_file(self):
3619.5.3 by Robert Collins
Review feedback.
158
        tree = self._make_tree_and_add([a])
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
159
        self.run_bzr("commit -m 'added a'")
160
        os.unlink(a)
161
        self.assertInWorkingTree(a)
162
        self.run_bzr('remove a')
163
        self.assertNotInWorkingTree(a)
164
2292.1.13 by Marius Kruger
* merge the unversion command back into the remove command,
165
    def test_remove_invalid_files(self):
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
166
        self.build_tree(files)
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
167
        tree = self.make_branch_and_tree('.')
2605.1.1 by Martin Pool
Merge fix for rm renamed files
168
        self.run_bzr(['remove', '.', 'xyz', 'abc/def'])
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
169
2292.1.13 by Marius Kruger
* merge the unversion command back into the remove command,
170
    def test_remove_unversioned_files(self):
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
171
        self.build_tree(files)
2292.1.13 by Marius Kruger
* merge the unversion command back into the remove command,
172
        tree = self.make_branch_and_tree('.')
5340.8.2 by Marius Kruger
* update the blackbox tests too (unsave removals are just backed up, and don't complain)
173
        self.run_bzr_remove_changed_files(files)
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
174
175
    def test_remove_changed_files(self):
3619.5.3 by Robert Collins
Review feedback.
176
        tree = self._make_tree_and_add(files)
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
177
        self.run_bzr("commit -m 'added files'")
178
        self.changeFile(a)
179
        self.changeFile(c)
5340.8.2 by Marius Kruger
* update the blackbox tests too (unsave removals are just backed up, and don't complain)
180
        self.run_bzr_remove_changed_files(files)
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
181
3042.2.1 by Lukáš Lalinský
Fix ``bzr rm`` to not delete modified and ignored files.
182
    def test_remove_changed_ignored_files(self):
3619.5.3 by Robert Collins
Review feedback.
183
        tree = self._make_tree_and_add(['a'])
3042.2.1 by Lukáš Lalinský
Fix ``bzr rm`` to not delete modified and ignored files.
184
        self.run_bzr(['ignore', 'a'])
5340.8.2 by Marius Kruger
* update the blackbox tests too (unsave removals are just backed up, and don't complain)
185
        self.run_bzr_remove_changed_files(['a'])
3042.2.1 by Lukáš Lalinský
Fix ``bzr rm`` to not delete modified and ignored files.
186
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
187
    def test_remove_changed_files_from_child_dir(self):
2804.4.1 by Alexander Belchenko
some win32-specific fixes for selftest
188
        if sys.platform == 'win32':
189
            raise TestSkipped("Windows unable to remove '.' directory")
3619.5.3 by Robert Collins
Review feedback.
190
        tree = self._make_tree_and_add(files)
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
191
        self.run_bzr("commit -m 'added files'")
192
        self.changeFile(a)
193
        self.changeFile(c)
4676.2.3 by Vincent Ladeuil
FreeBSD is more strict than other OSes about deleting the working dir.
194
        self.run_bzr_remove_changed_files(
195
            ['../a', 'c', '.', '../d'], working_dir='b')
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
196
        self.assertNotInWorkingTree(files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
197
        self.assertPathDoesNotExist(files)
2292.1.13 by Marius Kruger
* merge the unversion command back into the remove command,
198
199
    def test_remove_keep_unversioned_files(self):
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
200
        self.build_tree(files)
2292.1.13 by Marius Kruger
* merge the unversion command back into the remove command,
201
        tree = self.make_branch_and_tree('.')
2292.1.27 by Marius Kruger
* tests/__init__.TestCase.run_bzr_captured
202
        self.run_bzr('remove --keep a', error_regexes=["a is not versioned."])
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
203
        self.assertFilesUnversioned(files)
2292.1.13 by Marius Kruger
* merge the unversion command back into the remove command,
204
5444.3.1 by Marius Kruger
add 'bzr rm --no-backup' and deprecate the --force opting to be consitent with revert
205
    def test_remove_no_backup_unversioned_files(self):
206
        self.build_tree(files)
207
        tree = self.make_branch_and_tree('.')
5444.3.3 by Marius Kruger
* convert the touched tests to rather use ScriptRunner
208
        script.ScriptRunner().run_script(self, '''
6622.1.29 by Jelmer Vernooij
Fix some more tests.
209
        $ brz remove --no-backup a b/ b/c d/
5444.3.3 by Marius Kruger
* convert the touched tests to rather use ScriptRunner
210
        2>deleted d
211
        2>removed b/c (but kept a copy: b/c.~1~)
212
        2>deleted b
213
        2>deleted a
214
        ''')
5444.3.1 by Marius Kruger
add 'bzr rm --no-backup' and deprecate the --force opting to be consitent with revert
215
        self.assertFilesDeleted(files)
216
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
217
    def test_remove_deleted_files(self):
3619.5.3 by Robert Collins
Review feedback.
218
        tree = self._make_tree_and_add(files)
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
219
        self.run_bzr("commit -m 'added files'")
7143.15.2 by Jelmer Vernooij
Run autopep8.
220
        my_files = [f for f in files]
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
221
        my_files.sort(reverse=True)
222
        for f in my_files:
223
            osutils.delete_any(f)
224
        self.assertInWorkingTree(files)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
225
        self.assertPathDoesNotExist(files)
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
226
        self.run_bzr('remove ' + ' '.join(files))
227
        self.assertNotInWorkingTree(a)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
228
        self.assertPathDoesNotExist(files)
2292.1.13 by Marius Kruger
* merge the unversion command back into the remove command,
229
230
    def test_remove_non_existing_files(self):
3619.5.3 by Robert Collins
Review feedback.
231
        tree = self._make_tree_and_add([])
2605.1.1 by Martin Pool
Merge fix for rm renamed files
232
        self.run_bzr(['remove', 'b'])
2292.1.13 by Marius Kruger
* merge the unversion command back into the remove command,
233
234
    def test_remove_keep_non_existing_files(self):
3619.5.3 by Robert Collins
Review feedback.
235
        tree = self._make_tree_and_add([])
2292.1.27 by Marius Kruger
* tests/__init__.TestCase.run_bzr_captured
236
        self.run_bzr('remove --keep b', error_regexes=["b is not versioned."])
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
237
2292.1.23 by Marius Kruger
Revert test_too_much.py and just do the minimum te get the tests to pass.
238
    def test_remove_files(self):
3619.5.3 by Robert Collins
Review feedback.
239
        tree = self._make_tree_and_add(files)
2292.1.27 by Marius Kruger
* tests/__init__.TestCase.run_bzr_captured
240
        self.run_bzr("commit -m 'added files'")
2292.1.30 by Marius Kruger
* Minor text fixes.
241
        self.run_bzr('remove a b b/c d',
242
                     error_regexes=["deleted a", "deleted b", "deleted b/c",
7143.15.2 by Jelmer Vernooij
Run autopep8.
243
                                    "deleted d"])
2292.1.23 by Marius Kruger
Revert test_too_much.py and just do the minimum te get the tests to pass.
244
        self.assertFilesDeleted(files)
245
246
    def test_remove_keep_files(self):
3619.5.3 by Robert Collins
Review feedback.
247
        tree = self._make_tree_and_add(files)
2292.1.27 by Marius Kruger
* tests/__init__.TestCase.run_bzr_captured
248
        self.run_bzr("commit -m 'added files'")
2292.1.30 by Marius Kruger
* Minor text fixes.
249
        self.run_bzr('remove --keep a b b/c d',
250
                     error_regexes=["removed a", "removed b", "removed b/c",
7143.15.2 by Jelmer Vernooij
Run autopep8.
251
                                    "removed d"])
2292.1.23 by Marius Kruger
Revert test_too_much.py and just do the minimum te get the tests to pass.
252
        self.assertFilesUnversioned(files)
253
2292.1.27 by Marius Kruger
* tests/__init__.TestCase.run_bzr_captured
254
    def test_remove_with_new(self):
3619.5.3 by Robert Collins
Review feedback.
255
        tree = self._make_tree_and_add(files)
2292.1.27 by Marius Kruger
* tests/__init__.TestCase.run_bzr_captured
256
        self.run_bzr('remove --new --keep',
257
                     error_regexes=["removed a", "removed b", "removed b/c"])
2292.1.14 by Marius Kruger
* blackbox/test_remove
258
        self.assertFilesUnversioned(files)
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
259
2292.1.27 by Marius Kruger
* tests/__init__.TestCase.run_bzr_captured
260
    def test_remove_with_new_in_dir1(self):
3619.5.3 by Robert Collins
Review feedback.
261
        tree = self._make_tree_and_add(files)
2292.1.27 by Marius Kruger
* tests/__init__.TestCase.run_bzr_captured
262
        self.run_bzr('remove --new --keep b b/c',
263
                     error_regexes=["removed b", "removed b/c"])
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
264
        tree = WorkingTree.open('.')
265
        self.assertInWorkingTree(a)
7045.1.1 by Jelmer Vernooij
Fix another 300 tests.
266
        self.assertEqual(tree.path2id(a), a.encode('utf-8') + _id)
6809.1.1 by Martin
Apply 2to3 ws_comma fixer
267
        self.assertFilesUnversioned([b, c])
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
268
2292.1.27 by Marius Kruger
* tests/__init__.TestCase.run_bzr_captured
269
    def test_remove_with_new_in_dir2(self):
3619.5.3 by Robert Collins
Review feedback.
270
        tree = self._make_tree_and_add(files)
2292.1.27 by Marius Kruger
* tests/__init__.TestCase.run_bzr_captured
271
        self.run_bzr('remove --new --keep .',
272
                     error_regexes=["removed a", "removed b", "removed b/c"])
2292.1.1 by Marius Kruger
"bzr remove" and "bzr rm" will now remove the working file.
273
        tree = WorkingTree.open('.')
2292.1.32 by Marius Kruger
* tests/__init__.run_bzr
274
        self.assertFilesUnversioned(files)
7121.2.1 by Jelmer Vernooij
Support adding/removing files with a name that consists of just
275
276
    def test_remove_backslash(self):
277
        # pad.lv/176263
278
        if os.path.sep == '\\':
7290.18.6 by Jelmer Vernooij
Fix some more tests.
279
            raise TestNotApplicable(
7121.2.1 by Jelmer Vernooij
Support adding/removing files with a name that consists of just
280
                'unable to add filenames with backslashes where '
281
                ' it is the path separator')
282
        tree = self.make_branch_and_tree('.')
283
        self.build_tree(['\\'])
284
        self.assertEqual('adding \\\n', self.run_bzr('add \\\\')[0])
285
        self.assertEqual('\\\n', self.run_bzr('ls --versioned')[0])
286
        self.assertEqual('', self.run_bzr('rm \\\\')[0])
287
        self.assertEqual('', self.run_bzr('ls --versioned')[0])