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