51
55
self.assertNotInWorkingTree(f)
56
self.assertPathDoesNotExist(f)
54
58
def assertFilesUnversioned(self, files):
56
60
self.assertNotInWorkingTree(f)
57
self.failUnlessExists(f)
61
self.assertPathExists(f)
59
63
def changeFile(self, file_name):
60
f = file(file_name, 'ab')
61
f.write("\nsome other new content!")
64
with open(file_name, 'ab') as f:
65
f.write(b"\nsome other new content!")
64
def run_bzr_remove_changed_files(self, error_regexes, files_to_remove,
66
error_regexes.extend(["Can't safely remove modified or unknown files:",
67
'Use --keep to not delete them,'
68
' or --force to delete them regardless.'
70
self.run_bzr_error(error_regexes,
71
['remove'] + list(files_to_remove),
72
working_dir=working_dir)
73
#see if we can force it now
74
self.run_bzr(['remove', '--force'] + list(files_to_remove),
75
working_dir=working_dir)
67
def run_bzr_remove_changed_files(self, files_to_remove, working_dir=None):
68
self.run_bzr(['remove'] + list(files_to_remove),
69
working_dir=working_dir)
77
71
def test_remove_new_no_files_specified(self):
78
72
tree = self.make_branch_and_tree('.')
79
self.run_bzr_error(["bzr: ERROR: No matching files."], 'remove --new')
80
self.run_bzr_error(["bzr: ERROR: No matching files."], 'remove --new .')
73
self.run_bzr_error([b"brz: ERROR: No matching files."], 'remove --new')
74
self.run_bzr_error([b"brz: ERROR: No matching files."], 'remove --new .')
82
76
def test_remove_no_files_specified(self):
83
77
tree = self._make_tree_and_add(['foo'])
84
78
out, err = self.run_bzr(['rm'])
85
self.assertEqual('', err)
86
self.assertEqual('', out)
79
self.assertEqual(b'', err)
80
self.assertEqual(b'', out)
87
81
self.assertInWorkingTree('foo', tree=tree)
88
self.failUnlessExists('foo')
82
self.assertPathExists('foo')
90
84
def test_remove_no_files_specified_missing_dir_and_contents(self):
91
85
tree = self._make_tree_and_add(
92
86
['foo', 'dir/', 'dir/missing/', 'dir/missing/child'])
93
87
self.get_transport('.').delete_tree('dir/missing')
94
88
out, err = self.run_bzr(['rm'])
95
self.assertEqual('', out)
89
self.assertEqual(b'', out)
97
'removed dir/missing/child\n'
98
'removed dir/missing\n',
91
b'removed dir/missing/child\n'
92
b'removed dir/missing\n',
100
94
# non-missing paths not touched:
101
95
self.assertInWorkingTree('foo', tree=tree)
102
self.failUnlessExists('foo')
96
self.assertPathExists('foo')
103
97
self.assertInWorkingTree('dir', tree=tree)
104
self.failUnlessExists('dir')
98
self.assertPathExists('dir')
105
99
# missing files unversioned
106
100
self.assertNotInWorkingTree('dir/missing', tree=tree)
107
101
self.assertNotInWorkingTree('dir/missing/child', tree=tree)
111
105
tree.commit('save foo and bar')
113
107
self.run_bzr(['rm'])
114
self.assertEqual(None, tree.path2id('bar'))
108
self.assertFalse(tree.is_versioned('bar'))
115
109
# Running rm with a deleted file does not error.
116
110
out, err = self.run_bzr(['rm'])
117
self.assertEqual('', out)
118
self.assertEqual('', err)
111
self.assertEqual(b'', out)
112
self.assertEqual(b'', err)
120
114
def test_remove_no_files_specified_missing_file(self):
121
115
tree = self._make_tree_and_add(['foo', 'bar'])
123
117
out, err = self.run_bzr(['rm'])
124
self.assertEqual('', out)
125
self.assertEqual('removed bar\n', err)
118
self.assertEqual(b'', out)
119
self.assertEqual(b'removed bar\n', err)
126
120
# non-missing files not touched:
127
121
self.assertInWorkingTree('foo', tree=tree)
128
self.failUnlessExists('foo')
122
self.assertPathExists('foo')
129
123
# missing files unversioned
130
124
self.assertNotInWorkingTree('bar', tree=tree)
132
126
def test_remove_no_files_specified_missing_link(self):
133
self.requireFeature(SymlinkFeature)
127
self.requireFeature(features.SymlinkFeature)
134
128
tree = self._make_tree_and_add(['foo'])
135
129
os.symlink('foo', 'linkname')
136
130
tree.add(['linkname'])
137
131
os.unlink('linkname')
138
132
out, err = self.run_bzr(['rm'])
139
self.assertEqual('', out)
140
self.assertEqual('removed linkname\n', err)
133
self.assertEqual(b'', out)
134
self.assertEqual(b'removed linkname\n', err)
141
135
# non-missing files not touched:
142
136
self.assertInWorkingTree('foo', tree=tree)
143
self.failUnlessExists('foo')
137
self.assertPathExists('foo')
144
138
# missing files unversioned
145
139
self.assertNotInWorkingTree('linkname', tree=tree)
177
171
def test_remove_unversioned_files(self):
178
172
self.build_tree(files)
179
173
tree = self.make_branch_and_tree('.')
180
self.run_bzr_remove_changed_files(
181
['unknown:[.\s]*d/[.\s]*b/c[.\s]*b/[.\s]*a'], files)
174
self.run_bzr_remove_changed_files(files)
183
176
def test_remove_changed_files(self):
184
177
tree = self._make_tree_and_add(files)
185
178
self.run_bzr("commit -m 'added files'")
186
179
self.changeFile(a)
187
180
self.changeFile(c)
188
self.run_bzr_remove_changed_files(['modified:[.\s]*a[.\s]*b/c'], files)
181
self.run_bzr_remove_changed_files(files)
190
183
def test_remove_changed_ignored_files(self):
191
184
tree = self._make_tree_and_add(['a'])
192
185
self.run_bzr(['ignore', 'a'])
193
self.run_bzr_remove_changed_files(['added:[.\s]*a'], ['a'])
186
self.run_bzr_remove_changed_files(['a'])
195
188
def test_remove_changed_files_from_child_dir(self):
196
189
if sys.platform == 'win32':
211
203
self.run_bzr('remove --keep a', error_regexes=["a is not versioned."])
212
204
self.assertFilesUnversioned(files)
214
def test_remove_force_unversioned_files(self):
206
def test_remove_no_backup_unversioned_files(self):
215
207
self.build_tree(files)
216
208
tree = self.make_branch_and_tree('.')
217
self.run_bzr(['remove', '--force'] + list(files),
218
error_regexes=["deleted a", "deleted b",
219
"deleted b/c", "deleted d"])
209
script.ScriptRunner().run_script(self, '''
210
$ brz remove --no-backup a b/ b/c d/
212
2>removed b/c (but kept a copy: b/c.~1~)
220
216
self.assertFilesDeleted(files)
222
218
def test_remove_deleted_files(self):