~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-07-07 21:30:06 UTC
  • mfrom: (5333.1.2 better_pyqt_include)
  • Revision ID: pqm@pqm.ubuntu.com-20100707213006-lriphkkbzwwrl7ne
(jameinel) Use a better list of PyQt includes and excludes. (Gary van der
 Merwe)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006 Canonical Ltd
 
1
# Copyright (C) 2006-2010 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
 
 
17
 
 
18
 
import os, re, shlex
19
 
 
20
 
from bzrlib.tests.blackbox import ExternalBase
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
16
 
 
17
 
 
18
import os
 
19
import sys
 
20
 
 
21
from bzrlib.tests import SymlinkFeature, TestSkipped
 
22
from bzrlib.tests import TestCaseWithTransport
21
23
from bzrlib.workingtree import WorkingTree
22
24
from bzrlib import osutils
23
25
 
29
31
files=(a, b, c, d)
30
32
 
31
33
 
32
 
class TestRemove(ExternalBase):
 
34
class TestRemove(TestCaseWithTransport):
33
35
 
34
 
    def _make_add_and_assert_tree(self, files):
 
36
    def _make_tree_and_add(self, paths):
35
37
        tree = self.make_branch_and_tree('.')
36
 
        self.build_tree(files)
37
 
        for f in files:
38
 
            id=str(f).replace('/', '_') + _id
39
 
            tree.add(f, id)
40
 
            self.assertEqual(tree.path2id(f), id)
41
 
            self.failUnlessExists(f)
42
 
            self.assertInWorkingTree(f)
 
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()
43
46
        return tree
44
47
 
45
48
    def assertFilesDeleted(self, files):
58
61
        f.write("\nsome other new content!")
59
62
        f.close()
60
63
 
61
 
    def run_bzr_remove_changed_files(self, error_regexes, files_to_remove):
62
 
        error_regexes.extend(["Can't remove changed or unknown files:",
 
64
    def run_bzr_remove_changed_files(self, error_regexes, files_to_remove,
 
65
                                     working_dir=None):
 
66
        error_regexes.extend(["Can't safely remove modified or unknown files:",
63
67
            'Use --keep to not delete them,'
64
68
            ' or --force to delete them regardless.'
65
69
            ])
66
70
        self.run_bzr_error(error_regexes,
67
 
            'remove ' + ' '.join(files_to_remove))
 
71
                           ['remove'] + list(files_to_remove),
 
72
                           working_dir=working_dir)
68
73
        #see if we can force it now
69
 
        self.run_bzr('remove --force ' + ' '.join(files_to_remove))
 
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('.')
 
79
        self.run_bzr_error(["bzr: ERROR: No matching files."], 'remove --new')
 
80
        self.run_bzr_error(["bzr: ERROR: No matching files."], 'remove --new .')
70
81
 
71
82
    def test_remove_no_files_specified(self):
72
 
        tree = self._make_add_and_assert_tree([])
73
 
        self.run_bzr_error(["bzr: ERROR: Specify one or more files to remove, "
74
 
            "or use --new."], 'remove')
75
 
 
76
 
        self.run_bzr_error(["bzr: ERROR: No matching files."], 'remove --new')
77
 
 
78
 
        self.run_bzr_error(["bzr: ERROR: No matching files."],
79
 
            'remove --new .')
 
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)
80
146
 
81
147
    def test_rm_one_file(self):
82
 
        tree = self._make_add_and_assert_tree([a])
 
148
        tree = self._make_tree_and_add([a])
83
149
        self.run_bzr("commit -m 'added a'")
84
150
        self.run_bzr('rm a', error_regexes=["deleted a"])
85
151
        self.assertFilesDeleted([a])
86
152
 
87
153
    def test_remove_one_file(self):
88
 
        tree = self._make_add_and_assert_tree([a])
 
154
        tree = self._make_tree_and_add([a])
89
155
        self.run_bzr("commit -m 'added a'")
90
156
        self.run_bzr('remove a', error_regexes=["deleted a"])
91
157
        self.assertFilesDeleted([a])
92
158
 
93
159
    def test_remove_keep_one_file(self):
94
 
        tree = self._make_add_and_assert_tree([a])
 
160
        tree = self._make_tree_and_add([a])
95
161
        self.run_bzr('remove --keep a', error_regexes=["removed a"])
96
162
        self.assertFilesUnversioned([a])
97
163
 
98
164
    def test_remove_one_deleted_file(self):
99
 
        tree = self._make_add_and_assert_tree([a])
 
165
        tree = self._make_tree_and_add([a])
100
166
        self.run_bzr("commit -m 'added a'")
101
167
        os.unlink(a)
102
168
        self.assertInWorkingTree(a)
106
172
    def test_remove_invalid_files(self):
107
173
        self.build_tree(files)
108
174
        tree = self.make_branch_and_tree('.')
109
 
        self.run_bzr_remove_changed_files(['unknown:[.\s]*xyz[.\s]*abc/def'],
110
 
            ['.', 'xyz', 'abc/def'])
 
175
        self.run_bzr(['remove', '.', 'xyz', 'abc/def'])
111
176
 
112
177
    def test_remove_unversioned_files(self):
113
178
        self.build_tree(files)
116
181
            ['unknown:[.\s]*d/[.\s]*b/c[.\s]*b/[.\s]*a'], files)
