1
# Copyright (C) 2005, 2006 Canonical Ltd
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.
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.
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
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
from bzrlib.tests.blackbox import ExternalBase
21
from bzrlib.workingtree import WorkingTree
22
from bzrlib import osutils
31
class TestRemove(ExternalBase):
33
def _make_add_and_assert_tree(self,files):
34
tree = self.make_branch_and_tree('.')
35
self.build_tree(files)
37
id=str(f).replace('/', '_') + _id
39
self.assertEqual(tree.path2id(f), id)
40
self.failUnlessExists(f)
41
self.assertInWorkingTree(f)
44
def assertFilesDeleted(self,files):
47
self.assertNotInWorkingTree(f)
50
def assertFilesUnversioned(self,files):
52
self.assertNotInWorkingTree(f)
53
self.failUnlessExists(f)
55
def test_remove_no_files_specified(self):
56
tree = self._make_add_and_assert_tree([])
58
(out, err) = self.run_bzr_captured(['remove'], retcode=3)
59
self.assertEquals(err.strip(),
60
"bzr: ERROR: Specify one or more files to remove, or use --new.")
62
(out, err) = self.run_bzr_captured(['remove', '--new'], retcode=3)
63
self.assertEquals(err.strip(),"bzr: ERROR: No matching files.")
64
(out, err) = self.run_bzr_captured(['remove', '--new', '.'], retcode=3)
65
self.assertEquals(out.strip(), "")
66
self.assertEquals(err.strip(), "bzr: ERROR: No matching files.")
68
def test_remove_invalid_files(self):
70
tree = self.make_branch_and_tree('.')
72
(out, err) = self.run_bzr_captured(['remove', '.'])
73
self.assertEquals(out.strip(), "")
74
self.assertEquals(err.strip(), "")
76
def test_remove_unversioned_files(self):
78
tree = self.make_branch_and_tree('.')
80
(out, err) = self.run_bzr_captured(['remove', 'a'])
81
self.assertEquals(out.strip(), "")
82
self.assertEquals(err.strip(), "a is not versioned.")
84
def test_remove_keep_unversioned_files(self):
86
tree = self.make_branch_and_tree('.')
88
(out, err) = self.run_bzr_captured(['remove', '--keep', 'a'])
89
self.assertEquals(out.strip(), "")
90
self.assertEquals(err.strip(), "a is not versioned.")
92
def test_remove_force_unversioned_files(self):
94
tree = self.make_branch_and_tree('.')
96
(out, err) = self.run_bzr_captured(['remove', '--force', 'a'])
97
self.assertEquals(out.strip(), "")
98
self.assertEquals(err.strip(), "deleted a")
99
self.assertFilesDeleted([a])
101
def test_remove_non_existing_files(self):
102
tree = self._make_add_and_assert_tree([])
103
(out, err) = self.run_bzr_captured(['remove', 'b'])
104
self.assertEquals(out.strip(), "")
105
self.assertEquals(err.strip(), "b does not exist.")
107
def test_remove_keep_non_existing_files(self):
108
tree = self._make_add_and_assert_tree([])
109
(out, err) = self.run_bzr_captured(['remove', '--keep', 'b'])
110
self.assertEquals(out.strip(), "")
111
self.assertEquals(err.strip(), "b is not versioned.")
113
def test_rm_one_file(self):
114
tree = self._make_add_and_assert_tree([a])
115
self.run_bzr_captured(['commit', '-m', 'added a'])
116
(out, err) = self.run_bzr_captured(['rm', 'a'])
117
self.assertEquals(out.strip(), "")
118
self.assertEquals(err.strip(), "deleted a")
119
self.assertFilesDeleted([a])
121
def test_remove_one_file(self):
122
tree = self._make_add_and_assert_tree([a])
123
self.run_bzr_captured(['commit', '-m', 'added a'])
124
(out, err) = self.run_bzr_captured(['remove', 'a'])
125
self.assertEquals(out.strip(), "")
126
self.assertEquals(err.strip(), "deleted a")
127
self.assertFilesDeleted([a])
129
def test_remove_keep_one_file(self):
130
tree = self._make_add_and_assert_tree([a])
131
(out, err) = self.run_bzr_captured(['remove', '--keep', 'a'])
132
self.assertEquals(out.strip(), "")
133
self.assertEquals(err.strip(), "removed a")
134
self.assertFilesUnversioned([a])
136
def test_remove_files(self):
137
tree = self._make_add_and_assert_tree(files)
138
self.run_bzr_captured(['commit', '-m', 'added files'])
139
(out, err) = self.run_bzr_captured(['remove', a, b, c])
140
self.assertEquals(out.strip(), "")
141
self.assertTrue(re.search("deleted a", err))
142
self.assertTrue(re.search("deleted b", err))
143
self.assertTrue(re.search("deleted b/c", err))
144
self.assertFilesDeleted(files)
146
def test_remove_keep_files(self):
147
tree = self._make_add_and_assert_tree(files)
148
(out, err) = self.run_bzr_captured(['remove', '--keep', a, b, c])
149
self.assertEquals(out.strip(), "")
150
self.assertTrue(re.search("removed a", err))
151
self.assertTrue(re.search("removed b", err))
152
self.assertTrue(re.search("removed b/c", err))
153
self.assertFilesUnversioned(files)
155
def test_command_on_deleted(self):
156
tree = self._make_add_and_assert_tree([a])
157
self.run_bzr_captured(['commit', '-m', 'added a'])
159
self.assertInWorkingTree(a)
160
self.run_bzr_captured(['remove', 'a'])
161
self.assertNotInWorkingTree(a)
163
def test_command_with_new(self):
164
tree = self._make_add_and_assert_tree(files)
166
self.run_bzr_captured(['remove', '--new'])
167
self.assertFilesUnversioned(files)
169
def test_command_with_new_in_dir1(self):
170
tree = self._make_add_and_assert_tree(files)
171
self.run_bzr_captured(['remove', '--new', b, c])
172
tree = WorkingTree.open('.')
173
self.assertInWorkingTree(a)
174
self.assertEqual(tree.path2id(a), a+_id)
175
self.assertFilesUnversioned([b,c])
177
def test_command_with_new_in_dir2(self):
178
tree = self._make_add_and_assert_tree(files)
179
self.run_bzr_captured(['remove', '--new', '.'])
180
tree = WorkingTree.open('.')
181
self.assertFilesUnversioned([a])