~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_remove.py

  • Committer: Martin Albisetti
  • Date: 2008-05-06 00:21:18 UTC
  • mto: (3431.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 3432.
  • Revision ID: argentina@gmail.com-20080506002118-7w9ywklw4khddf3g
Added spanish index

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2005, 2006 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
 
18
18
import os
19
19
import sys
20
20
 
21
 
from bzrlib.tests import SymlinkFeature, TestSkipped
22
 
from bzrlib.tests import TestCaseWithTransport
 
21
from bzrlib.tests import TestSkipped
 
22
from bzrlib.tests.blackbox import ExternalBase
23
23
from bzrlib.workingtree import WorkingTree
24
24
from bzrlib import osutils
25
25
 
31
31
files=(a, b, c, d)
32
32
 
33
33
 
34
 
class TestRemove(TestCaseWithTransport):
 
34
class TestRemove(ExternalBase):
35
35
 
36
 
    def _make_tree_and_add(self, paths):
 
36
    def _make_add_and_assert_tree(self, files):
37
37
        tree = self.make_branch_and_tree('.')
38
 
        tree.lock_write()
39
 
        try:
40
 
            self.build_tree(paths)
41
 
            for path in paths:
42
 
                file_id=str(path).replace('/', '_') + _id
43
 
                tree.add(path, file_id)
44
 
        finally:
45
 
            tree.unlock()
 
38
        self.build_tree(files)
 
39
        for f in files:
 
40
            id=str(f).replace('/', '_') + _id
 
41
            tree.add(f, id)
 
42
            self.assertEqual(tree.path2id(f), id)
 
43
            self.failUnlessExists(f)
 
44
            self.assertInWorkingTree(f)
46
45
        return tree
47
46
 
48
47
    def assertFilesDeleted(self, files):
61
60
        f.write("\nsome other new content!")
62
61
        f.close()
63
62
 
64
 
    def run_bzr_remove_changed_files(self, error_regexes, files_to_remove,
65
 
                                     working_dir=None):
 
63
    def run_bzr_remove_changed_files(self, error_regexes, files_to_remove):
66
64
        error_regexes.extend(["Can't safely remove modified or unknown files:",
67
65
            'Use --keep to not delete them,'
68
66
            ' or --force to delete them regardless.'
69
67
            ])
70
68
        self.run_bzr_error(error_regexes,
71
 
                           ['remove'] + list(files_to_remove),
72
 
                           working_dir=working_dir)
 
69
            ['remove'] + list(files_to_remove))
73
70
        #see if we can force it now
74
 
        self.run_bzr(['remove', '--force'] + list(files_to_remove),
75
 
                     working_dir=working_dir)
76
 
 
77
 
    def test_remove_new_no_files_specified(self):
78
 
        tree = self.make_branch_and_tree('.')
 
71
        self.run_bzr(['remove', '--force'] + list(files_to_remove))
 
72
 
 
73
    def test_remove_no_files_specified(self):
 
74
        tree = self._make_add_and_assert_tree([])
 
75
        self.run_bzr_error(["bzr: ERROR: Specify one or more files to remove, "
 
76
            "or use --new."], 'remove')
 
77
 
79
78
        self.run_bzr_error(["bzr: ERROR: No matching files."], 'remove --new')
80
 
        self.run_bzr_error(["bzr: ERROR: No matching files."], 'remove --new .')
81
 
 
82
 
    def test_remove_no_files_specified(self):
83
 
        tree = self._make_tree_and_add(['foo'])
84
 
        out, err = self.run_bzr(['rm'])
85
 
        self.assertEqual('', err)
86
 
        self.assertEqual('', out)
87
 
        self.assertInWorkingTree('foo', tree=tree)
88
 
        self.failUnlessExists('foo')
89
 
 
90
 
    def test_remove_no_files_specified_missing_dir_and_contents(self):
91
 
        tree = self._make_tree_and_add(
92
 
            ['foo', 'dir/', 'dir/missing/', 'dir/missing/child'])
93
 
        self.get_transport('.').delete_tree('dir/missing')
94
 
        out, err = self.run_bzr(['rm'])
95
 
        self.assertEqual('', out)
96
 
        self.assertEqual(
97
 
            'removed dir/missing/child\n'
98
 
            'removed dir/missing\n',
99
 
            err)
100
 
        # non-missing paths not touched:
101
 
        self.assertInWorkingTree('foo', tree=tree)
