348
def _make_expand_userdirs_filter(transport, base_path):
349
def expand_userdirs(path):
348
class BzrServer(object):
350
def __init__(self, userdir_expander=None):
352
self.base_path = None
353
self.backing_transport = None
354
if userdir_expander is None:
355
userdir_expander = os.path.expanduser
356
self.userdir_expander = userdir_expander
358
def _expand_userdirs(self, path):
350
359
"""Translate /~/ or /~user/ to e.g. /home/foo, using
351
360
os.path.expanduser.
362
371
if path.startswith('~'):
363
expanded = os.path.expanduser(path)
372
expanded = self.userdir_expander(path)
364
373
if not expanded.endswith('/'):
366
if expanded.startswith(base_path):
367
result = expanded[len(base_path):]
375
if expanded.startswith(self.base_path):
376
result = expanded[len(self.base_path):]
369
return pathfilter.PathFilteringServer(transport, expand_userdirs)
372
class BzrServer(object):
376
self.backing_transport = None
379
def _make_expand_userdirs_filter(self, transport):
380
return pathfilter.PathFilteringServer(transport, self._expand_userdirs)
378
382
def _make_backing_transport(self, transport):
379
383
"""Chroot transport, and decorate with userdir expander."""
380
base_path = _local_path_for_transport(transport)
384
self.base_path = _local_path_for_transport(transport)
381
385
chroot_server = chroot.ChrootServer(transport)
382
386
chroot_server.setUp()
383
387
self.cleanups.append(chroot_server.tearDown)
384
388
transport = get_transport(chroot_server.get_url())
385
if base_path is not None:
389
if self.base_path is not None:
386
390
# Decorate the server's backing transport with a filter that can
387
391
# expand homedirs.
388
expand_userdirs = _make_expand_userdirs_filter(transport, base_path)
392
expand_userdirs = self._make_expand_userdirs_filter(transport)
389
393
expand_userdirs.setUp()
390
394
self.cleanups.append(expand_userdirs.tearDown)
391
395
transport = get_transport(expand_userdirs.get_url())