Rev 5320: (lifeless) Teach BzrDir.find_bzrdirs to handle PermissionDenied errors. in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Fri Jun 25 05:24:14 BST 2010
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 5320 [merge]
revision-id: pqm at pqm.ubuntu.com-20100625042410-r2zawge1wxx9ma9p
parent: pqm at pqm.ubuntu.com-20100625014717-87uomuhwxiuths2j
parent: robertc at robertcollins.net-20100625014949-0eiur8mbvb1d2mp6
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Fri 2010-06-25 05:24:10 +0100
message:
(lifeless) Teach BzrDir.find_bzrdirs to handle PermissionDenied errors.
(Marius Kruger) (Robert Collins)
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/bzrdir.py bzrdir.py-20060131065624-156dfea39c4387cb
bzrlib/tests/__init__.py selftest.py-20050531073622-8d0e3c8845c97a64
bzrlib/tests/test_bzrdir.py test_bzrdir.py-20060131065654-deba40eef51cf220
=== modified file 'NEWS'
--- a/NEWS 2010-06-25 01:47:17 +0000
+++ b/NEWS 2010-06-25 04:24:10 +0000
@@ -58,6 +58,9 @@
or pull location in locations.conf or branch.conf.
(Gordon Tyler, #534787)
+* ``BzrDir.find_bzrdirs`` should ignore dirs that raises PermissionDenied.
+ (Marius Kruger, Robert Collins)
+
* Ensure that wrong path specifications in ``BZR_PLUGINS_AT`` display
proper error messages. (Vincent Ladeuil, #591215)
=== modified file 'bzrlib/bzrdir.py'
--- a/bzrlib/bzrdir.py 2010-06-24 06:29:40 +0000
+++ b/bzrlib/bzrdir.py 2010-06-25 04:24:10 +0000
@@ -375,14 +375,14 @@
recurse = True
try:
bzrdir = BzrDir.open_from_transport(current_transport)
- except errors.NotBranchError:
+ except (errors.NotBranchError, errors.PermissionDenied):
pass
else:
recurse, value = evaluate(bzrdir)
yield value
try:
subdirs = list_current(current_transport)
- except errors.NoSuchFile:
+ except (errors.NoSuchFile, errors.PermissionDenied):
continue
if recurse:
for subdir in sorted(subdirs, reverse=True):
@@ -1959,7 +1959,6 @@
format_string = transport.get_bytes(".bzr/branch-format")
except errors.NoSuchFile:
raise errors.NotBranchError(path=transport.base)
-
try:
return klass._formats[format_string]
except KeyError:
=== modified file 'bzrlib/tests/__init__.py'
--- a/bzrlib/tests/__init__.py 2010-06-21 22:29:38 +0000
+++ b/bzrlib/tests/__init__.py 2010-06-25 01:49:49 +0000
@@ -2408,9 +2408,11 @@
made_control = self.make_bzrdir(relpath, format=format)
return made_control.create_repository(shared=shared)
- def make_smart_server(self, path):
+ def make_smart_server(self, path, backing_server=None):
+ if backing_server is None:
+ backing_server = self.get_server()
smart_server = test_server.SmartTCPServer_for_testing()
- self.start_server(smart_server, self.get_server())
+ self.start_server(smart_server, backing_server)
remote_transport = get_transport(smart_server.get_url()).clone(path)
return remote_transport
=== modified file 'bzrlib/tests/test_bzrdir.py'
--- a/bzrlib/tests/test_bzrdir.py 2010-03-25 14:22:41 +0000
+++ b/bzrlib/tests/test_bzrdir.py 2010-06-25 01:49:49 +0000
@@ -54,6 +54,7 @@
from bzrlib.transport import (
get_transport,
memory,
+ pathfilter,
)
from bzrlib.transport.http._urllib import HttpTransport_urllib
from bzrlib.transport.nosmart import NoSmartTransportDecorator
@@ -807,6 +808,38 @@
self.assertEqualBzrdirs([baz, foo, bar],
bzrdir.BzrDir.find_bzrdirs(transport))
+ def make_fake_permission_denied_transport(self, transport, paths):
+ """Create a transport that raises PermissionDenied for some paths."""
+ def filter(path):
+ if path in paths:
+ raise errors.PermissionDenied(path)
+ return path
+ path_filter_server = pathfilter.PathFilteringServer(transport, filter)
+ path_filter_server.start_server()
+ self.addCleanup(path_filter_server.stop_server)
+ path_filter_transport = pathfilter.PathFilteringTransport(
+ path_filter_server, '.')
+ return (path_filter_server, path_filter_transport)
+
+ def assertBranchUrlsEndWith(self, expect_url_suffix, actual_bzrdirs):
+ """Check that each branch url ends with the given suffix."""
+ for actual_bzrdir in actual_bzrdirs:
+ self.assertEndsWith(actual_bzrdir.user_url, expect_url_suffix)
+
+ def test_find_bzrdirs_permission_denied(self):
+ foo, bar, baz = self.make_foo_bar_baz()
+ transport = get_transport(self.get_url())
+ path_filter_server, path_filter_transport = \
+ self.make_fake_permission_denied_transport(transport, ['foo'])
+ # local transport
+ self.assertBranchUrlsEndWith('/baz/',
+ bzrdir.BzrDir.find_bzrdirs(path_filter_transport))
+ # smart server
+ smart_transport = self.make_smart_server('.',
+ backing_server=path_filter_server)
+ self.assertBranchUrlsEndWith('/baz/',
+ bzrdir.BzrDir.find_bzrdirs(smart_transport))
+
def test_find_bzrdirs_list_current(self):
def list_current(transport):
return [s for s in transport.list_dir('') if s != 'baz']
@@ -817,7 +850,6 @@
bzrdir.BzrDir.find_bzrdirs(transport,
list_current=list_current))
-
def test_find_bzrdirs_evaluate(self):
def evaluate(bzrdir):
try:
More information about the bazaar-commits
mailing list