102
 
        self.failUnlessExists('foo')
103
 
        self.assertInWorkingTree('dir', tree=tree)
104
 
        self.failUnlessExists('dir')
105
 
        # missing files unversioned
106
 
        self.assertNotInWorkingTree('dir/missing', tree=tree)
107
 
        self.assertNotInWorkingTree('dir/missing/child', tree=tree)
108
 
 
109
 
    def test_remove_no_files_specified_already_deleted(self):
110
 
        tree = self._make_tree_and_add(['foo', 'bar'])
111
 
        tree.commit('save foo and bar')
112
 
        os.unlink('bar')
113
 
        self.run_bzr(['rm'])
114
 
        self.assertEqual(None, tree.path2id('bar'))
115
 
        # Running rm with a deleted file does not error.
116
 
        out, err = self.run_bzr(['rm'])
117
 
        self.assertEqual('', out)
118
 
        self.assertEqual('', err)
119
 
 
120
 
    def test_remove_no_files_specified_missing_file(self):
121
 
        tree = self._make_tree_and_add(['foo', 'bar'])
122
 
        os.unlink('bar')
123
 
        out, err = self.run_bzr(['rm'])
124
 
        self.assertEqual('', out)
125
 
        self.assertEqual('removed bar\n', err)
126
 
        # non-missing files not touched:
127
 
        self.assertInWorkingTree('foo', tree=tree)
128
 
        self.failUnlessExists('foo')
129
 
        # missing files unversioned
130
 
        self.assertNotInWorkingTree('bar', tree=tree)
131
 
 
132
 
    def test_remove_no_files_specified_missing_link(self):
133
 
        self.requireFeature(SymlinkFeature)
134
 
        tree = self._make_tree_and_add(['foo'])
135
 
        os.symlink('foo', 'linkname')
136
 
        tree.add(['linkname'])
137
 
        os.unlink('linkname')
138
 
        out, err = self.run_bzr(['rm'])
139
 
        self.assertEqual('', out)
140
 
        self.assertEqual('removed linkname\n', err)
141
 
        # non-missing files not touched:
142
 
        self.assertInWorkingTree('foo', tree=tree)
143
 
        self.failUnlessExists('foo')
144
 
        # missing files unversioned
145
 
        self.assertNotInWorkingTree('linkname', tree=tree)
 
79
 
 
80
        self.run_bzr_error(["bzr: ERROR: No matching files."],
 
81
            'remove --new .')
146
82
 
147
83
    def test_rm_one_file(self):
148
 
        tree = self._make_tree_and_add([a])
 
84
        tree = self._make_add_and_assert_tree([a])
149
85
        self.run_bzr("commit -m 'added a'")
150
86
        self.run_bzr('rm a', error_regexes=["deleted a"])
151
87
        self.assertFilesDeleted([a])
152
88
 
153
89
    def test_remove_one_file(self):
154
 
        tree = self._make_tree_and_add([a])
 
90
        tree = self._make_add_and_assert_tree([a])
155
91
        self.run_bzr("commit -m 'added a'")
156
92
        self.run_bzr('remove a', error_regexes=["deleted a"])
157
93
        self.assertFilesDeleted([a])
158
94
 
159
95
    def test_remove_keep_one_file(self):
160
 
        tree = self._make_tree_and_add([a])
 
96
        tree = self._make_add_and_assert_tree([a])
161
97
        self.run_bzr('remove --keep a', error_regexes=["removed a"])
162
98
        self.assertFilesUnversioned([a])
163
99
 
164
100
    def test_remove_one_deleted_file(self):
165
 
        tree = self._make_tree_and_add([a])
 
101
        tree = self._make_add_and_assert_tree([a])
166
102
        self.run_bzr("commit -m 'added a'")
167
103
        os.unlink(a)
168
104
        self.assertInWorkingTree(a)
181
117
            ['unknown:[.\s]*d/[.\s]*b/c[.\s]*b/[.\s]*a'], files)
182
118
 
183
119
    def test_remove_changed_files(self):
184
 
        tree = self._make_tree_and_add(files)
 
120
        tree = self._make_add_and_assert_tree(files)
185
121
        self.run_bzr("commit -m 'added files'")
186
122
        self.changeFile(a)
187
123
        self.changeFile(c)
188
124
        self.run_bzr_remove_changed_files(['modified:[.\s]*a[.\s]*b/c'], files)
