23
from bzrlib import tests, ui
24
from bzrlib.controldir import (
23
from .. import tests, ui
24
from ..controldir import (
27
from bzrlib.clean_tree import (
27
from ..clean_tree import (
31
from bzrlib.osutils import (
31
from ..osutils import (
34
from bzrlib.tests import (
56
56
"""Files are selected for deletion appropriately"""
58
58
tree = ControlDir.create_standalone_workingtree('branch')
59
transport = tree.bzrdir.root_transport
60
transport.put_bytes('.bzrignore', '*~\n*.pyc\n.bzrignore\n')
61
transport.put_bytes('file.BASE', 'contents')
59
transport = tree.controldir.root_transport
60
transport.put_bytes('.bzrignore', b'*~\n*.pyc\n.bzrignore\n')
61
transport.put_bytes('file.BASE', b'contents')
62
with tree.lock_write():
64
63
self.assertEqual(len(list(iter_deletables(tree, unknown=True))), 1)
65
transport.put_bytes('file', 'contents')
66
transport.put_bytes('file~', 'contents')
67
transport.put_bytes('file.pyc', 'contents')
68
dels = sorted([r for a,r in iter_deletables(tree, unknown=True)])
64
transport.put_bytes('file', b'contents')
65
transport.put_bytes('file~', b'contents')
66
transport.put_bytes('file.pyc', b'contents')
67
dels = sorted([r for a, r in iter_deletables(tree, unknown=True)])
69
68
self.assertEqual(['file', 'file.BASE'], dels)
71
dels = [r for a,r in iter_deletables(tree, detritus=True)]
70
dels = [r for a, r in iter_deletables(tree, detritus=True)]
72
71
self.assertEqual(sorted(['file~', 'file.BASE']), dels)
74
dels = [r for a,r in iter_deletables(tree, ignored=True)]
73
dels = [r for a, r in iter_deletables(tree, ignored=True)]
75
74
self.assertEqual(sorted(['file~', 'file.pyc', '.bzrignore']),
78
dels = [r for a,r in iter_deletables(tree, unknown=False)]
77
dels = [r for a, r in iter_deletables(tree, unknown=False)]
79
78
self.assertEqual([], dels)
83
80
def test_delete_items_warnings(self):
84
81
"""Ensure delete_items issues warnings on EACCES. (bug #430785)
113
110
# be shown to the user.
114
111
function = os.listdir
115
112
onerror(function=function,
116
path=path, excinfo=excinfo)
113
path=path, excinfo=excinfo)
118
115
self.overrideAttr(os, 'unlink', _dummy_unlink)
119
116
self.overrideAttr(shutil, 'rmtree', _dummy_rmtree)
120
stdout = tests.StringIOWrapper()
121
stderr = tests.StringIOWrapper()
122
ui.ui_factory = tests.TestUIFactory(stdout=stdout, stderr=stderr)
117
ui.ui_factory = tests.TestUIFactory()
118
stderr = ui.ui_factory.stderr
124
120
ControlDir.create_standalone_workingtree('.')
125
121
self.build_tree(['0foo', '1bar', '2baz', 'subdir0/'])
126
122
clean_tree('.', unknown=True, no_prompt=True)
127
123
self.assertContainsRe(stderr.getvalue(),
128
'bzr: warning: unable to remove.*0foo')
124
'bzr: warning: unable to remove.*0foo')
129
125
self.assertContainsRe(stderr.getvalue(),
130
'bzr: warning: unable to remove.*subdir0')
126
'bzr: warning: unable to remove.*subdir0')
132
128
# Ensure that error other than EACCES during os.remove are
133
129
# not turned into warnings.
134
130
self.build_tree(['subdir1/'])
135
131
self.assertRaises(OSError, clean_tree, '.',
136
unknown=True, no_prompt=True)
132
unknown=True, no_prompt=True)