/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/smart/request.py

  • Committer: Robert Collins
  • Date: 2010-05-06 11:08:10 UTC
  • mto: This revision was merged to the branch mainline in revision 5223.
  • Revision ID: robertc@robertcollins.net-20100506110810-h3j07fh5gmw54s25
Cleaner matcher matching revised unlocking protocol.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2011 Canonical Ltd
 
1
# Copyright (C) 2006-2010 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
26
26
      of times during a request).
27
27
"""
28
28
 
29
 
from __future__ import absolute_import
30
 
 
31
29
# XXX: The class names are a little confusing: the protocol will instantiate a
32
30
# SmartServerRequestHandler, whose dispatch_command method creates an instance
33
31
# of a SmartServerRequest subclass.
34
32
 
35
33
 
 
34
import tempfile
 
35
import thread
36
36
import threading
37
37
 
38
 
from ... import (
39
 
    branch as _mod_branch,
 
38
from bzrlib import (
 
39
    bzrdir,
40
40
    debug,
41
41
    errors,
42
42
    osutils,
45
45
    trace,
46
46
    urlutils,
47
47
    )
48
 
from ...lazy_import import lazy_import
 
48
from bzrlib.lazy_import import lazy_import
49
49
lazy_import(globals(), """
50
 
from breezy.bzr import bzrdir
51
 
from breezy.bundle import serializer
52
 
 
53
 
import tempfile
54
 
import thread
 
50
from bzrlib.bundle import serializer
55
51
""")
56
52
 
57
53
 
59
55
jail_info.transports = None
60
56
 
61
57
 
62
 
class DisabledMethod(errors.InternalBzrError):
63
 
 
64
 
    _fmt = "The smart server method '%(class_name)s' is disabled."
65
 
 
66
 
    def __init__(self, class_name):
67
 
        errors.BzrError.__init__(self)
68
 
        self.class_name = class_name
69
 
 
70
 
 
71
58
def _install_hook():
72
59
    bzrdir.BzrDir.hooks.install_named_hook(
73
60
        'pre_open', _pre_open_hook, 'checking server jail')
147
134
        It will return a SmartServerResponse if the command does not expect a
148
135
        body.
149
136
 
150
 
        :param args: the arguments of the request.
 
137
        :param *args: the arguments of the request.
151
138
        """
152
139
        self._check_enabled()
153
140
        return self.do(*args)
292
279
 
293
280
        :param backing_transport: a Transport to handle requests for.
294
281
        :param commands: a registry mapping command names to SmartServerRequest
295
 
            subclasses. e.g. breezy.transport.smart.vfs.vfs_commands.
 
282
            subclasses. e.g. bzrlib.transport.smart.vfs.vfs_commands.
