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