~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/smart/server.py

Abbreviate pack_stat struct format to '>6L'

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2006-2011 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
28
28
    trace,
29
29
    transport as _mod_transport,
30
30
)
 
31
from bzrlib.i18n import gettext
31
32
from bzrlib.lazy_import import lazy_import
32
33
lazy_import(globals(), """
33
34
from bzrlib.smart import medium
254
255
            "Called by the bzr server when it stops serving a directory. "
255
256
            "server_stopped is called with the same parameters as the "
256
257
            "server_started hook: (backing_urls, public_url).", (0, 16))
 
258
        self.add_hook('server_exception',
 
259
            "Called by the bzr server when an exception occurs. "
 
260
            "server_exception is called with the sys.exc_info() tuple "
 
261
            "return true for the hook if the exception has been handled, "
 
262
            "in which case the server will exit normally.", (2, 4))
257
263
 
258
264
SmartTCPServer.hooks = SmartServerHooks()
259
265
 
325
331
        chroot_server = chroot.ChrootServer(transport)
326
332
        chroot_server.start_server()
327
333
        self.cleanups.append(chroot_server.stop_server)
328
 
        transport = _mod_transport.get_transport(chroot_server.get_url())
 
334
        transport = _mod_transport.get_transport_from_url(chroot_server.get_url())
329
335
        if self.base_path is not None:
330
336
            # Decorate the server's backing transport with a filter that can
331
337
            # expand homedirs.
332
338
            expand_userdirs = self._make_expand_userdirs_filter(transport)
333
339
            expand_userdirs.start_server()
334
340
            self.cleanups.append(expand_userdirs.stop_server)
335
 
            transport = _mod_transport.get_transport(expand_userdirs.get_url())
 
341
            transport = _mod_transport.get_transport_from_url(expand_userdirs.get_url())
336
342
        self.transport = transport
337
343
 
338
344
    def _make_smart_server(self, host, port, inet):
346
352
                port = medium.BZR_DEFAULT_PORT
347
353
            smart_server = SmartTCPServer(self.transport)
348
354
            smart_server.start_server(host, port)
349
 
            trace.note('listening on port: %s' % smart_server.port)
 
355
            trace.note(gettext('listening on port: %s') % smart_server.port)
350
356
        self.smart_server = smart_server
351
357
 
352
358
    def _change_globals(self):
373
379
        for cleanup in reversed(self.cleanups):
374
380
            cleanup()
375
381
 
376
 
 
377
382
def serve_bzr(transport, host=None, port=None, inet=False):
378
383
    """This is the default implementation of 'bzr serve'.
379
384
    
385
390
    try:
386
391
        bzr_server.set_up(transport, host, port, inet)
387
392
        bzr_server.smart_server.serve()
 
393
    except:
 
394
        hook_caught_exception = False
 
395
        for hook in SmartTCPServer.hooks['server_exception']:
 
396
            hook_caught_exception = hook(sys.exc_info())
 
397
        if not hook_caught_exception:
 
398
            raise
388
399
    finally:
389
400
        bzr_server.tear_down()
390