189
125
 
190
126
    def test_remove_changed_ignored_files(self):
191
 
        tree = self._make_tree_and_add(['a'])
 
127
        tree = self._make_add_and_assert_tree(['a'])
192
128
        self.run_bzr(['ignore', 'a'])
193
129
        self.run_bzr_remove_changed_files(['added:[.\s]*a'], ['a'])
194
130
 
195
131
    def test_remove_changed_files_from_child_dir(self):
196
132
        if sys.platform == 'win32':
197
133
            raise TestSkipped("Windows unable to remove '.' directory")
198
 
        tree = self._make_tree_and_add(files)
 
134
        tree = self._make_add_and_assert_tree(files)
199
135
        self.run_bzr("commit -m 'added files'")
200
136
        self.changeFile(a)
201
137
        self.changeFile(c)
202
 
        self.run_bzr_remove_changed_files(
203
 
            ['modified:[.\s]*a[.\s]*b/c'],
204
 
            ['../a', 'c', '.', '../d'], working_dir='b')
 
138
        os.chdir('b')
 
139
        self.run_bzr_remove_changed_files(['modified:[.\s]*a[.\s]*b/c'],
 
140
            ['../a', 'c', '.', '../d'])
 
141
        os.chdir('..')
205
142
        self.assertNotInWorkingTree(files)
206
143
        self.failIfExists(files)
207
144
 
220
157
        self.assertFilesDeleted(files)
221
158
 
222
159
    def test_remove_deleted_files(self):
223
 
        tree = self._make_tree_and_add(files)
 
160
        tree = self._make_add_and_assert_tree(files)
224
161
        self.run_bzr("commit -m 'added files'")
225
162
        my_files=[f for f in files]
226
163
        my_files.sort(reverse=True)
233
170
        self.failIfExists(files)
234
171
 
235
172
    def test_remove_non_existing_files(self):
236
 
        tree = self._make_tree_and_add([])
 
173
        tree = self._make_add_and_assert_tree([])
237
174
        self.run_bzr(['remove', 'b'])
238
175
 
239
176
    def test_remove_keep_non_existing_files(self):
240
 
        tree = self._make_tree_and_add([])
 
177
        tree = self._make_add_and_assert_tree([])
241
178
        self.run_bzr('remove --keep b', error_regexes=["b is not versioned."])
242
179
 
243
180
    def test_remove_files(self):
244
 
        tree = self._make_tree_and_add(files)
 
181
        tree = self._make_add_and_assert_tree(files)
245
182
        self.run_bzr("commit -m 'added files'")
246
183
        self.run_bzr('remove a b b/c d',
247
184
                     error_regexes=["deleted a", "deleted b", "deleted b/c",
249
186
        self.assertFilesDeleted(files)
250
187
 
251
188
    def test_remove_keep_files(self):
252
 
        tree = self._make_tree_and_add(files)
 
189
        tree = self._make_add_and_assert_tree(files)
253
190
        self.run_bzr("commit -m 'added files'")
254
191
        self.run_bzr('remove --keep a b b/c d',
255
192
                     error_regexes=["removed a", "removed b", "removed b/c",
257
194
        self.assertFilesUnversioned(files)
258
195
 
259
196
    def test_remove_with_new(self):
260
 
        tree = self._make_tree_and_add(files)
 
197
        tree = self._make_add_and_assert_tree(files)
261
198
        self.run_bzr('remove --new --keep',
262
199
                     error_regexes=["removed a", "removed b", "removed b/c"])
263
200
        self.assertFilesUnversioned(files)
264
201
 
265
202
    def test_remove_with_new_in_dir1(self):
266
 
        tree = self._make_tree_and_add(files)
 
203
        tree = self._make_add_and_assert_tree(files)
267
204
        self.run_bzr('remove --new --keep b b/c',
268
205
                     error_regexes=["removed b", "removed b/c"])
269
206
        tree = WorkingTree.open('.')
272
209
        self.assertFilesUnversioned([b,c])
273
210
 
274
211
    def test_remove_with_new_in_dir2(self):
275
 
        tree = self._make_tree_and_add(files)
 
212
        tree = self._make_add_and_assert_tree(files)
276
213
        self.run_bzr('remove --new --keep .',
277
214
                     error_regexes=["removed a", "removed b", "removed b/c"])
278
215
        tree = WorkingTree.open('.')