~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/smart/request.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-12-09 02:53:42 UTC
  • mfrom: (4873.2.3 2.1.0b4-win32-test-imports)
  • Revision ID: pqm@pqm.ubuntu.com-20091209025342-sidvxfcqdgxmuz59
(jam) Get the test suite running again on Windows, (bug #492561)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2006, 2007 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
31
31
# of a SmartServerRequest subclass.
32
32
 
33
33
 
 
34
import tempfile
34
35
import threading
35
36
 
36
37
from bzrlib import (
37
38
    bzrdir,
38
 
    debug,
39
39
    errors,
40
 
    osutils,
41
40
    registry,
42
41
    revision,
43
42
    trace,
46
45
from bzrlib.lazy_import import lazy_import
47
46
lazy_import(globals(), """
48
47
from bzrlib.bundle import serializer
49
 
 
50
 
import tempfile
51
 
import thread
52
48
""")
53
49
 
54
50
 
135
131
        It will return a SmartServerResponse if the command does not expect a
136
132
        body.
137
133
 
138
 
        :param args: the arguments of the request.
 
134
        :param *args: the arguments of the request.
139
135
        """
140
136
        self._check_enabled()
141
137
        return self.do(*args)
291
287
        self.response = None
292
288
        self.finished_reading = False
293
289
        self._command = None
294
 
        if 'hpss' in debug.debug_flags:
295
 
            self._request_start_time = osutils.timer_func()
296
 
            self._thread_id = thread.get_ident()
297
 
 
298
 
    def _trace(self, action, message, extra_bytes=None, include_time=False):
299
 
        # It is a bit of a shame that this functionality overlaps with that of 
300
 
        # ProtocolThreeRequester._trace. However, there is enough difference
301
 
        # that just putting it in a helper doesn't help a lot. And some state
302
 
        # is taken from the instance.
303
 
        if include_time:
304
 
            t = '%5.3fs ' % (osutils.timer_func() - self._request_start_time)
305
 
        else:
306
 
            t = ''
307
 
        if extra_bytes is None:
308
 
            extra = ''
309
 
        else:
310
 
            extra = ' ' + repr(extra_bytes[:40])
311
 
            if len(extra) > 33:
312
 
                extra = extra[:29] + extra[-1] + '...'
313
 
        trace.mutter('%12s: [%s] %s%s%s'
314
 
                     % (action, self._thread_id, t, message, extra))
315
290
 
316
291
    def accept_body(self, bytes):
317
292
        """Accept body data."""
319
294
            # no active command object, so ignore the event.
320
295
            return
321
296
        self._run_handler_code(self._command.do_chunk, (bytes,), {})
322
 
        if 'hpss' in debug.debug_flags:
323
 
            self._trace('accept body',
324
 
                        '%d bytes' % (len(bytes),), bytes)
325
297
 
326
298
    def end_of_body(self):
327
299
        """No more body data will be received."""
328
300
        self._run_handler_code(self._command.do_end, (), {})
329
301
        # cannot read after this.
330
302
        self.finished_reading = True
331
 
        if 'hpss' in debug.debug_flags:
332
 
            self._trace('end of body', '', include_time=True)
333
303
 
334
304
    def _run_handler_code(self, callable, args, kwargs):
335
305
        """Run some handler specific code 'callable'.
364
334
 
365
335
    def headers_received(self, headers):
366
336
        # Just a no-op at the moment.
367
 
        if 'hpss' in debug.debug_flags:
368
 
            self._trace('headers', repr(headers))
 
337
        pass
369
338
 
370
339
    def args_received(self, args):
371
340
        cmd = args[0]
373
342
        try:
374
343
            command = self._commands.get(cmd)
375
344
        except LookupError:
376
 
            if 'hpss' in debug.debug_flags:
377
 
                self._trace('hpss unknown request', 
378
 
                            cmd, repr(args)[1:-1])
379
345
            raise errors.UnknownSmartMethod(cmd)
380
 
        if 'hpss' in debug.debug_flags:
381
 
            from bzrlib.smart import vfs
382
 
            if issubclass(command, vfs.VfsRequest):
383
 
                action = 'hpss vfs req'
384
 
            else:
385
 
                action = 'hpss request'
386
 
            self._trace(action, 
387
 
                        '%s %s' % (cmd, repr(args)[1:-1]))
388
346
        self._command = command(
389
347
            self._backing_transport, self._root_client_path, self._jail_root)
390
348
        self._run_handler_code(self._command.execute, args, {})
394
352
            # no active command object, so ignore the event.
395
353
            return
396
354
        self._run_handler_code(self._command.do_end, (), {})
397
 
        if 'hpss' in debug.debug_flags:
398
 
            self._trace('end', '', include_time=True)
399
355
 
400
356
    def post_body_error_received(self, error_args):
401
357
        # Just a no-op at the moment.
447
403
        return ('TokenMismatch', err.given_token, err.lock_token)
448
404
    elif isinstance(err, errors.LockContention):
449
405
        return ('LockContention',)
450
 
    elif isinstance(err, MemoryError):
451
 
        # GZ 2011-02-24: Copy bzrlib.trace -Dmem_dump functionality here?
452
 
        return ('MemoryError',)
453
406
    # Unserialisable error.  Log it, and return a generic error
454
407
    trace.log_exception_quietly()
455
 
    return ('error', trace._qualified_exception_name(err.__class__, True),
456
 
        str(err))
 
408
    return ('error', str(err))
457
409
 
458
410
 
459
411
class HelloRequest(SmartServerRequest):
506
458
    'Branch.set_tags_bytes', 'bzrlib.smart.branch',
507
459
    'SmartServerBranchSetTagsBytes')
508
460
request_handlers.register_lazy(
509
 
    'Branch.heads_to_fetch', 'bzrlib.smart.branch',
510
 
    'SmartServerBranchHeadsToFetch')
511
 
request_handlers.register_lazy(
512
461
    'Branch.get_stacked_on_url', 'bzrlib.smart.branch', 'SmartServerBranchRequestGetStackedOnURL')
513
462
request_handlers.register_lazy(
514
463
    'Branch.last_revision_info', 'bzrlib.smart.branch', 'SmartServerBranchRequestLastRevisionInfo')
518
467
    'bzrlib.smart.branch', 'SmartServerRequestRevisionHistory')
519
468
request_handlers.register_lazy( 'Branch.set_config_option',
520
469
    'bzrlib.smart.branch', 'SmartServerBranchRequestSetConfigOption')
521
 
request_handlers.register_lazy( 'Branch.set_config_option_dict',
522
 
    'bzrlib.smart.branch', 'SmartServerBranchRequestSetConfigOptionDict')
523
470
request_handlers.register_lazy( 'Branch.set_last_revision',
524
471
    'bzrlib.smart.branch', 'SmartServerBranchRequestSetLastRevision')
525
472
request_handlers.register_lazy(
571
518
    'BzrDir.open_branchV2', 'bzrlib.smart.bzrdir',
572
519
    'SmartServerRequestOpenBranchV2')
573
520
request_handlers.register_lazy(
574
 
    'BzrDir.open_branchV3', 'bzrlib.smart.bzrdir',
575
 
    'SmartServerRequestOpenBranchV3')
576
 
request_handlers.register_lazy(
577
521
    'delete', 'bzrlib.smart.vfs', 'DeleteRequest')
578
522
request_handlers.register_lazy(
579
523
    'get', 'bzrlib.smart.vfs', 'GetRequest')