1
# Copyright (C) 2006 Canonical Ltd
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.
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.
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
17
"""Server-side repository related request implmentations."""
20
from bzrlib import errors
21
from bzrlib.bzrdir import BzrDir
22
from bzrlib.smart.request import SmartServerRequest, SmartServerResponse
25
class SmartServerRepositoryRequest(SmartServerRequest):
26
"""Common base class for Repository requests."""
28
def do(self, path, *args):
29
"""Execute a repository request.
31
The repository must be at the exact path - no searching is done.
33
The actual logic is delegated to self.do_repository_request.
35
:param path: The path for the repository.
36
:return: A smart server from self.do_repository_request().
38
transport = self._backing_transport.clone(path)
39
bzrdir = BzrDir.open_from_transport(transport)
40
repository = bzrdir.open_repository()
41
return self.do_repository_request(repository, *args)
44
class SmartServerRequestHasRevision(SmartServerRepositoryRequest):
46
def do_repository_request(self, repository, revision_id):
47
"""Return ok if a specific revision is in the repository at path.
49
:param repository: The repository to query in.
50
:param revision_id: The utf8 encoded revision_id to lookup.
51
:return: A smart server response of ('ok', ) if the revision is
54
decoded_revision_id = revision_id.decode('utf8')
55
if repository.has_revision(decoded_revision_id):
56
return SmartServerResponse(('ok', ))
58
return SmartServerResponse(('no', ))
61
class SmartServerRepositoryIsShared(SmartServerRepositoryRequest):
63
def do_repository_request(self, repository):
64
"""Return the result of repository.is_shared().
66
:param repository: The repository to query in.
67
:return: A smart server response of ('yes', ) if the repository is
68
shared, and ('no', ) if it is not.
70
if repository.is_shared():
71
return SmartServerResponse(('yes', ))
73
return SmartServerResponse(('no', ))