/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.163 by Andrew Bennetts
Deal with various review comments from Robert.
25
class SmartServerRequestOpenBzrDir(SmartServerRequest):
26
27
    def do(self, path):
28
        from bzrlib.bzrdir import BzrDirFormat
29
        t = self._backing_transport.clone(path)
30
        default_format = BzrDirFormat.get_default_format()
31
        real_bzrdir = default_format.open(t, _found=True)
32
        try:
33
            real_bzrdir._format.probe_transport(t)
34
        except (errors.NotBranchError, errors.UnknownFormatError):
35
            answer = 'no'
36
        else:
37
            answer = 'yes'
38
        return SmartServerResponse((answer,))
39
40
2018.5.34 by Robert Collins
Get test_remote.BasicRemoteObjectTests.test_open_remote_branch passing by implementing a remote method BzrDir.find_repository.
41
class SmartServerRequestFindRepository(SmartServerRequest):
42
43
    def do(self, path):
44
        """try to find a repository from path upwards
45
        
46
        This operates precisely like 'bzrdir.find_repository'.
47
        
48
        If a bzrdir is not present, an exception is propogated
49
        rather than 'no branch' because these are different conditions.
50
51
        :return: norepository or ok, relpath.
52
        """
53
        bzrdir = BzrDir.open_from_transport(self._backing_transport.clone(path))
54
        try:
55
            repository = bzrdir.find_repository()
56
            # the relpath of the bzrdir in the found repository gives us the 
57
            # path segments to pop-out.
58
            relpath = repository.bzrdir.root_transport.relpath(bzrdir.root_transport.base)
59
            if len(relpath):
60
                segments = ['..'] * len(relpath.split('/'))
61
            else:
62
                segments = []
2018.5.118 by Robert Collins
Fix RemoteRepositoryFormat to have appropriate rich_root_data and support_tree_reference.
63
            if repository.supports_rich_root():
2018.5.166 by Andrew Bennetts
Small changes in response to Aaron's review.
64
                rich_root = 'yes'
2018.5.118 by Robert Collins
Fix RemoteRepositoryFormat to have appropriate rich_root_data and support_tree_reference.
65
            else:
2018.5.166 by Andrew Bennetts
Small changes in response to Aaron's review.
66
                rich_root = 'no'
2018.5.138 by Robert Collins
Merge bzr.dev.
67
            if repository._format.supports_tree_reference:
2018.5.166 by Andrew Bennetts
Small changes in response to Aaron's review.
68
                tree_ref = 'yes'
2018.5.118 by Robert Collins
Fix RemoteRepositoryFormat to have appropriate rich_root_data and support_tree_reference.
69
            else:
2018.5.166 by Andrew Bennetts
Small changes in response to Aaron's review.
70
                tree_ref = 'no'
2018.5.118 by Robert Collins
Fix RemoteRepositoryFormat to have appropriate rich_root_data and support_tree_reference.
71
            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.
72
        except errors.NoRepositoryPresent:
73
            return SmartServerResponse(('norepository', ))
74
75
2018.5.42 by Robert Collins
Various hopefully improvements, but wsgi is broken, handing over to spiv :).
76
class SmartServerRequestInitializeBzrDir(SmartServerRequest):
77
78
    def do(self, path):
79
        """Initialize a bzrdir at path.
80
81
        The default format of the server is used.
82
        :return: SmartServerResponse(('ok', ))
83
        """
84
        target_transport = self._backing_transport.clone(path)
85
        BzrDirFormat.get_default_format().initialize_on_transport(target_transport)
86
        return SmartServerResponse(('ok', ))
87
88
2018.6.1 by Robert Collins
Implement a BzrDir.open_branch smart server method for opening a branch without VFS.
89
class SmartServerRequestOpenBranch(SmartServerRequest):
90
91
    def do(self, path):
92
        """try to open a branch at path and return ok/nobranch.
93
        
94
        If a bzrdir is not present, an exception is propogated
95
        rather than 'no branch' because these are different conditions.
96
        """
2018.5.34 by Robert Collins
Get test_remote.BasicRemoteObjectTests.test_open_remote_branch passing by implementing a remote method BzrDir.find_repository.
97
        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.
98
        try:
99
            reference_url = bzrdir.get_branch_reference()
100
            if reference_url is None:
101
                return SmartServerResponse(('ok', ''))
102
            else:
103
                return SmartServerResponse(('ok', reference_url))
104
        except errors.NotBranchError:
105
            return SmartServerResponse(('nobranch', ))