Rev 6306: (jelmer) Add ``Repository.add_signature_text`` HPSS call. (Jelmer Vernooij) in file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/

Patch Queue Manager pqm at pqm.ubuntu.com
Mon Nov 28 02:13:43 UTC 2011


At file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 6306 [merge]
revision-id: pqm at pqm.ubuntu.com-20111128021343-w796php4w9lbbmq5
parent: pqm at pqm.ubuntu.com-20111125181446-mwg1kfaj9ir4r9ku
parent: jelmer at samba.org-20111125184553-329p13mm0t738wxx
committer: Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Mon 2011-11-28 02:13:43 +0000
message:
  (jelmer) Add ``Repository.add_signature_text`` HPSS call. (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/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-25 15:12:16 +0000
+++ b/bzrlib/remote.py	2011-11-25 18:45:53 +0000
@@ -2213,8 +2213,19 @@
         self.add_signature_text(revision_id, signature)
 
     def add_signature_text(self, revision_id, signature):
-        self._ensure_real()
-        return self._real_repository.add_signature_text(revision_id, signature)
+        if self._real_repository:
+            # If there is a real repository the write group will
+            # be in the real repository as well, so use that:
+            self._ensure_real()
+            return self._real_repository.add_signature_text(
+                revision_id, signature)
+        path = self.bzrdir._path_for_remote_call(self._client)
+        response, response_handler = self._call_with_body_bytes(
+            'Repository.add_signature_text', (path, revision_id),
+            signature)
+        self.refresh_data()
+        if response[0] != 'ok':
+            raise errors.UnexpectedSmartServerResponse(response)
 
     def has_signature_for_revision_id(self, revision_id):
         path = self.bzrdir._path_for_remote_call(self._client)

=== modified file 'bzrlib/smart/repository.py'
--- a/bzrlib/smart/repository.py	2011-11-25 15:12:16 +0000
+++ b/bzrlib/smart/repository.py	2011-11-25 18:45:53 +0000
@@ -934,6 +934,45 @@
         self.do_insert_stream_request(repository, resume_tokens)
 
 
+class SmartServerRepositoryAddSignatureText(SmartServerRepositoryRequest):
+    """Add a revision signature text.
+
+    New in 2.5.
+    """
+
+    def do_repository_request(self, repository, lock_token, write_group_tokens,
+            revision_id):
+        """Add a revision signature text.
+
+        :param repository: Repository to operate on
+        :param lock_token: Lock token
+        :param write_group_tokens: Write group tokens
+        :param revision_id: Revision for which to add signature
+        """
+        self._lock_token = lock_token
+        self._write_group_tokens = write_group_tokens
+        self._revision_id = revision_id
+        return None
+
+    def do_body(self, body_bytes):
+        """Add a signature text.
+
+        :param body_bytes: GPG signature text
+        :return: SuccessfulSmartServerResponse with arguments 'ok' and
+            the list of new write group tokens.
+        """
+        self._repository.lock_write(token=self._lock_token)
+        try:
+            self._repository.resume_write_group(self._write_group_tokens)
+            try:
+                self._repository.add_signature_text(self._revision_id, body_bytes)
+            finally:
+                new_write_group_tokens = self._repository.suspend_write_group()
+        finally:
+            self._repository.unlock()
+        return SuccessfulSmartServerResponse(('ok', ) + tuple(new_write_group_tokens))
+
+
 class SmartServerRepositoryStartWriteGroup(SmartServerRepositoryRequest):
     """Start a write group.
 
@@ -1024,6 +1063,7 @@
             repository.unlock()
         return SuccessfulSmartServerResponse(('ok', ))
 
+
 class SmartServerRepositoryAllRevisionIds(SmartServerRepositoryRequest):
     """Retrieve all of the revision ids in a repository.
 

=== modified file 'bzrlib/smart/request.py'
--- a/bzrlib/smart/request.py	2011-11-25 15:12:16 +0000
+++ b/bzrlib/smart/request.py	2011-11-25 18:45:53 +0000
@@ -637,6 +637,9 @@
                                'bzrlib.smart.repository',
                                'SmartServerRepositoryGetParentMap')
 request_handlers.register_lazy(
+    'Repository.add_signature_text', 'bzrlib.smart.repository',
+    'SmartServerRepositoryAddSignatureText')
+request_handlers.register_lazy(
     'Repository.get_revision_graph', 'bzrlib.smart.repository', 'SmartServerRepositoryGetRevisionGraph')
 request_handlers.register_lazy(
     'Repository.has_revision', 'bzrlib.smart.repository', 'SmartServerRequestHasRevision')