117
182
 
118
183
    def test_remove_changed_files(self):
119
 
        tree = self._make_add_and_assert_tree(files)
 
184
        tree = self._make_tree_and_add(files)
120
185
        self.run_bzr("commit -m 'added files'")
121
186
        self.changeFile(a)
122
187
        self.changeFile(c)
123
188
        self.run_bzr_remove_changed_files(['modified:[.\s]*a[.\s]*b/c'], files)
124
189
 
 
190
    def test_remove_changed_ignored_files(self):
 
191
        tree = self._make_tree_and_add(['a'])
 
192
        self.run_bzr(['ignore', 'a'])
 
193
        self.run_bzr_remove_changed_files(['added:[.\s]*a'], ['a'])
 
194
 
125
195
    def test_remove_changed_files_from_child_dir(self):
126
 
        tree = self._make_add_and_assert_tree(files)
 
196
        if sys.platform == 'win32':
 
197
            raise TestSkipped("Windows unable to remove '.' directory")
 
198
        tree = self._make_tree_and_add(files)
127
199
        self.run_bzr("commit -m 'added files'")
128
200
        self.changeFile(a)
129
201
        self.changeFile(c)
130
 
        os.chdir('b')
131
 
        self.run_bzr_remove_changed_files(['modified:[.\s]*a[.\s]*b/c'],
132
 
            ['../a', 'c', '.', '../d'])
133
 
        os.chdir('..')
 
202
        self.run_bzr_remove_changed_files(
 
203
            ['modified:[.\s]*a[.\s]*b/c'],
 
204
            ['../a', 'c', '.', '../d'], working_dir='b')
134
205
        self.assertNotInWorkingTree(files)
135
206
        self.failIfExists(files)
136
207
 
143
214
    def test_remove_force_unversioned_files(self):
144
215
        self.build_tree(files)
145
216
        tree = self.make_branch_and_tree('.')
146
 
        self.run_bzr('remove --force ' + ' '.join(files),
 
217
        self.run_bzr(['remove', '--force'] + list(files),
147
218
                     error_regexes=["deleted a", "deleted b",
148
219
                                    "deleted b/c", "deleted d"])
149
220
        self.assertFilesDeleted(files)
150
221
 
151
222
    def test_remove_deleted_files(self):
152
 
        tree = self._make_add_and_assert_tree(files)
 
223
        tree = self._make_tree_and_add(files)
153
224
        self.run_bzr("commit -m 'added files'")
154
225
        my_files=[f for f in files]
155
226
        my_files.sort(reverse=True)
162
233
        self.failIfExists(files)
163
234
 
164
235
    def test_remove_non_existing_files(self):
165
 
        tree = self._make_add_and_assert_tree([])
166
 
        self.run_bzr_remove_changed_files(['unknown:[.\s]*b'], ['b'])
 
236
        tree = self._make_tree_and_add([])
 
237
        self.run_bzr(['remove', 'b'])
167
238
 
168
239
    def test_remove_keep_non_existing_files(self):
169
 
        tree = self._make_add_and_assert_tree([])
 
240
        tree = self._make_tree_and_add([])
170
241
        self.run_bzr('remove --keep b', error_regexes=["b is not versioned."])
171
242
 
172
243
    def test_remove_files(self):
173
 
        tree = self._make_add_and_assert_tree(files)
 
244
        tree = self._make_tree_and_add(files)
174
245
        self.run_bzr("commit -m 'added files'")
175
246
        self.run_bzr('remove a b b/c d',
176
247
                     error_regexes=["deleted a", "deleted b", "deleted b/c",
178
249
        self.assertFilesDeleted(files)
179
250
 
180
251
    def test_remove_keep_files(self):
181
 
        tree = self._make_add_and_assert_tree(files)
 
252
        tree = self._make_tree_and_add(files)
182
253
        self.run_bzr("commit -m 'added files'")
183
254
        self.run_bzr('remove --keep a b b/c d',
184
255
                     error_regexes=["removed a", "removed b", "removed b/c",
186
257
        self.assertFilesUnversioned(files)
187
258
 
188
259
    def test_remove_with_new(self):
189
 
        tree = self._make_add_and_assert_tree(files)
 
260
        tree = self._make_tree_and_add(files)
190
261
        self.run_bzr('remove --new --keep',
191
262
                     error_regexes=["removed a", "removed b", "removed b/c"])
192
263
        self.assertFilesUnversioned(files)
193
264
 
194
265
    def test_remove_with_new_in_dir1(self):
195
 
        tree = self._make_add_and_assert_tree(files)
 
266
        tree = self._make_tree_and_add(files)
196
267
        self.run_bzr('remove --new --keep b b/c',
197
268
                     error_regexes=["removed b", "removed b/c"])
198
269
        tree = WorkingTree.open('.')
201
272
        self.assertFilesUnversioned([b,c])
202
273
 
203
274
    def test_remove_with_new_in_dir2(self):
204
 
        tree = self._make_add_and_assert_tree(files)
 
275
        tree = self._make_tree_and_add(files)
205
276
        self.run_bzr('remove --new --keep .',
206
277
                     error_regexes=["removed a", "removed b", "removed b/c"])
207
278
        tree = WorkingTree.open('.')