/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 = []
47
            return SmartServerResponse(('ok', '/'.join(segments)))
48
        except errors.NoRepositoryPresent:
49
            return SmartServerResponse(('norepository', ))
50
51
2018.5.42 by Robert Collins
Various hopefully improvements, but wsgi is broken, handing over to spiv :).
52
class SmartServerRequestInitializeBzrDir(SmartServerRequest):
53
54
    def do(self, path):
55
        """Initialize a bzrdir at path.
56
57
        The default format of the server is used.
58
        :return: SmartServerResponse(('ok', ))
59
        """
60
        target_transport = self._backing_transport.clone(path)
61
        BzrDirFormat.get_default_format().initialize_on_transport(target_transport)
62
        return SmartServerResponse(('ok', ))
63
64
2018.6.1 by Robert Collins
Implement a BzrDir.open_branch smart server method for opening a branch without VFS.
65
class SmartServerRequestOpenBranch(SmartServerRequest):
66
67
    def do(self, path):
68
        """try to open a branch at path and return ok/nobranch.
69
        
70
        If a bzrdir is not present, an exception is propogated
71
        rather than 'no branch' because these are different conditions.
72
        """
2018.5.34 by Robert Collins
Get test_remote.BasicRemoteObjectTests.test_open_remote_branch passing by implementing a remote method BzrDir.find_repository.
73
        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.
74
        try:
75
            reference_url = bzrdir.get_branch_reference()
76
            if reference_url is None:
77
                return SmartServerResponse(('ok', ''))
78
            else:
79
                return SmartServerResponse(('ok', reference_url))
80
        except errors.NotBranchError:
81
            return SmartServerResponse(('nobranch', ))