/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2018.6.1 by Robert Collins
Implement a BzrDir.open_branch smart server method for opening a branch without VFS.
1
# Copyright (C) 2006 Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
"""Server-side bzrdir related request implmentations."""
18
19
20
from bzrlib import errors
2018.5.42 by Robert Collins
Various hopefully improvements, but wsgi is broken, handing over to spiv :).
21
from bzrlib.bzrdir import BzrDir, BzrDirFormat
2018.6.1 by Robert Collins
Implement a BzrDir.open_branch smart server method for opening a branch without VFS.
22
from bzrlib.smart.request import SmartServerRequest, SmartServerResponse
23
24
2018.5.34 by Robert Collins
Get test_remote.BasicRemoteObjectTests.test_open_remote_branch passing by implementing a remote method BzrDir.find_repository.
25
class SmartServerRequestFindRepository(SmartServerRequest):
26
27
    def do(self, path):
28
        """try to find a repository from path upwards
29
        
30
        This operates precisely like 'bzrdir.find_repository'.
31
        
32
        If a bzrdir is not present, an exception is propogated
33
        rather than 'no branch' because these are different conditions.
34
35
        :return: norepository or ok, relpath.
36
        """
37
        bzrdir = BzrDir.open_from_transport(self._backing_transport.clone(path))
38
        try:
39
            repository = bzrdir.find_repository()
40
            # the relpath of the bzrdir in the found repository gives us the 
41
            # path segments to pop-out.
42
            relpath = repository.bzrdir.root_transport.relpath(bzrdir.root_transport.base)
43
            if len(relpath):
44
                segments = ['..'] * len(relpath.split('/'))
45
            else:
46
                segments = []
2018.5.118 by Robert Collins
Fix RemoteRepositoryFormat to have appropriate rich_root_data and support_tree_reference.
47
            if repository.supports_rich_root():
48
                rich_root = 'True'
49
            else:
50
                rich_root = 'False'
51
            if repository._format.support_tree_reference:
52
                tree_ref = 'True'
53
            else:
54
                tree_ref = 'False'
55
            return SmartServerResponse(('ok', '/'.join(segments), rich_root, tree_ref))
2018.5.34 by Robert Collins
Get test_remote.BasicRemoteObjectTests.test_open_remote_branch passing by implementing a remote method BzrDir.find_repository.
56
        except errors.NoRepositoryPresent:
57
            return SmartServerResponse(('norepository', ))
58
59
2018.5.42 by Robert Collins
Various hopefully improvements, but wsgi is broken, handing over to spiv :).
60
class SmartServerRequestInitializeBzrDir(SmartServerRequest):
61
62
    def do(self, path):
63
        """Initialize a bzrdir at path.
64
65
        The default format of the server is used.
66
        :return: SmartServerResponse(('ok', ))
67
        """
68
        target_transport = self._backing_transport.clone(path)
69
        BzrDirFormat.get_default_format().initialize_on_transport(target_transport)
70
        return SmartServerResponse(('ok', ))
71
72
2018.6.1 by Robert Collins
Implement a BzrDir.open_branch smart server method for opening a branch without VFS.
73
class SmartServerRequestOpenBranch(SmartServerRequest):
74
75
    def do(self, path):
76
        """try to open a branch at path and return ok/nobranch.
77
        
78
        If a bzrdir is not present, an exception is propogated
79
        rather than 'no branch' because these are different conditions.
80
        """
2018.5.34 by Robert Collins
Get test_remote.BasicRemoteObjectTests.test_open_remote_branch passing by implementing a remote method BzrDir.find_repository.
81
        bzrdir = BzrDir.open_from_transport(self._backing_transport.clone(path))
2018.6.1 by Robert Collins
Implement a BzrDir.open_branch smart server method for opening a branch without VFS.
82
        try:
83
            reference_url = bzrdir.get_branch_reference()
84
            if reference_url is None:
85
                return SmartServerResponse(('ok', ''))
86
            else:
87
                return SmartServerResponse(('ok', reference_url))
88
        except errors.NotBranchError:
89
            return SmartServerResponse(('nobranch', ))