Rev 3205: Fix error handling in insert_data_stream (Lukas Lalinsky) in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Wed Jan 30 06:11:52 GMT 2008


At file:///home/pqm/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 3205
revision-id:pqm at pqm.ubuntu.com-20080130061143-ek1afpxqoq89jbp6
parent: pqm at pqm.ubuntu.com-20080129045844-u41ywp910i6jv8bz
parent: ian.clatworthy at internode.on.net-20080130043452-rs3cakuycsw5oz5w
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Wed 2008-01-30 06:11:43 +0000
message:
  Fix error handling in insert_data_stream (Lukas Lalinsky)
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/graph.py                graph_walker.py-20070525030359-y852guab65d4wtn0-1
  bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
  bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
  bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
    ------------------------------------------------------------
    revno: 3204.1.2
    revision-id:ian.clatworthy at internode.on.net-20080130043452-rs3cakuycsw5oz5w
    parent: ian.clatworthy at internode.on.net-20080129065651-a333d6eqoxt5bu69
    committer: Ian Clatworthy <ian.clatworthy at internode.on.net>
    branch nick: ianc-integration
    timestamp: Wed 2008-01-30 14:34:52 +1000
    message:
      Fix error handling in insert_data_stream (Lukas Lalinsky)
    modified:
      bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
    ------------------------------------------------------------
    revno: 3204.1.1
    revision-id:ian.clatworthy at internode.on.net-20080129065651-a333d6eqoxt5bu69
    parent: pqm at pqm.ubuntu.com-20080129045844-u41ywp910i6jv8bz
    parent: lalinsky at gmail.com-20080115162718-2o7n2budp0udkgi1
    committer: Ian Clatworthy <ian.clatworthy at internode.on.net>
    branch nick: ianc-integration
    timestamp: Tue 2008-01-29 16:56:51 +1000
    message:
      Fix error handling in insert_data_stream (Lukas Lalinsky)
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/graph.py                graph_walker.py-20070525030359-y852guab65d4wtn0-1
      bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
      bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
      bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
    ------------------------------------------------------------
    revno: 3184.2.2
    revision-id:lalinsky at gmail.com-20080115162718-2o7n2budp0udkgi1
    parent: lalinsky at gmail.com-20080115162643-2pwhszuytol39cd7
    committer: Lukáš Lalinský <lalinsky at gmail.com>
    branch nick: insert_data_stream
    timestamp: Tue 2008-01-15 17:27:18 +0100
    message:
      Remove duplicate HeadsCache
    modified:
      bzrlib/graph.py                graph_walker.py-20070525030359-y852guab65d4wtn0-1
    ------------------------------------------------------------
    revno: 3184.2.1
    revision-id:lalinsky at gmail.com-20080115162643-2pwhszuytol39cd7
    parent: pqm at pqm.ubuntu.com-20080115141934-3vujw0up5rc8e0gn
    committer: Lukáš Lalinský <lalinsky at gmail.com>
    branch nick: insert_data_stream
    timestamp: Tue 2008-01-15 17:26:43 +0100
    message:
      Fix handling of some error cases in insert_data_stream
      
       - It always fails for pack and remote repositories, because they return parents as tuples and bdecode returns lists.
       - It tries to use undefined RepositoryDataStreamError in case of invalid stream item key.
    modified:
      bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
      bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
      bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
=== modified file 'NEWS'
--- a/NEWS	2008-01-29 03:22:52 +0000
+++ b/NEWS	2008-01-29 06:56:51 +0000
@@ -89,6 +89,8 @@
       repository types. This will enable faster missing revision discovery with
       bzr+ssh. (Robert Collins)
 
+    * Fix error handling in Repository.insert_data_stream. (Lukas Lalinsky)
+
     * ``InterRepository.missing_revision_ids`` is now deprecated in favour of
       ``InterRepository.search_missing_revision_ids`` which returns a 
       ``bzrlib.graph.SearchResult`` suitable for making requests from the smart

