~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/smart/bzrdir.py

  • Committer: John Ferlito
  • Date: 2009-05-25 10:59:42 UTC
  • mto: (4665.4.1 ppa-doc)
  • mto: This revision was merged to the branch mainline in revision 4693.
  • Revision ID: johnf@inodes.org-20090525105942-5xkcbe37m1u5lp5z
Update packaging scripts to make deployment a bit easier
Update documentation for deploying to PPA

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
"""Server-side bzrdir related request implmentations."""
18
18
 
19
19
 
20
 
from bzrlib import branch, errors, repository, urlutils
 
20
from bzrlib import branch, errors, repository
21
21
from bzrlib.bzrdir import (
22
22
    BzrDir,
23
23
    BzrDirFormat,
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):
379
354
    def do(self, bzrdir_network_name, path, use_existing_dir, create_prefix,
380
355
        force_new_repo, stacked_on, stack_on_pwd, repo_format_name,
381
356
        make_working_trees, shared_repo):
382
 
        """Initialize a bzrdir at path as per
383
 
        BzrDirFormat.initialize_on_transport_ex.
384
 
 
385
 
        New in 1.16.  (Replaces BzrDirFormat.initialize_ex verb from 1.15).
 
357
        """Initialize a bzrdir at path as per BzrDirFormat.initialize_ex
386
358
 
387
359
        :return: return SuccessfulSmartServerResponse((repo_path, rich_root,
388
360
            tree_ref, external_lookup, repo_network_name,
435
407
            repo.unlock()
436
408
        final_stack = final_stack or ''
437
409
        final_stack_pwd = final_stack_pwd or ''
438
 
 
439
 
        # We want this to be relative to the bzrdir.
440
 
        if final_stack_pwd:
441
 
            final_stack_pwd = urlutils.relative_url(
442
 
                target_transport.base, final_stack_pwd)
443
 
 
444
 
        # Can't meaningfully return a root path.
445
 
        if final_stack.startswith('/'):
446
 
            client_path = self._root_client_path + final_stack[1:]
447
 
            final_stack = urlutils.relative_url(
448
 
                self._root_client_path, client_path)
449
 
            final_stack_pwd = '.'
450
 
 
451
410
        return SuccessfulSmartServerResponse((repo_path, rich_root, tree_ref,
452
411
            external_lookup, repo_name, repo_bzrdir_name,
453
412
            bzrdir._format.network_name(),
465
424
                return SuccessfulSmartServerResponse(('ok', ''))
466
425
            else:
467
426
                return SuccessfulSmartServerResponse(('ok', reference_url))
468
 
        except errors.NotBranchError, e:
469
 
            return FailedSmartServerResponse(('nobranch',))
 
427
        except errors.NotBranchError:
 
428
            return FailedSmartServerResponse(('nobranch', ))
470
429
 
471
430
 
472
431
class SmartServerRequestOpenBranchV2(SmartServerRequestBzrDir):
481
440
                return SuccessfulSmartServerResponse(('branch', format))
482
441
            else:
483
442
                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
 
 
 
443
        except errors.NotBranchError:
 
444
            return FailedSmartServerResponse(('nobranch', ))