~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/smart/server.py

  • Committer: Andrew Bennetts
  • Date: 2009-09-15 03:00:23 UTC
  • mto: This revision was merged to the branch mainline in revision 4702.
  • Revision ID: andrew.bennetts@canonical.com-20090915030023-36kgbugmn9xv140m
Refactor bzr_serve more so that it is possible to use a function other than os.path.expanduser for the userdir expansion.

Show diffs side-by-side

added added

removed removed

Lines of Context:
345
345
            return None
346
346
 
347
347
 
348
 
def _make_expand_userdirs_filter(transport, base_path):
349
 
    def expand_userdirs(path):
 
348
class BzrServer(object):
 
349
 
 
350
    def __init__(self, userdir_expander=None):
 
351
        self.cleanups = []
 
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
 
357
 
 
358
    def _expand_userdirs(self, path):
350
359
        """Translate /~/ or /~user/ to e.g. /home/foo, using
351
360
        os.path.expanduser.
352
361
 
360
369
        """
361
370
        result = path
362
371
        if path.startswith('~'):
363
 
            expanded = os.path.expanduser(path)
 
372
            expanded = self.userdir_expander(path)
364
373
            if not expanded.endswith('/'):
365
374
                expanded += '/'
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):]
368
377
        return result
369
 
    return pathfilter.PathFilteringServer(transport, expand_userdirs)
370
 
 
371
 
 
372
 
class BzrServer(object):
373
 
 
374
 
    def __init__(self):
375
 
        self.cleanups = []
376
 
        self.backing_transport = None
 
378
 
 
379
    def _make_expand_userdirs_filter(self, transport):
 
380
        return pathfilter.PathFilteringServer(transport, self._expand_userdirs)
377
381
 
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())