Rev 5801: (jelmer) Move _KeyRefs from bzrlib.knit to bzrlib.versionedfile. (Jelmer in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Tue Apr 19 02:04:00 UTC 2011
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 5801 [merge]
revision-id: pqm at pqm.ubuntu.com-20110419020354-qu7nt76r2uj4pb5c
parent: pqm at pqm.ubuntu.com-20110419010744-ns5qnlw97wrrva7s
parent: jelmer at samba.org-20110415112600-vrv2431lh3gi6wx2
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Tue 2011-04-19 02:03:54 +0000
message:
(jelmer) Move _KeyRefs from bzrlib.knit to bzrlib.versionedfile. (Jelmer
Vernooij)
modified:
bzrlib/graph.py graph_walker.py-20070525030359-y852guab65d4wtn0-1
bzrlib/groupcompress.py groupcompress.py-20080705181503-ccbxd6xuy1bdnrpu-8
bzrlib/knit.py knit.py-20051212171256-f056ac8f0fbe1bd9
bzrlib/repofmt/groupcompress_repo.py repofmt.py-20080715094215-wp1qfvoo7093c8qr-1
bzrlib/repofmt/knitpack_repo.py knitpack_repo.py-20110405143430-6p75yrk99v6pb770-1
bzrlib/repofmt/pack_repo.py pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
bzrlib/tests/test_import_tariff.py test_import_tariff.p-20100207155145-ff9infp7goncs7zh-1
bzrlib/versionedfile.py versionedfile.py-20060222045106-5039c71ee3b65490
=== modified file 'bzrlib/graph.py'
--- a/bzrlib/graph.py 2011-02-19 17:37:45 +0000
+++ b/bzrlib/graph.py 2011-04-05 17:57:02 +0000
@@ -23,7 +23,6 @@
revision,
trace,
)
-from bzrlib.symbol_versioning import deprecated_function, deprecated_in
STEP_UNIQUE_SEARCHER_EVERY = 5
=== modified file 'bzrlib/groupcompress.py'
--- a/bzrlib/groupcompress.py 2011-04-08 14:32:55 +0000
+++ b/bzrlib/groupcompress.py 2011-04-08 14:45:25 +0000
@@ -23,22 +23,27 @@
except ImportError:
pylzma = None
+from bzrlib.lazy_import import lazy_import
+lazy_import(globals(), """
from bzrlib import (
annotate,
debug,
errors,
graph as _mod_graph,
- knit,
osutils,
pack,
static_tuple,
trace,
+ tsort,
)
+
+from bzrlib.repofmt import pack_repo
+""")
+
from bzrlib.btree_index import BTreeBuilder
from bzrlib.lru_cache import LRUSizeCache
-from bzrlib.repofmt import pack_repo
-from bzrlib.tsort import topo_sort
from bzrlib.versionedfile import (
+ _KeyRefs,
adapter_registry,
AbsentContentFactory,
ChunkedContentFactory,
@@ -78,7 +83,7 @@
present_keys = []
for prefix in sorted(per_prefix_map):
- present_keys.extend(reversed(topo_sort(per_prefix_map[prefix])))
+ present_keys.extend(reversed(tsort.topo_sort(per_prefix_map[prefix])))
return present_keys
@@ -1471,7 +1476,7 @@
the defined order, regardless of source.
"""
if ordering == 'topological':
- present_keys = topo_sort(parent_map)
+ present_keys = tsort.topo_sort(parent_map)
else:
# ordering == 'groupcompress'
# XXX: This only optimizes for the target ordering. We may need
@@ -1922,7 +1927,7 @@
# repeated over and over, this creates a surplus of ints
self._int_cache = {}
if track_external_parent_refs:
- self._key_dependencies = knit._KeyRefs(
+ self._key_dependencies = _KeyRefs(
track_new_keys=track_new_keys)
else:
self._key_dependencies = None
=== modified file 'bzrlib/knit.py'
--- a/bzrlib/knit.py 2011-04-08 23:00:04 +0000
+++ b/bzrlib/knit.py 2011-04-15 11:26:00 +0000
@@ -97,6 +97,7 @@
split_lines,
)
from bzrlib.versionedfile import (
+ _KeyRefs,
AbsentContentFactory,
adapter_registry,
ConstantMapper,
@@ -2781,64 +2782,6 @@
return key[:-1], key[-1]
-class _KeyRefs(object):
-
- def __init__(self, track_new_keys=False):
- # dict mapping 'key' to 'set of keys referring to that key'
- self.refs = {}
- if track_new_keys:
- # set remembering all new keys
- self.new_keys = set()
- else:
- self.new_keys = None
-
- def clear(self):
- if self.refs:
- self.refs.clear()
- if self.new_keys:
- self.new_keys.clear()
-
- def add_references(self, key, refs):
- # Record the new references
- for referenced in refs:
- try:
- needed_by = self.refs[referenced]
- except KeyError:
- needed_by = self.refs[referenced] = set()
- needed_by.add(key)
- # Discard references satisfied by the new key
- self.add_key(key)
-
- def get_new_keys(self):
- return self.new_keys
-
- def get_unsatisfied_refs(self):
- return self.refs.iterkeys()
-
- def _satisfy_refs_for_key(self, key):
- try:
- del self.refs[key]
- except KeyError:
- # No keys depended on this key. That's ok.
- pass
-
- def add_key(self, key):
- # satisfy refs for key, and remember that we've seen this key.
- self._satisfy_refs_for_key(key)
- if self.new_keys is not None:
- self.new_keys.add(key)
-
- def satisfy_refs_for_keys(self, keys):
- for key in keys:
- self._satisfy_refs_for_key(key)
-
- def get_referrers(self):
- result = set()
- for referrers in self.refs.itervalues():
- result.update(referrers)
- return result
-
-
class _KnitGraphIndex(object):
"""A KnitVersionedFiles index layered on GraphIndex."""
=== modified file 'bzrlib/repofmt/groupcompress_repo.py'
--- a/bzrlib/repofmt/groupcompress_repo.py 2011-04-16 15:01:57 +0000
+++ b/bzrlib/repofmt/groupcompress_repo.py 2011-04-19 02:03:54 +0000
@@ -799,8 +799,8 @@
def __init__(self, _format, a_bzrdir, control_files, _commit_builder_class,
_serializer):
"""Overridden to change pack collection class."""
- super(CHKInventoryRepository, self).__init__(_format, a_bzrdir, control_files,
- _commit_builder_class, _serializer)
+ super(CHKInventoryRepository, self).__init__(_format, a_bzrdir,
+ control_files, _commit_builder_class, _serializer)
index_transport = self._transport.clone('indices')
self._pack_collection = GCRepositoryPackCollection(self,
self._transport, index_transport,
@@ -1109,6 +1109,37 @@
return GroupCHKStreamSource(self, to_format)
return super(CHKInventoryRepository, self)._get_source(to_format)
+ def _find_inconsistent_revision_parents(self, revisions_iterator=None):
+ """Find revisions with different parent lists in the revision object
+ and in the index graph.
+
+ :param revisions_iterator: None, or an iterator of (revid,
+ Revision-or-None). This iterator controls the revisions checked.
+ :returns: an iterator yielding tuples of (revison-id, parents-in-index,
+ parents-in-revision).
+ """
+ if not self.is_locked():
+ raise AssertionError()
+ vf = self.revisions
+ if revisions_iterator is None:
+ revisions_iterator = self._iter_revisions(None)
+ for revid, revision in revisions_iterator:
+ if revision is None:
+ pass
+ parent_map = vf.get_parent_map([(revid,)])
+ parents_according_to_index = tuple(parent[-1] for parent in
+ parent_map[(revid,)])
+ parents_according_to_revision = tuple(revision.parent_ids)
+ if parents_according_to_index != parents_according_to_revision:
+ yield (revid, parents_according_to_index,
+ parents_according_to_revision)
+
+ def _check_for_inconsistent_revision_parents(self):
+ inconsistencies = list(self._find_inconsistent_revision_parents())
+ if inconsistencies:
+ raise errors.BzrCheckError(
+ "Revision index has inconsistent parents.")
+
class GroupCHKStreamSource(StreamSource):
"""Used when both the source and target repo are GroupCHK repos."""
=== modified file 'bzrlib/repofmt/knitpack_repo.py'
--- a/bzrlib/repofmt/knitpack_repo.py 2011-04-15 11:23:09 +0000
+++ b/bzrlib/repofmt/knitpack_repo.py 2011-04-15 11:26:00 +0000
@@ -56,6 +56,7 @@
KnitRepository,
)
from bzrlib.repofmt.pack_repo import (
+ _DirectPackAccess,
NewPack,
RepositoryFormatPack,
ResumedPack,
@@ -1041,7 +1042,7 @@
self.new_pack.text_index,
('blank', ), 1,
add_nodes_callback=self.new_pack.text_index.add_nodes)
- data_access = knit._DirectPackAccess(
+ data_access = _DirectPackAccess(
{self.new_pack.text_index:self.new_pack.access_tuple()})
data_access.set_writer(self.new_pack._writer, self.new_pack.text_index,
self.new_pack.access_tuple())
=== modified file 'bzrlib/repofmt/pack_repo.py'
--- a/bzrlib/repofmt/pack_repo.py 2011-04-18 23:42:30 +0000
+++ b/bzrlib/repofmt/pack_repo.py 2011-04-19 02:03:54 +0000
@@ -37,9 +37,6 @@
CombinedGraphIndex,
GraphIndexPrefixAdapter,
)
-from bzrlib.knit import (
- _DirectPackAccess,
- )
""")
from bzrlib import (
btree_index,
=== modified file 'bzrlib/tests/test_import_tariff.py'
--- a/bzrlib/tests/test_import_tariff.py 2011-04-08 10:54:03 +0000
+++ b/bzrlib/tests/test_import_tariff.py 2011-04-08 14:45:25 +0000
@@ -96,6 +96,7 @@
# 'st' in a default format working tree shouldn't need many modules
self.make_branch_and_tree('.')
self.run_command_check_imports(['st'], [
+ 'bzrlib.annotate',
'bzrlib.atomicfile',
'bzrlib.bugtracker',
'bzrlib.bundle.commands',
@@ -106,16 +107,20 @@
# bzrlib.foreign so it can't be blacklisted
'bzrlib.gpg',
'bzrlib.info',
+ 'bzrlib.knit',
'bzrlib.merge3',
'bzrlib.merge_directive',
'bzrlib.msgeditor',
'bzrlib.patiencediff',
'bzrlib.remote',
+ 'bzrlib.repofmt.knitrepo',
'bzrlib.repofmt.knitpack_repo',
'bzrlib.rules',
'bzrlib.sign_my_commits',
'bzrlib.smart',
'bzrlib.smart.client',
+ 'bzrlib.smart.medium',
+ 'bzrlib.smart.server',
'bzrlib.transform',
'bzrlib.version_info_formats.format_rio',
'bzrlib.plugins.weave_fmt.branch',
=== modified file 'bzrlib/versionedfile.py'
--- a/bzrlib/versionedfile.py 2011-04-05 01:12:15 +0000
+++ b/bzrlib/versionedfile.py 2011-04-05 17:52:20 +0000
@@ -1872,3 +1872,64 @@
for prefix in sorted(per_prefix_map):
present_keys.extend(reversed(tsort.topo_sort(per_prefix_map[prefix])))
return present_keys
+
+
+class _KeyRefs(object):
+
+ def __init__(self, track_new_keys=False):
+ # dict mapping 'key' to 'set of keys referring to that key'
+ self.refs = {}
+ if track_new_keys:
+ # set remembering all new keys
+ self.new_keys = set()
+ else:
+ self.new_keys = None
+
+ def clear(self):
+ if self.refs:
+ self.refs.clear()
+ if self.new_keys:
+ self.new_keys.clear()
+
+ def add_references(self, key, refs):
+ # Record the new references
+ for referenced in refs:
+ try:
+ needed_by = self.refs[referenced]
+ except KeyError:
+ needed_by = self.refs[referenced] = set()
+ needed_by.add(key)
+ # Discard references satisfied by the new key
+ self.add_key(key)
+
+ def get_new_keys(self):
+ return self.new_keys
+
+ def get_unsatisfied_refs(self):
+ return self.refs.iterkeys()
+
+ def _satisfy_refs_for_key(self, key):
+ try:
+ del self.refs[key]
+ except KeyError:
+ # No keys depended on this key. That's ok.
+ pass
+
+ def add_key(self, key):
+ # satisfy refs for key, and remember that we've seen this key.
+ self._satisfy_refs_for_key(key)
+ if self.new_keys is not None:
+ self.new_keys.add(key)
+
+ def satisfy_refs_for_keys(self, keys):
+ for key in keys:
+ self._satisfy_refs_for_key(key)
+
+ def get_referrers(self):
+ result = set()
+ for referrers in self.refs.itervalues():
+ result.update(referrers)
+ return result
+
+
+
More information about the bazaar-commits
mailing list