Rev 6316: (jelmer) Add HPSS call for ``Repository.get_signature_text``. (Jelmer in file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/
Patch Queue Manager
pqm at pqm.ubuntu.com
Mon Nov 28 15:14:49 UTC 2011
At file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 6316 [merge]
revision-id: pqm at pqm.ubuntu.com-20111128151448-7n0jzgkwjlvxvao6
parent: pqm at pqm.ubuntu.com-20111128141956-yl7aefec4py39k12
parent: jelmer at samba.org-20111128141856-lwh2exm44dv21f2x
committer: Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Mon 2011-11-28 15:14:48 +0000
message:
(jelmer) Add HPSS call for ``Repository.get_signature_text``. (Jelmer
Vernooij)
modified:
bzrlib/remote.py remote.py-20060720103555-yeeg2x51vn0rbtdp-1
bzrlib/smart/repository.py repository.py-20061128022038-vr5wy5bubyb8xttk-1
bzrlib/smart/request.py request.py-20061108095550-gunadhxmzkdjfeek-1
bzrlib/tests/blackbox/test_sign_my_commits.py test_sign_my_commits.py-20060215152957-270238a1ffacc841
bzrlib/tests/per_repository/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
bzrlib/tests/test_remote.py test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
bzrlib/tests/test_smart.py test_smart.py-20061122024551-ol0l0o0oofsu9b3t-2
doc/en/release-notes/bzr-2.5.txt bzr2.5.txt-20110708125756-587p0hpw7oke4h05-1
=== modified file 'bzrlib/remote.py'
--- a/bzrlib/remote.py 2011-11-28 13:05:15 +0000
+++ b/bzrlib/remote.py 2011-11-28 14:18:56 +0000
@@ -2054,8 +2054,24 @@
@needs_read_lock
def get_signature_text(self, revision_id):
- self._ensure_real()
- return self._real_repository.get_signature_text(revision_id)
+ path = self.bzrdir._path_for_remote_call(self._client)
+ try:
+ response_tuple, response_handler = self._call_expecting_body(
+ 'Repository.get_revision_signature_text', path, revision_id)
+ except errors.UnknownSmartMethod:
+ self._ensure_real()
+ return self._real_repository.get_signature_text(revision_id)
+ except errors.NoSuchRevision, err:
+ for fallback in self._fallback_repositories:
+ try:
+ return fallback.get_signature_text(revision_id)
+ except errors.NoSuchRevision:
+ pass
+ raise err
+ else:
+ if response_tuple[0] != 'ok':
+ raise errors.UnexpectedSmartServerResponse(response_tuple)
+ return response_handler.read_body_bytes()
@needs_read_lock
def _get_inventory_xml(self, revision_id):
@@ -2338,7 +2354,12 @@
revision_id)
if response[0] not in ('yes', 'no'):
raise SmartProtocolError('unexpected response code %s' % (response,))
- return (response[0] == 'yes')
+ if response[0] == 'yes':
+ return True
+ for fallback in self._fallback_repositories:
+ if fallback.has_signature_for_revision_id(revision_id):
+ return True
+ return False
@needs_read_lock
def verify_revision_signature(self, revision_id, gpg_strategy):
@@ -2545,9 +2566,9 @@
def _real_stream(self, repo, search):
"""Get a stream for search from repo.
-
- This never called RemoteStreamSource.get_stream, and is a heler
- for RemoteStreamSource._get_stream to allow getting a stream
+
+ This never called RemoteStreamSource.get_stream, and is a helper
+ for RemoteStreamSource._get_stream to allow getting a stream
reliably whether fallback back because of old servers or trying
to stream from a non-RemoteRepository (which the stacked support
code will do).
@@ -3729,7 +3750,6 @@
return self._bzrdir._real_bzrdir
-
def _extract_tar(tar, to_dir):
"""Extract all the contents of a tarfile object.
=== modified file 'bzrlib/smart/repository.py'
--- a/bzrlib/smart/repository.py 2011-11-28 11:34:18 +0000
+++ b/bzrlib/smart/repository.py 2011-11-28 14:18:56 +0000
@@ -436,6 +436,28 @@
return SuccessfulSmartServerResponse(('ok', ), body)
+class SmartServerRepositoryGetRevisionSignatureText(
+ SmartServerRepositoryRequest):
+ """Return the signature text of a revision.
+
+ New in 2.5.
+ """
+
+ def do_repository_request(self, repository, revision_id):
+ """Return the result of repository.get_signature_text().
+
+ :param repository: The repository to query in.
+ :return: A smart server response of with the signature text as
+ body.
+ """
+ try:
+ text = repository.get_signature_text(revision_id)
+ except errors.NoSuchRevision, err:
+ return FailedSmartServerResponse(
+ ('nosuchrevision', err.revision))
+ return SuccessfulSmartServerResponse(('ok', ), text)
+
+
class SmartServerRepositoryIsShared(SmartServerRepositoryRequest):
def do_repository_request(self, repository):
=== modified file 'bzrlib/smart/request.py'
--- a/bzrlib/smart/request.py 2011-11-28 11:34:18 +0000
+++ b/bzrlib/smart/request.py 2011-11-28 14:18:56 +0000
@@ -642,6 +642,9 @@
request_handlers.register_lazy(
'Repository.get_revision_graph', 'bzrlib.smart.repository', 'SmartServerRepositoryGetRevisionGraph')
request_handlers.register_lazy(
+ 'Repository.get_revision_signature_text', 'bzrlib.smart.repository',
+ 'SmartServerRepositoryGetRevisionSignatureText')
+request_handlers.register_lazy(
'Repository.has_revision', 'bzrlib.smart.repository', 'SmartServerRequestHasRevision')
request_handlers.register_lazy(
'Repository.has_signature_for_revision_id', 'bzrlib.smart.repository',
=== modified file 'bzrlib/tests/blackbox/test_sign_my_commits.py'
--- a/bzrlib/tests/blackbox/test_sign_my_commits.py 2011-11-28 13:05:15 +0000
+++ b/bzrlib/tests/blackbox/test_sign_my_commits.py 2011-11-28 14:18:56 +0000
@@ -186,6 +186,6 @@
# The number of readv requests seems to vary depending on the generated
# repository and how well it compresses, so allow for a bit of
# variation:
- if len(self.hpss_calls) not in (20, 21):
- self.fail("Incorrect length: wanted 20 or 21, got %d for %r" % (
+ if len(self.hpss_calls) not in (18, 19):
+ self.fail("Incorrect length: wanted 18 or 19, got %d for %r" % (
len(self.hpss_calls), self.hpss_calls))
=== modified file 'bzrlib/tests/per_repository/test_repository.py'
--- a/bzrlib/tests/per_repository/test_repository.py 2011-11-17 16:10:15 +0000
+++ b/bzrlib/tests/per_repository/test_repository.py 2011-11-28 11:44:21 +0000
@@ -552,13 +552,15 @@
b = builder.get_branch()
b.lock_write()
self.addCleanup(b.unlock)
- b.repository.start_write_group()
- self.addCleanup(b.repository.abort_write_group)
if b.repository._format.supports_revision_signatures:
+ b.repository.start_write_group()
b.repository.add_signature_text('A', 'This might be a signature')
+ b.repository.commit_write_group()
self.assertEqual('This might be a signature',
b.repository.get_signature_text('A'))
else:
+ b.repository.start_write_group()
+ self.addCleanup(b.repository.abort_write_group)
self.assertRaises(errors.UnsupportedOperation,
b.repository.add_signature_text, 'A',
'This might be a signature')
=== modified file 'bzrlib/tests/test_remote.py'
--- a/bzrlib/tests/test_remote.py 2011-11-28 13:05:15 +0000
+++ b/bzrlib/tests/test_remote.py 2011-11-28 14:18:56 +0000
@@ -2372,6 +2372,32 @@
client._calls)
+class TestRepositoryGetRevisionSignatureText(TestRemoteRepository):
+
+ def test_text(self):
+ # ('ok',), body with signature text
+ transport_path = 'quack'
+ repo, client = self.setup_fake_client_and_repository(transport_path)
+ client.add_success_response_with_body(
+ 'THETEXT', 'ok')
+ self.assertEquals("THETEXT", repo.get_signature_text("revid"))
+ self.assertEqual(
+ [('call_expecting_body', 'Repository.get_revision_signature_text',
+ ('quack/', 'revid'))],
+ client._calls)
+
+ def test_no_signature(self):
+ transport_path = 'quick'
+ repo, client = self.setup_fake_client_and_repository(transport_path)
+ client.add_error_response('nosuchrevision', 'unknown')
+ self.assertRaises(errors.NoSuchRevision, repo.get_signature_text,
+ "unknown")
+ self.assertEqual(
+ [('call_expecting_body', 'Repository.get_revision_signature_text',
+ ('quick/', 'unknown'))],
+ client._calls)
+
+
class TestRepositoryGetGraph(TestRemoteRepository):
def test_get_graph(self):
=== modified file 'bzrlib/tests/test_smart.py'
--- a/bzrlib/tests/test_smart.py 2011-11-28 11:34:18 +0000
+++ b/bzrlib/tests/test_smart.py 2011-11-28 14:18:56 +0000
@@ -46,6 +46,7 @@
server,
vfs,
)
+from bzrlib.testament import Testament
from bzrlib.tests import test_server
from bzrlib.transport import (
chroot,
@@ -1984,6 +1985,30 @@
request.execute('', ))
+class TestSmartServerRepositoryGetRevisionSignatureText(
+ tests.TestCaseWithMemoryTransport):
+
+ def test_get_signature(self):
+ backing = self.get_transport()
+ request = smart_repo.SmartServerRepositoryGetRevisionSignatureText(
+ backing)
+ bb = self.make_branch_builder('.')
+ bb.build_commit(rev_id='A')
+ repo = bb.get_branch().repository
+ strategy = gpg.LoopbackGPGStrategy(None)
+ self.addCleanup(repo.lock_write().unlock)
+ repo.start_write_group()
+ repo.sign_revision('A', strategy)
+ repo.commit_write_group()
+ expected_body = (
+ '-----BEGIN PSEUDO-SIGNED CONTENT-----\n' +
+ Testament.from_revision(repo, 'A').as_short_text() +
+ '-----END PSEUDO-SIGNED CONTENT-----\n')
+ self.assertEqual(
+ smart_req.SmartServerResponse(('ok', ), expected_body),
+ request.execute('', 'A'))
+
+
class TestSmartServerRepositoryMakeWorkingTrees(
tests.TestCaseWithMemoryTransport):
@@ -2431,6 +2456,8 @@
smart_repo.SmartServerRepositoryGetRevIdForRevno)
self.assertHandlerEqual('Repository.get_revision_graph',
smart_repo.SmartServerRepositoryGetRevisionGraph)
+ self.assertHandlerEqual('Repository.get_revision_signature_text',
+ smart_repo.SmartServerRepositoryGetRevisionSignatureText)
self.assertHandlerEqual('Repository.get_stream',
smart_repo.SmartServerRepositoryGetStream)
self.assertHandlerEqual('Repository.get_stream_1.19',
=== modified file 'doc/en/release-notes/bzr-2.5.txt'
--- a/doc/en/release-notes/bzr-2.5.txt 2011-11-28 13:05:15 +0000
+++ b/doc/en/release-notes/bzr-2.5.txt 2011-11-28 14:18:56 +0000
@@ -128,8 +128,9 @@
``VersionedFileRepository.get_serializer_format``,
``Repository.all_revision_ids``, ``Repository.start_write_group``,
``Repository.commit_write_group``, ``Repository.abort_write_group``
- ``Repository.iter_revisions``, ``Repository.check_write_group`` and
- ``Repository.add_signature_revision_text``.
+ ``Repository.check_write_group``, ``Repository.iter_revisions``,
+ ``Repository.add_signature_revision_text`` and
+ ``Repository.get_revision_signature_text``.
(Jelmer Vernooij)
* Add HPSS call for ``Repository.pack``. (Jelmer Vernooij, #894461)
More information about the bazaar-commits
mailing list