=== modified file 'bzrlib/graph.py'
--- a/bzrlib/graph.py	2008-01-17 22:41:32 +0000
+++ b/bzrlib/graph.py	2008-01-29 06:56:51 +0000
@@ -473,30 +473,6 @@
             return set(heads)
 
 
-class HeadsCache(object):
-    """A cache of results for graph heads calls."""
-
-    def __init__(self, graph):
-        self.graph = graph
-        self._heads = {}
-
-    def heads(self, keys):
-        """Return the heads of keys.
-
-        :see also: Graph.heads.
-        :param keys: The keys to calculate heads for.
-        :return: A set containing the heads, which may be mutated without
-            affecting future lookups.
-        """
-        keys = frozenset(keys)
-        try:
-            return set(self._heads[keys])
-        except KeyError:
-            heads = self.graph.heads(keys)
-            self._heads[keys] = heads
-            return set(heads)
-
-
 class _BreadthFirstSearcher(object):
     """Parallel search breadth-first the ancestry of revisions.
 

=== modified file 'bzrlib/knit.py'
--- a/bzrlib/knit.py	2008-01-11 07:06:36 +0000
+++ b/bzrlib/knit.py	2008-01-15 16:26:43 +0000
@@ -748,7 +748,7 @@
             if self.has_version(version_id):
                 # First check: the list of parents.
                 my_parents = self.get_parents_with_ghosts(version_id)
-                if my_parents != parents:
+                if tuple(my_parents) != tuple(parents):
                     # XXX: KnitCorrupt is not quite the right exception here.
                     raise KnitCorrupt(
                         self.filename,

=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py	2008-01-29 03:22:52 +0000
+++ b/bzrlib/repository.py	2008-01-29 06:56:51 +0000
@@ -841,7 +841,7 @@
                 knit = self._revision_store.get_signature_file(
                     self.get_transaction())
             else:
-                raise RepositoryDataStreamError(
+                raise errors.RepositoryDataStreamError(
                     "Unrecognised data stream key '%s'" % (item_key,))
             decoded_list = bencode.bdecode(bytes)
             format = decoded_list.pop(0)

=== modified file 'bzrlib/tests/repository_implementations/test_repository.py'
--- a/bzrlib/tests/repository_implementations/test_repository.py	2008-01-17 05:30:53 +0000
+++ b/bzrlib/tests/repository_implementations/test_repository.py	2008-01-30 04:34:52 +0000
@@ -460,10 +460,10 @@
         tree.commit('message', rev_id='rev_id')
         source_repo = tree.branch.repository
         dest_repo = self.make_repository('dest')
+        search = dest_repo.search_missing_revision_ids(source_repo,
+            revision_id='rev_id')
         try:
-            stream = source_repo.get_data_stream_for_search(
-                dest_repo.search_missing_revision_ids(source_repo,
-                    revision_id='rev_id'))
+            stream = source_repo.get_data_stream_for_search(search)
         except NotImplementedError, e:
             # Not all repositories support streaming.
             self.assertContainsRe(str(e), 'get_data_stream_for_search')
@@ -485,6 +485,26 @@
         dest_repo = dest_repo.bzrdir.open_repository()
         self.assertTrue(dest_repo.has_revision('rev_id'))
 
+        # insert the same data stream again, should be no-op
+        stream = source_repo.get_data_stream_for_search(search)
+        dest_repo.lock_write()
+        try:
+            dest_repo.start_write_group()
+            try:
+                dest_repo.insert_data_stream(stream)
+            except:
+                dest_repo.abort_write_group()
+                raise
+            else:
+                dest_repo.commit_write_group()
+        finally:
+            dest_repo.unlock()
+
+        # try to insert data stream with invalid key
+        stream = [[('bogus-key',), '']]
+        self.assertRaises(errors.RepositoryDataStreamError,
+                          dest_repo.insert_data_stream, stream)
+
     def test_get_serializer_format(self):
         repo = self.make_repository('.')
         format = repo.get_serializer_format()




More information about the bazaar-commits mailing list