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 SmartServerRequestHasRevision(SmartServerRequest):
27
def do(self, path, revision_id):
28
"""Return ok if a specific revision is in the repository at path.
30
The repository must be at the exact path - no searching is done.
32
:param path: The path for the repository.
33
:param revision_id: The utf8 encoded revision_id to lookup.
34
:return: A smart server response of ('ok', ) if the revision is
37
transport = self._backing_transport.clone(path)
38
bzrdir = BzrDir.open_from_transport(transport)
39
repository = bzrdir.open_repository()
40
decoded_revision_id = revision_id.decode('utf8')
41
if repository.has_revision(decoded_revision_id):
42
return SmartServerResponse(('ok', ))
44
return SmartServerResponse(('no', ))