=== modified file 'bzrlib/tests/test_remote.py'
--- a/bzrlib/tests/test_remote.py	2011-11-25 15:12:16 +0000
+++ b/bzrlib/tests/test_remote.py	2011-11-25 18:45:53 +0000
@@ -2356,6 +2356,21 @@
         self.assertNotEqual(graph._parents_provider, repo)
 
 
+class TestRepositoryAddSignatureText(TestRemoteRepository):
+
+    def test_add_signature_text(self):
+        transport_path = 'quack'
+        repo, client = self.setup_fake_client_and_repository(transport_path)
+        client.add_success_response('ok')
+        self.assertIs(None,
+            repo.add_signature_text("rev1", "every bloody emperor"))
+        self.assertEqual(
+            [('call_with_body_bytes',
+              'Repository.add_signature_text', ('quack/', 'rev1', ),
+              'every bloody emperor')],
+            client._calls)
+
+
 class TestRepositoryGetParentMap(TestRemoteRepository):
 
     def test_get_parent_map_caching(self):

=== modified file 'bzrlib/tests/test_smart.py'
--- a/bzrlib/tests/test_smart.py	2011-11-25 15:12:16 +0000
+++ b/bzrlib/tests/test_smart.py	2011-11-25 18:45:53 +0000
@@ -1526,6 +1526,31 @@
             request.execute, 'subdir')
 
 
+class TestSmartServerRepositoryAddSignatureText(tests.TestCaseWithMemoryTransport):
+
+    def test_add_text(self):
+        backing = self.get_transport()
+        request = smart_repo.SmartServerRepositoryAddSignatureText(backing)
+        tree = self.make_branch_and_memory_tree('.')
+        write_token = tree.lock_write()
+        self.addCleanup(tree.unlock)
+        tree.add('')
+        tree.commit("Message", rev_id='rev1')
+        tree.branch.repository.start_write_group()
+        write_group_tokens = tree.branch.repository.suspend_write_group()
+        self.assertEqual(None, request.execute('', write_token,
+            write_group_tokens, 'rev1'))
+        response = request.do_body('somesignature')
+        self.assertTrue(response.is_successful())
+        self.assertEqual(response.args[0], 'ok')
+        write_group_tokens = response.args[1:]
+        tree.branch.repository.resume_write_group(write_group_tokens)
+        tree.branch.repository.commit_write_group()
+        tree.unlock()
+        self.assertEqual("somesignature",
+            tree.branch.repository.get_signature_text("rev1"))
+
+
 class TestSmartServerRepositoryAllRevisionIds(
     tests.TestCaseWithMemoryTransport):
 
@@ -2345,6 +2370,8 @@
             smart_dir.SmartServerRequestOpenBranchV3)
         self.assertHandlerEqual('PackRepository.autopack',
             smart_packrepo.SmartServerPackRepositoryAutopack)
+        self.assertHandlerEqual('Repository.add_signature_text',
+            smart_repo.SmartServerRepositoryAddSignatureText)
         self.assertHandlerEqual('Repository.all_revision_ids',
             smart_repo.SmartServerRepositoryAllRevisionIds)
         self.assertHandlerEqual('Repository.break_lock',

=== modified file 'doc/en/release-notes/bzr-2.5.txt'
--- a/doc/en/release-notes/bzr-2.5.txt	2011-11-25 15:12:16 +0000
+++ b/doc/en/release-notes/bzr-2.5.txt	2011-11-25 18:45:53 +0000
@@ -73,6 +73,11 @@
 * Support verifying signatures on remote repositories.
   (Jelmer Vernooij, #889694)
 
+* Fixed parsing of the timestamp given to ``commit --commit-time``. Now
+  prohibits several invalid strings, reads the correct number of seconds,
+  and gives a better error message if the time zone offset is not given.
+  (Matt Giuca, #892657)
+
 Documentation
 *************
 
@@ -114,7 +119,8 @@
   ``VersionedFileRepository.get_serializer_format``,
   ``Repository.all_revision_ids``, ``Repository.start_write_group``,
   ``Repository.commit_write_group``, ``Repository.abort_write_group``
-  and ``Repository.check_write_group``.
+  ``Repository.check_write_group`` and
+  ``Repository.add_signature_revision_text``.
   (Jelmer Vernooij)
 
 * Custom HPSS error handlers can now be installed in the smart server client




More information about the bazaar-commits mailing list