/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/bzrdir.py

  • Committer: John Arbash Meinel
  • Date: 2009-06-18 18:18:36 UTC
  • mto: This revision was merged to the branch mainline in revision 4461.
  • Revision ID: john@arbash-meinel.com-20090618181836-biodfkat9a8eyzjz
The new add_inventory_by_delta is returning a CHKInventory when mapping from NULL
Which is completely valid, but 'broke' one of the tests.
So to fix it, changed the test to use CHKInventories on both sides, and add an __eq__
member. The nice thing is that CHKInventory.__eq__ is fairly cheap, since it only
has to check the root keys.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2006 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
34
34
class SmartServerRequestOpenBzrDir(SmartServerRequest):
35
35
 
36
36
    def do(self, path):
 
37
        from bzrlib.bzrdir import BzrDirFormat
37
38
        try:
38
39
            t = self.transport_from_client_path(path)
39
40
        except errors.PathNotChild:
55
56
        return SuccessfulSmartServerResponse((answer,))
56
57
 
57
58
 
58
 
class SmartServerRequestOpenBzrDir_2_1(SmartServerRequest):
59
 
 
60
 
    def do(self, path):
61
 
        """Is there a BzrDir present, and if so does it have a working tree?
62
 
 
63
 
        New in 2.1.
64
 
        """
65
 
        try:
66
 
            t = self.transport_from_client_path(path)
67
 
        except errors.PathNotChild:
68
 
            # The client is trying to ask about a path that they have no access
69
 
            # to.
70
 
            return SuccessfulSmartServerResponse(('no',))
71
 
        try:
72
 
            bd = BzrDir.open_from_transport(t)
73
 
        except errors.NotBranchError:
74
 
            answer = ('no',)
75
 
        else:
76
 
            answer = ('yes',)
77
 
            if bd.has_workingtree():
78
 
                answer += ('yes',)
79
 
            else:
80
 
                answer += ('no',)
81
 
        return SuccessfulSmartServerResponse(answer)
82
 
 
83
 
 
84
59
class SmartServerRequestBzrDir(SmartServerRequest):
85
60
 
86
61
    def do(self, path, *args):
88
63
        try:
89
64
            self._bzrdir = BzrDir.open_from_transport(
90
65
                self.transport_from_client_path(path))
91
 
        except errors.NotBranchError, e:
92
 
            return FailedSmartServerResponse(('nobranch',))
 
66
        except errors.NotBranchError:
 
67
            return FailedSmartServerResponse(('nobranch', ))
93
68
        return self.do_bzrdir_request(*args)
94
69
 
95
70
    def _boolean_to_yes_no(self, a_boolean):
110
85
        """Get the relative path for repository from current_transport."""
111
86
        # the relpath of the bzrdir in the found repository gives us the
112
87
        # path segments to pop-out.
113
 
        relpath = repository.user_transport.relpath(
 
88
        relpath = repository.bzrdir.root_transport.relpath(
114
89
            current_transport.base)
115
90
        if len(relpath):
116
91
            segments = ['..'] * len(relpath.split('/'))
465
440
                return SuccessfulSmartServerResponse(('ok', ''))
466
441
            else:
467
442
                return SuccessfulSmartServerResponse(('ok', reference_url))
468
 
        except errors.NotBranchError, e:
469
 
            return FailedSmartServerResponse(('nobranch',))
 
443
        except errors.NotBranchError:
 
444
            return FailedSmartServerResponse(('nobranch', ))
470
445
 
471
446
 
472
447
class SmartServerRequestOpenBranchV2(SmartServerRequestBzrDir):
481
456
                return SuccessfulSmartServerResponse(('branch', format))
482
457
            else:
483
458
                return SuccessfulSmartServerResponse(('ref', reference_url))
484
 
        except errors.NotBranchError, e:
485
 
            return FailedSmartServerResponse(('nobranch',))
486
 
 
487
 
 
488
 
class SmartServerRequestOpenBranchV3(SmartServerRequestBzrDir):
489
 
 
490
 
    def do_bzrdir_request(self):
491
 
        """Open a branch at path and return the reference or format.
492
 
        
493
 
        This version introduced in 2.1.
494
 
 
495
 
        Differences to SmartServerRequestOpenBranchV2:
496
 
          * can return 2-element ('nobranch', extra), where 'extra' is a string
497
 
            with an explanation like 'location is a repository'.  Previously
498
 
            a 'nobranch' response would never have more than one element.
499
 
        """
500
 
        try:
501
 
            reference_url = self._bzrdir.get_branch_reference()
502
 
            if reference_url is None:
503
 
                br = self._bzrdir.open_branch(ignore_fallbacks=True)
504
 
                format = br._format.network_name()
505
 
                return SuccessfulSmartServerResponse(('branch', format))
506
 
            else:
507
 
                return SuccessfulSmartServerResponse(('ref', reference_url))
508
 
        except errors.NotBranchError, e:
509
 
            # Stringify the exception so that its .detail attribute will be
510
 
            # filled out.
511
 
            str(e)
512
 
            resp = ('nobranch',)
513
 
            detail = e.detail
514
 
            if detail:
515
 
                if detail.startswith(': '):
516
 
                    detail = detail[2:]
517
 
                resp += (detail,)
518
 
            return FailedSmartServerResponse(resp)
519
 
 
 
459
        except errors.NotBranchError:
 
460
            return FailedSmartServerResponse(('nobranch', ))