296
283
        """
297
284
        self._backing_transport = backing_transport
298
285
        self._root_client_path = root_client_path
370
357
                self._command.teardown_jail()
371
358
        except (KeyboardInterrupt, SystemExit):
372
359
            raise
373
 
        except Exception as err:
 
360
        except Exception, err:
374
361
            err_struct = _translate_error(err)
375
362
            return FailedSmartServerResponse(err_struct)
376
363
 
390
377
                            cmd, repr(args)[1:-1])
391
378
            raise errors.UnknownSmartMethod(cmd)
392
379
        if 'hpss' in debug.debug_flags:
393
 
            from . import vfs
 
380
            from bzrlib.smart import vfs
394
381
            if issubclass(command, vfs.VfsRequest):
395
382
                action = 'hpss vfs req'
396
383
            else:
427
414
    elif isinstance(err, errors.ShortReadvError):
428
415
        return ('ShortReadvError', err.path, str(err.offset), str(err.length),
429
416
                str(err.actual))
430
 
    elif isinstance(err, errors.RevisionNotPresent):
431
 
        return ('RevisionNotPresent', err.revision_id, err.file_id)
432
417
    elif isinstance(err, errors.UnstackableRepositoryFormat):
433
418
        return (('UnstackableRepositoryFormat', str(err.format), err.url))
434
 
    elif isinstance(err, _mod_branch.UnstackableBranchFormat):
 
419
    elif isinstance(err, errors.UnstackableBranchFormat):
435
420
        return ('UnstackableBranchFormat', str(err.format), err.url)
436
421
    elif isinstance(err, errors.NotStacked):
437
422
        return ('NotStacked',)
438
 
    elif isinstance(err, errors.BzrCheckError):
439
 
        return ('BzrCheckError', err.msg)
440
423
    elif isinstance(err, UnicodeError):
441
424
        # If it is a DecodeError, than most likely we are starting
442
425
        # with a plain string
463
446
        return ('TokenMismatch', err.given_token, err.lock_token)
464
447
    elif isinstance(err, errors.LockContention):
465
448
        return ('LockContention',)
466
 
    elif isinstance(err, MemoryError):
467
 
        # GZ 2011-02-24: Copy breezy.trace -Dmem_dump functionality here?
468
 
        return ('MemoryError',)
469
449
    # Unserialisable error.  Log it, and return a generic error
470
450
    trace.log_exception_quietly()
471
 
    return ('error', trace._qualified_exception_name(err.__class__, True),
472
 
        str(err))
 
451
    return ('error', str(err))
473
452
 
474
453
 
475
454
class HelloRequest(SmartServerRequest):
507
486
        return SuccessfulSmartServerResponse((answer,))
508
487
 
509
488
 
510
 
# In the 'info' attribute, we store whether this request is 'safe' to retry if
511
 
# we get a disconnect while reading the response. It can have the values:
512
 
#   read    This is purely a read request, so retrying it is perfectly ok.
513
 
#   idem    An idempotent write request. Something like 'put' where if you put
514
 
#           the same bytes twice you end up with the same final bytes.
515
 
#   semi    This is a request that isn't strictly idempotent, but doesn't
516
 
#           result in corruption if it is retried. This is for things like
517
 
#           'lock' and 'unlock'. If you call lock, it updates the disk
518
 
#           structure. If you fail to read the response, you won't be able to
519
 
#           use the lock, because you don't have the lock token. Calling lock
520
 
#           again will fail, because the lock is already taken. However, we
521
 
#           can't tell if the server received our request or not. If it didn't,
522
 
#           then retrying the request is fine, as it will actually do what we
523
 
#           want. If it did, we will interrupt the current operation, but we
524
 
#           are no worse off than interrupting the current operation because of
525
 
#           a ConnectionReset.
526
 
#   semivfs Similar to semi, but specific to a Virtual FileSystem request.
527
 
#   stream  This is a request that takes a stream that cannot be restarted if
528
 
#           consumed. This request is 'safe' in that if we determine the
529
 
#           connection is closed before we consume the stream, we can try
530
 
#           again.
531
 
#   mutate  State is updated in a way that replaying that request results in a
532
 
#           different state. For example 'append' writes more bytes to a given
533
 
#           file. If append succeeds, it moves the file pointer.
534
489
request_handlers = registry.Registry()
535
490
request_handlers.register_lazy(
536
 
    'append', 'breezy.bzr.smart.vfs', 'AppendRequest', info='mutate')
537
 
request_handlers.register_lazy(
538
 
    'Branch.break_lock', 'breezy.bzr.smart.branch',
539
 
    'SmartServerBranchBreakLock', info='idem')
540
 
request_handlers.register_lazy(
541
 
    'Branch.get_config_file', 'breezy.bzr.smart.branch',
542
 
    'SmartServerBranchGetConfigFile', info='read')
543
 
request_handlers.register_lazy(
544
 
    'Branch.get_parent', 'breezy.bzr.smart.branch', 'SmartServerBranchGetParent',
545
 
    info='read')
546
 
request_handlers.register_lazy(
547
 
    'Branch.put_config_file', 'breezy.bzr.smart.branch',
548
 
    'SmartServerBranchPutConfigFile', info='idem')
549
 
request_handlers.register_lazy(
550
 
    'Branch.get_tags_bytes', 'breezy.bzr.smart.branch',
551
 
    'SmartServerBranchGetTagsBytes', info='read')
552
 
request_handlers.register_lazy(
553
 
    'Branch.set_tags_bytes', 'breezy.bzr.smart.branch',
554
 
    'SmartServerBranchSetTagsBytes', info='idem')
555
 
request_handlers.register_lazy(
556
 
    'Branch.heads_to_fetch', 'breezy.bzr.smart.branch',
557
 
    'SmartServerBranchHeadsToFetch', info='read')
558
 
request_handlers.register_lazy(
559
 
    'Branch.get_stacked_on_url', 'breezy.bzr.smart.branch',
560
 
    'SmartServerBranchRequestGetStackedOnURL', info='read')
561
 
request_handlers.register_lazy(
562
 
    'Branch.get_physical_lock_status', 'breezy.bzr.smart.branch',
563
 
    'SmartServerBranchRequestGetPhysicalLockStatus', info='read')
564
 
request_handlers.register_lazy(
565
 
    'Branch.last_revision_info', 'breezy.bzr.smart.branch',
566
 
    'SmartServerBranchRequestLastRevisionInfo', info='read')
567
 
request_handlers.register_lazy(
568
 
    'Branch.lock_write', 'breezy.bzr.smart.branch',
569
 
    'SmartServerBranchRequestLockWrite', info='semi')
570
 
request_handlers.register_lazy(
571
 
    'Branch.revision_history', 'breezy.bzr.smart.branch',
572
 
    'SmartServerRequestRevisionHistory', info='read')
573
 
request_handlers.register_lazy(
574
 
    'Branch.set_config_option', 'breezy.bzr.smart.branch',
575
 
    'SmartServerBranchRequestSetConfigOption', info='idem')
576
 
request_handlers.register_lazy(
577
 
    'Branch.set_config_option_dict', 'breezy.bzr.smart.branch',
578
 
    'SmartServerBranchRequestSetConfigOptionDict', info='idem')
579
 
request_handlers.register_lazy(
580
 
    'Branch.set_last_revision', 'breezy.bzr.smart.branch',
581
 
    'SmartServerBranchRequestSetLastRevision', info='idem')
582
 
request_handlers.register_lazy(
583
 
    'Branch.set_last_revision_info', 'breezy.bzr.smart.branch',
584
 
    'SmartServerBranchRequestSetLastRevisionInfo', info='idem')
585
 
request_handlers.register_lazy(
586
 
    'Branch.set_last_revision_ex', 'breezy.bzr.smart.branch',
587
 
    'SmartServerBranchRequestSetLastRevisionEx', info='idem')
588
 
request_handlers.register_lazy(
589
 
    'Branch.set_parent_location', 'breezy.bzr.smart.branch',
590
 
    'SmartServerBranchRequestSetParentLocation', info='idem')
591
 
request_handlers.register_lazy(
592
 
    'Branch.unlock', 'breezy.bzr.smart.branch',
593
 
    'SmartServerBranchRequestUnlock', info='semi')
594
 
request_handlers.register_lazy(
595
 
    'Branch.revision_id_to_revno', 'breezy.bzr.smart.branch',
596
 
    'SmartServerBranchRequestRevisionIdToRevno', info='read')
597
 
request_handlers.register_lazy(
598
 
    'BzrDir.checkout_metadir', 'breezy.bzr.smart.bzrdir',
599
 
    'SmartServerBzrDirRequestCheckoutMetaDir', info='read')
600
 
request_handlers.register_lazy(
601
 
    'BzrDir.cloning_metadir', 'breezy.bzr.smart.bzrdir',
602
 
    'SmartServerBzrDirRequestCloningMetaDir', info='read')
603
 
request_handlers.register_lazy(
604
 
    'BzrDir.create_branch', 'breezy.bzr.smart.bzrdir',
605
 
    'SmartServerRequestCreateBranch', info='semi')
606
 
request_handlers.register_lazy(
607
 
    'BzrDir.create_repository', 'breezy.bzr.smart.bzrdir',
608
 
    'SmartServerRequestCreateRepository', info='semi')
609
 
request_handlers.register_lazy(
610
 
    'BzrDir.find_repository', 'breezy.bzr.smart.bzrdir',
611
 
    'SmartServerRequestFindRepositoryV1', info='read')
612
 
request_handlers.register_lazy(
613
 
    'BzrDir.find_repositoryV2', 'breezy.bzr.smart.bzrdir',
614
 
    'SmartServerRequestFindRepositoryV2', info='read')
615
 
request_handlers.register_lazy(
616
 
    'BzrDir.find_repositoryV3', 'breezy.bzr.smart.bzrdir',
617
 
    'SmartServerRequestFindRepositoryV3', info='read')
618
 
request_handlers.register_lazy(
619
 
    'BzrDir.get_branches', 'breezy.bzr.smart.bzrdir',
620
 
    'SmartServerBzrDirRequestGetBranches', info='read')
621
 
request_handlers.register_lazy(
622
 
    'BzrDir.get_config_file', 'breezy.bzr.smart.bzrdir',
623
 
    'SmartServerBzrDirRequestConfigFile', info='read')
624
 
request_handlers.register_lazy(
625
 
    'BzrDir.destroy_branch', 'breezy.bzr.smart.bzrdir',
626
 
    'SmartServerBzrDirRequestDestroyBranch', info='semi')
627
 
request_handlers.register_lazy(
628
 
    'BzrDir.destroy_repository', 'breezy.bzr.smart.bzrdir',
629
 
    'SmartServerBzrDirRequestDestroyRepository', info='semi')
630
 
request_handlers.register_lazy(
631
 
    'BzrDir.has_workingtree', 'breezy.bzr.smart.bzrdir',
632
 
    'SmartServerBzrDirRequestHasWorkingTree', info='read')
633
 
request_handlers.register_lazy(
634
 
    'BzrDirFormat.initialize', 'breezy.bzr.smart.bzrdir',
635
 
    'SmartServerRequestInitializeBzrDir', info='semi')
636
 
request_handlers.register_lazy(
637
 
    'BzrDirFormat.initialize_ex_1.16', 'breezy.bzr.smart.bzrdir',
638
 
    'SmartServerRequestBzrDirInitializeEx', info='semi')
639
 
request_handlers.register_lazy(
640
 
    'BzrDir.open', 'breezy.bzr.smart.bzrdir', 'SmartServerRequestOpenBzrDir',
641
 
    info='read')
642
 
request_handlers.register_lazy(
643
 
    'BzrDir.open_2.1', 'breezy.bzr.smart.bzrdir',
644
 
    'SmartServerRequestOpenBzrDir_2_1', info='read')
645
 
request_handlers.register_lazy(
646
 
    'BzrDir.open_branch', 'breezy.bzr.smart.bzrdir',
647
 
    'SmartServerRequestOpenBranch', info='read')
648
 
request_handlers.register_lazy(
649
 
    'BzrDir.open_branchV2', 'breezy.bzr.smart.bzrdir',
650
 
    'SmartServerRequestOpenBranchV2', info='read')
651
 
request_handlers.register_lazy(
652
 
    'BzrDir.open_branchV3', 'breezy.bzr.smart.bzrdir',
653
 
    'SmartServerRequestOpenBranchV3', info='read')
654
 
request_handlers.register_lazy(
655
 
    'delete', 'breezy.bzr.smart.vfs', 'DeleteRequest', info='semivfs')
656
 
request_handlers.register_lazy(
657
 
    'get', 'breezy.bzr.smart.vfs', 'GetRequest', info='read')
658
 
request_handlers.register_lazy(
659
 
    'get_bundle', 'breezy.bzr.smart.request', 'GetBundleRequest', info='read')
660
 
request_handlers.register_lazy(
661
 
    'has', 'breezy.bzr.smart.vfs', 'HasRequest', info='read')
662
 
request_handlers.register_lazy(
663
 
    'hello', 'breezy.bzr.smart.request', 'HelloRequest', info='read')
664
 
request_handlers.register_lazy(
665
 
    'iter_files_recursive', 'breezy.bzr.smart.vfs', 'IterFilesRecursiveRequest',
666
 
    info='read')
667
 
request_handlers.register_lazy(
668
 
    'list_dir', 'breezy.bzr.smart.vfs', 'ListDirRequest', info='read')
669
 
request_handlers.register_lazy(
670
 
    'mkdir', 'breezy.bzr.smart.vfs', 'MkdirRequest', info='semivfs')
671
 
request_handlers.register_lazy(
672
 
    'move', 'breezy.bzr.smart.vfs', 'MoveRequest', info='semivfs')
673
 
request_handlers.register_lazy(
674
 
    'put', 'breezy.bzr.smart.vfs', 'PutRequest', info='idem')
675
 
request_handlers.register_lazy(
676
 
    'put_non_atomic', 'breezy.bzr.smart.vfs', 'PutNonAtomicRequest', info='idem')
677
 
request_handlers.register_lazy(
678
 
    'readv', 'breezy.bzr.smart.vfs', 'ReadvRequest', info='read')
679
 
request_handlers.register_lazy(
680
 
    'rename', 'breezy.bzr.smart.vfs', 'RenameRequest', info='semivfs')
681
 
request_handlers.register_lazy(
682
 
    'Repository.add_signature_text', 'breezy.bzr.smart.repository',
683
 
    'SmartServerRepositoryAddSignatureText', info='idem')
684
 
request_handlers.register_lazy(
685
 
    'Repository.all_revision_ids', 'breezy.bzr.smart.repository',
686
 
    'SmartServerRepositoryAllRevisionIds', info='read')
687
 
request_handlers.register_lazy(
688
 
    'PackRepository.autopack', 'breezy.bzr.smart.packrepository',
689
 
    'SmartServerPackRepositoryAutopack', info='idem')
690
 
request_handlers.register_lazy(
691
 
    'Repository.break_lock', 'breezy.bzr.smart.repository',
692
 
    'SmartServerRepositoryBreakLock', info='idem')
693
 
request_handlers.register_lazy(
694
 
    'Repository.gather_stats', 'breezy.bzr.smart.repository',
695
 
    'SmartServerRepositoryGatherStats', info='read')
696
 
request_handlers.register_lazy(
697
 
    'Repository.get_parent_map', 'breezy.bzr.smart.repository',
698
 
    'SmartServerRepositoryGetParentMap', info='read')
699
 
request_handlers.register_lazy(
700
 
    'Repository.get_revision_graph', 'breezy.bzr.smart.repository',
701
 
    'SmartServerRepositoryGetRevisionGraph', info='read')
702
 
request_handlers.register_lazy(
703
 
    'Repository.get_revision_signature_text', 'breezy.bzr.smart.repository',
704
 
    'SmartServerRepositoryGetRevisionSignatureText', info='read')
705
 
request_handlers.register_lazy(
706
 
    'Repository.has_revision', 'breezy.bzr.smart.repository',
707
 
    'SmartServerRequestHasRevision', info='read')
708
 
request_handlers.register_lazy(
709
 
    'Repository.has_signature_for_revision_id', 'breezy.bzr.smart.repository',
710
 
    'SmartServerRequestHasSignatureForRevisionId', info='read')
711
 
request_handlers.register_lazy(
712
 
    'Repository.insert_stream', 'breezy.bzr.smart.repository',
713
 
    'SmartServerRepositoryInsertStream', info='stream')
714
 
request_handlers.register_lazy(
715
 
    'Repository.insert_stream_1.19', 'breezy.bzr.smart.repository',
716
 
    'SmartServerRepositoryInsertStream_1_19', info='stream')
717
 
request_handlers.register_lazy(
718
 
    'Repository.insert_stream_locked', 'breezy.bzr.smart.repository',
719
 
    'SmartServerRepositoryInsertStreamLocked', info='stream')
720
 
request_handlers.register_lazy(
721
 
    'Repository.is_shared', 'breezy.bzr.smart.repository',
722
 
    'SmartServerRepositoryIsShared', info='read')
723
 
request_handlers.register_lazy(
724
 
    'Repository.iter_files_bytes', 'breezy.bzr.smart.repository',
725
 
    'SmartServerRepositoryIterFilesBytes', info='read')
726
 
request_handlers.register_lazy(
727
 
    'Repository.lock_write', 'breezy.bzr.smart.repository',
728
 
    'SmartServerRepositoryLockWrite', info='semi')
729
 
request_handlers.register_lazy(
730
 
    'Repository.make_working_trees', 'breezy.bzr.smart.repository',
731
 
    'SmartServerRepositoryMakeWorkingTrees', info='read')
732
 
request_handlers.register_lazy(
733
 
    'Repository.set_make_working_trees', 'breezy.bzr.smart.repository',
734
 
    'SmartServerRepositorySetMakeWorkingTrees', info='idem')
735
 
request_handlers.register_lazy(
736
 
    'Repository.unlock', 'breezy.bzr.smart.repository',
737
 
    'SmartServerRepositoryUnlock', info='semi')
738
 
request_handlers.register_lazy(
739
 
    'Repository.get_physical_lock_status', 'breezy.bzr.smart.repository',
740
 
    'SmartServerRepositoryGetPhysicalLockStatus', info='read')
741
 
request_handlers.register_lazy(
742
 
    'Repository.get_rev_id_for_revno', 'breezy.bzr.smart.repository',
743
 
    'SmartServerRepositoryGetRevIdForRevno', info='read')
744
 
request_handlers.register_lazy(
745
 
    'Repository.get_stream', 'breezy.bzr.smart.repository',
746
 
    'SmartServerRepositoryGetStream', info='read')
747
 
request_handlers.register_lazy(
748
 
    'Repository.get_stream_1.19', 'breezy.bzr.smart.repository',
749
 
    'SmartServerRepositoryGetStream_1_19', info='read')
750
 
request_handlers.register_lazy(
751
 
    'Repository.iter_revisions', 'breezy.bzr.smart.repository',
752
 
    'SmartServerRepositoryIterRevisions', info='read')
753
 
request_handlers.register_lazy(
754
 
    'Repository.pack', 'breezy.bzr.smart.repository',
755
 
    'SmartServerRepositoryPack', info='idem')
756
 
request_handlers.register_lazy(
757
 
    'Repository.start_write_group', 'breezy.bzr.smart.repository',
758
 
    'SmartServerRepositoryStartWriteGroup', info='semi')
759
 
request_handlers.register_lazy(
760
 
    'Repository.commit_write_group', 'breezy.bzr.smart.repository',
761
 
    'SmartServerRepositoryCommitWriteGroup', info='semi')
762
 
request_handlers.register_lazy(
763
 
    'Repository.abort_write_group', 'breezy.bzr.smart.repository',
764
 
    'SmartServerRepositoryAbortWriteGroup', info='semi')
765
 
request_handlers.register_lazy(
766
 
    'Repository.check_write_group', 'breezy.bzr.smart.repository',
767
 
    'SmartServerRepositoryCheckWriteGroup', info='read')
768
 
request_handlers.register_lazy(
769
 
    'Repository.reconcile', 'breezy.bzr.smart.repository',
770
 
    'SmartServerRepositoryReconcile', info='idem')
771
 
request_handlers.register_lazy(
772
 
    'Repository.tarball', 'breezy.bzr.smart.repository',
773
 
    'SmartServerRepositoryTarball', info='read')
774
 
request_handlers.register_lazy(
775
 
    'VersionedFileRepository.get_serializer_format', 'breezy.bzr.smart.repository',
776
 
    'SmartServerRepositoryGetSerializerFormat', info='read')
777
 
request_handlers.register_lazy(
778
 
    'VersionedFileRepository.get_inventories', 'breezy.bzr.smart.repository',
779
 
    'SmartServerRepositoryGetInventories', info='read')
780
 
request_handlers.register_lazy(
781
 
    'rmdir', 'breezy.bzr.smart.vfs', 'RmdirRequest', info='semivfs')
782
 
request_handlers.register_lazy(
783
 
    'stat', 'breezy.bzr.smart.vfs', 'StatRequest', info='read')
784
 
request_handlers.register_lazy(
785
 
    'Transport.is_readonly', 'breezy.bzr.smart.request',
786
 
    'SmartServerIsReadonly', info='read')
 
491
    'append', 'bzrlib.smart.vfs', 'AppendRequest')
 
492
request_handlers.register_lazy(
 
493
    'Branch.get_config_file', 'bzrlib.smart.branch',
 
494
    'SmartServerBranchGetConfigFile')
 
495
request_handlers.register_lazy(
 
496
    'Branch.get_parent', 'bzrlib.smart.branch', 'SmartServerBranchGetParent')
 
497
request_handlers.register_lazy(
 
498
    'Branch.get_tags_bytes', 'bzrlib.smart.branch',
 
499
    'SmartServerBranchGetTagsBytes')
 
500
request_handlers.register_lazy(
 
501
    'Branch.set_tags_bytes', 'bzrlib.smart.branch',
 
502
    'SmartServerBranchSetTagsBytes')
 
503
request_handlers.register_lazy(
 
504
    'Branch.get_stacked_on_url', 'bzrlib.smart.branch', 'SmartServerBranchRequestGetStackedOnURL')
 
505
request_handlers.register_lazy(
 
506
    'Branch.last_revision_info', 'bzrlib.smart.branch', 'SmartServerBranchRequestLastRevisionInfo')
 
507
request_handlers.register_lazy(
 
508
    'Branch.lock_write', 'bzrlib.smart.branch', 'SmartServerBranchRequestLockWrite')
 
509
request_handlers.register_lazy( 'Branch.revision_history',
 
510
    'bzrlib.smart.branch', 'SmartServerRequestRevisionHistory')
 
511
request_handlers.register_lazy( 'Branch.set_config_option',
 
512
    'bzrlib.smart.branch', 'SmartServerBranchRequestSetConfigOption')
 
513
request_handlers.register_lazy( 'Branch.set_last_revision',
 
514
    'bzrlib.smart.branch', 'SmartServerBranchRequestSetLastRevision')
 
515
request_handlers.register_lazy(
 
516
    'Branch.set_last_revision_info', 'bzrlib.smart.branch',
 
517
    'SmartServerBranchRequestSetLastRevisionInfo')
 
518
request_handlers.register_lazy(
 
519
    'Branch.set_last_revision_ex', 'bzrlib.smart.branch',
 
520
    'SmartServerBranchRequestSetLastRevisionEx')
 
521
request_handlers.register_lazy(
 
522
    'Branch.set_parent_location', 'bzrlib.smart.branch',
 
523
    'SmartServerBranchRequestSetParentLocation')
 
524
request_handlers.register_lazy(
 
525
    'Branch.unlock', 'bzrlib.smart.branch', 'SmartServerBranchRequestUnlock')
 
526
request_handlers.register_lazy(
 
527
    'BzrDir.cloning_metadir', 'bzrlib.smart.bzrdir',
 
528
    'SmartServerBzrDirRequestCloningMetaDir')
 
529
request_handlers.register_lazy(
 
530
    'BzrDir.create_branch', 'bzrlib.smart.bzrdir',
 
531
    'SmartServerRequestCreateBranch')
 
532
request_handlers.register_lazy(
 
533
    'BzrDir.create_repository', 'bzrlib.smart.bzrdir',
 
534
    'SmartServerRequestCreateRepository')
 
535
request_handlers.register_lazy(
 
536
    'BzrDir.find_repository', 'bzrlib.smart.bzrdir',
 
537
    'SmartServerRequestFindRepositoryV1')
 
538
request_handlers.register_lazy(
 
539
    'BzrDir.find_repositoryV2', 'bzrlib.smart.bzrdir',
 
540
    'SmartServerRequestFindRepositoryV2')
 
541
request_handlers.register_lazy(
 
542
    'BzrDir.find_repositoryV3', 'bzrlib.smart.bzrdir',
 
543
    'SmartServerRequestFindRepositoryV3')
 
544
request_handlers.register_lazy(
 
545
    'BzrDir.get_config_file', 'bzrlib.smart.bzrdir',
 
546
    'SmartServerBzrDirRequestConfigFile')
 
547
request_handlers.register_lazy(
 
548
    'BzrDirFormat.initialize', 'bzrlib.smart.bzrdir',
 
549
    'SmartServerRequestInitializeBzrDir')
 
550
request_handlers.register_lazy(
 
551
    'BzrDirFormat.initialize_ex_1.16', 'bzrlib.smart.bzrdir',
 
552
    'SmartServerRequestBzrDirInitializeEx')
 
553
request_handlers.register_lazy(
 
554
    'BzrDir.open', 'bzrlib.smart.bzrdir', 'SmartServerRequestOpenBzrDir')
 
555
request_handlers.register_lazy(
 
556
    'BzrDir.open_2.1', 'bzrlib.smart.bzrdir', 'SmartServerRequestOpenBzrDir_2_1')
 
557
request_handlers.register_lazy(
 
558
    'BzrDir.open_branch', 'bzrlib.smart.bzrdir',
 
559
    'SmartServerRequestOpenBranch')
 
560
request_handlers.register_lazy(
 
561
    'BzrDir.open_branchV2', 'bzrlib.smart.bzrdir',
 
562
    'SmartServerRequestOpenBranchV2')
 
563
request_handlers.register_lazy(
 
564
    'BzrDir.open_branchV3', 'bzrlib.smart.bzrdir',
 
565
    'SmartServerRequestOpenBranchV3')
 
566
request_handlers.register_lazy(
 
567
    'delete', 'bzrlib.smart.vfs', 'DeleteRequest')
 
568
request_handlers.register_lazy(
 
569
    'get', 'bzrlib.smart.vfs', 'GetRequest')
 
570
request_handlers.register_lazy(
 
571
    'get_bundle', 'bzrlib.smart.request', 'GetBundleRequest')
 
572
request_handlers.register_lazy(
 
573
    'has', 'bzrlib.smart.vfs', 'HasRequest')
 
574
request_handlers.register_lazy(
 
575
    'hello', 'bzrlib.smart.request', 'HelloRequest')
 
576
request_handlers.register_lazy(
 
577
    'iter_files_recursive', 'bzrlib.smart.vfs', 'IterFilesRecursiveRequest')
 
578
request_handlers.register_lazy(
 
579
    'list_dir', 'bzrlib.smart.vfs', 'ListDirRequest')
 
580
request_handlers.register_lazy(
 
581
    'mkdir', 'bzrlib.smart.vfs', 'MkdirRequest')
 
582
request_handlers.register_lazy(
 
583
    'move', 'bzrlib.smart.vfs', 'MoveRequest')
 
584
request_handlers.register_lazy(
 
585
    'put', 'bzrlib.smart.vfs', 'PutRequest')
 
586
request_handlers.register_lazy(
 
587
    'put_non_atomic', 'bzrlib.smart.vfs', 'PutNonAtomicRequest')
 
588
request_handlers.register_lazy(
 
589
    'readv', 'bzrlib.smart.vfs', 'ReadvRequest')
 
590
request_handlers.register_lazy(
 
591
    'rename', 'bzrlib.smart.vfs', 'RenameRequest')
 
592
request_handlers.register_lazy(
 
593
    'PackRepository.autopack', 'bzrlib.smart.packrepository',
 
594
    'SmartServerPackRepositoryAutopack')
 
595
request_handlers.register_lazy('Repository.gather_stats',
 
596
                               'bzrlib.smart.repository',
 
597
                               'SmartServerRepositoryGatherStats')
 
598
request_handlers.register_lazy('Repository.get_parent_map',
 
599
                               'bzrlib.smart.repository',
 
600
                               'SmartServerRepositoryGetParentMap')
 
601
request_handlers.register_lazy(
 
602
    'Repository.get_revision_graph', 'bzrlib.smart.repository', 'SmartServerRepositoryGetRevisionGraph')
 
603
request_handlers.register_lazy(
 
604
    'Repository.has_revision', 'bzrlib.smart.repository', 'SmartServerRequestHasRevision')
 
605
request_handlers.register_lazy(
 
606
    'Repository.insert_stream', 'bzrlib.smart.repository', 'SmartServerRepositoryInsertStream')
 
607
request_handlers.register_lazy(
 
608
    'Repository.insert_stream_1.19', 'bzrlib.smart.repository', 'SmartServerRepositoryInsertStream_1_19')
 
609
request_handlers.register_lazy(
 
610
    'Repository.insert_stream_locked', 'bzrlib.smart.repository', 'SmartServerRepositoryInsertStreamLocked')
 
611
request_handlers.register_lazy(
 
612
    'Repository.is_shared', 'bzrlib.smart.repository', 'SmartServerRepositoryIsShared')
 
613
request_handlers.register_lazy(
 
614
    'Repository.lock_write', 'bzrlib.smart.repository', 'SmartServerRepositoryLockWrite')
 
615
request_handlers.register_lazy(
 
616
    'Repository.set_make_working_trees', 'bzrlib.smart.repository',
 
617
    'SmartServerRepositorySetMakeWorkingTrees')
 
618
request_handlers.register_lazy(
 
619
    'Repository.unlock', 'bzrlib.smart.repository', 'SmartServerRepositoryUnlock')
 
620
request_handlers.register_lazy(
 
621
    'Repository.get_rev_id_for_revno', 'bzrlib.smart.repository',
 
622
    'SmartServerRepositoryGetRevIdForRevno')
 
623
request_handlers.register_lazy(
 
624
    'Repository.get_stream', 'bzrlib.smart.repository',
 
625
    'SmartServerRepositoryGetStream')
 
626
request_handlers.register_lazy(
 
627
    'Repository.get_stream_1.19', 'bzrlib.smart.repository',
 
628
    'SmartServerRepositoryGetStream_1_19')
 
629
request_handlers.register_lazy(
 
630
    'Repository.tarball', 'bzrlib.smart.repository',
 
631
    'SmartServerRepositoryTarball')
 
632
request_handlers.register_lazy(
 
633
    'rmdir', 'bzrlib.smart.vfs', 'RmdirRequest')
 
634
request_handlers.register_lazy(
 
635
    'stat', 'bzrlib.smart.vfs', 'StatRequest')
 
636
request_handlers.register_lazy(
 
637
    'Transport.is_readonly', 'bzrlib.smart.request', 'SmartServerIsReadonly')