Rev 4188: (robertc) Add RepositoryFormat.fast_deltas to signal fast delta in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Tue Mar 24 00:24:21 GMT 2009


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

------------------------------------------------------------
revno: 4188
revision-id: pqm at pqm.ubuntu.com-20090324002417-m3fzpdg12bimnw69
parent: pqm at pqm.ubuntu.com-20090323202515-uwlqu9w037ndukz4
parent: robertc at robertcollins.net-20090323054814-0y1yph3zuafxgen6
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Tue 2009-03-24 00:24:17 +0000
message:
  (robertc) Add RepositoryFormat.fast_deltas to signal fast delta
  	creation. (Robert Collins)
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
  bzrlib/repofmt/knitrepo.py     knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
  bzrlib/repofmt/pack_repo.py    pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
  bzrlib/repofmt/weaverepo.py    presplitout.py-20070125045333-wfav3tsh73oxu3zk-1
  bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
  bzrlib/tests/per_repository/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
  bzrlib/tests/test_remote.py    test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
    ------------------------------------------------------------
    revno: 4183.5.1
    revision-id: robertc at robertcollins.net-20090323054814-0y1yph3zuafxgen6
    parent: pqm at pqm.ubuntu.com-20090323043327-txb4jri5i3gssuj5
    committer: Robert Collins <robertc at robertcollins.net>
    branch nick: commit-uses-ric
    timestamp: Mon 2009-03-23 16:48:14 +1100
    message:
      Add RepositoryFormat.fast_deltas to signal fast delta creation.
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
      bzrlib/repofmt/knitrepo.py     knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
      bzrlib/repofmt/pack_repo.py    pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
      bzrlib/repofmt/weaverepo.py    presplitout.py-20070125045333-wfav3tsh73oxu3zk-1
      bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
      bzrlib/tests/per_repository/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
      bzrlib/tests/test_remote.py    test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
=== modified file 'NEWS'
--- a/NEWS	2009-03-23 16:12:27 +0000
+++ b/NEWS	2009-03-24 00:24:17 +0000
@@ -166,6 +166,10 @@
 Internals
 *********
 
+* ``bzr selftest`` now accepts ``--subunit`` to run in subunit output
+  mode. Requires ``lp:subunit`` installed to work, but is not a hard
+  dependency. (Robert Collins)
+
 * ``BtreeIndex._spill_mem_keys_to_disk()`` now generates disk index with
   optmizations turned off. This only has effect when processing > 100,000
   keys during something like ``bzr pack``. (John Arbash Meinel)
@@ -193,9 +197,9 @@
   ``InterPackToRemotePack`` classes, as they are now unnecessary.
   (Andrew Bennetts)
 
-* ``bzr selftest`` now accepts ``--subunit`` to run in subunit output
-  mode. Requires ``lp:subunit`` installed to work, but is not a hard
-  dependency. (Robert Collins)
+* ``RepositoryFormat`` as a new attribute ``fast_deltas`` to indicate
+  whether the repository can efficiently generate deltas between trees
+  regardless of tree size. (Robert Collins)
 
 * ``_walk_to_common_revisions`` will now batch up at least 50
   revisions before calling ``get_parent_map`` on the target,

=== modified file 'bzrlib/remote.py'
--- a/bzrlib/remote.py	2009-03-22 01:30:44 +0000
+++ b/bzrlib/remote.py	2009-03-23 05:48:14 +0000
@@ -417,6 +417,11 @@
         self._rich_root_data = None
 
     @property
+    def fast_deltas(self):
+        self._ensure_real()
+        return self._custom_format.fast_deltas
+
+    @property
     def rich_root_data(self):
         if self._rich_root_data is None:
             self._ensure_real()

=== modified file 'bzrlib/repofmt/knitrepo.py'
--- a/bzrlib/repofmt/knitrepo.py	2009-03-16 05:05:52 +0000
+++ b/bzrlib/repofmt/knitrepo.py	2009-03-23 05:48:14 +0000
@@ -299,6 +299,7 @@
     supports_external_lookups = False
     _fetch_order = 'topological'
     _fetch_uses_deltas = True
+    fast_deltas = False
 
     def _get_inventories(self, repo_transport, repo, name='inventory'):
         mapper = versionedfile.ConstantMapper(name)

=== modified file 'bzrlib/repofmt/pack_repo.py'
--- a/bzrlib/repofmt/pack_repo.py	2009-03-23 19:35:38 +0000
+++ b/bzrlib/repofmt/pack_repo.py	2009-03-24 00:24:17 +0000
@@ -2278,6 +2278,7 @@
     index_builder_class = None
     index_class = None
     _fetch_uses_deltas = True
+    fast_deltas = False
 
     def initialize(self, a_bzrdir, shared=False):
         """Create a pack based repository.
@@ -2673,6 +2674,9 @@
     # What index classes to use
     index_builder_class = BTreeBuilder
     index_class = BTreeGraphIndex
+    # Set to true to get the fast-commit code path tested until a really fast
+    # format lands in trunk. Not actually fast in this format.
+    fast_deltas = True
 
     @property
     def _serializer(self):

=== modified file 'bzrlib/repofmt/weaverepo.py'
--- a/bzrlib/repofmt/weaverepo.py	2009-02-27 01:02:40 +0000
+++ b/bzrlib/repofmt/weaverepo.py	2009-03-23 05:48:14 +0000
@@ -268,6 +268,7 @@
     supports_external_lookups = False
     _fetch_order = 'topological'
     _fetch_reconcile = True
+    fast_deltas = False
 
     def initialize(self, a_bzrdir, shared=False, _internal=False):
         """Create a weave repository."""
@@ -475,6 +476,7 @@
     supports_ghosts = False
     _fetch_order = 'topological'
     _fetch_reconcile = True
+    fast_deltas = False
     @property
     def _serializer(self):
         return xml5.serializer_v5

=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py	2009-03-23 03:46:02 +0000
+++ b/bzrlib/repository.py	2009-03-23 05:48:14 +0000
@@ -2661,6 +2661,9 @@
     # Should fetch trigger a reconcile after the fetch? Only needed for
     # some repository formats that can suffer internal inconsistencies.
     _fetch_reconcile = False
+    # Does this format have < O(tree_size) delta generation. Used to hint what
+    # code path for commit, amongst other things.
+    fast_deltas = None
 
     def __str__(self):
         return "<%s>" % self.__class__.__name__

=== modified file 'bzrlib/tests/per_repository/test_repository.py'
--- a/bzrlib/tests/per_repository/test_repository.py	2009-03-22 01:30:44 +0000
+++ b/bzrlib/tests/per_repository/test_repository.py	2009-03-23 05:48:14 +0000
@@ -78,6 +78,12 @@
         repo = tree.branch.repository
         self.assertTrue(repo._format._fetch_uses_deltas in (True, False))
 
+    def test_attribute_fast_deltas(self):
+        """Test the format.fast_deltas attribute."""
+        tree = self.make_branch_and_tree('tree')
+        repo = tree.branch.repository
+        self.assertTrue(repo._format.fast_deltas in (True, False))
+
     def test_attribute__fetch_reconcile(self):
         """Test the the _fetch_reconcile attribute."""
         tree = self.make_branch_and_tree('tree')

=== modified file 'bzrlib/tests/test_remote.py'
--- a/bzrlib/tests/test_remote.py	2009-03-18 01:27:58 +0000
+++ b/bzrlib/tests/test_remote.py	2009-03-23 05:48:14 +0000
@@ -46,7 +46,9 @@
     RemoteBzrDir,
     RemoteBzrDirFormat,
     RemoteRepository,
+    RemoteRepositoryFormat,
     )
+from bzrlib.repofmt import pack_repo
 from bzrlib.revision import NULL_REVISION
 from bzrlib.smart import server, medium
 from bzrlib.smart.client import _SmartClient
@@ -1450,6 +1452,19 @@
         return repo, client
 
 
+class TestRepositoryFormat(TestRemoteRepository):
+
+    def test_fast_delta(self):
+        true_name = pack_repo.RepositoryFormatPackDevelopment2().network_name()
+        true_format = RemoteRepositoryFormat()
+        true_format._network_name = true_name
+        self.assertEqual(True, true_format.fast_deltas)
+        false_name = pack_repo.RepositoryFormatKnitPack1().network_name()
+        false_format = RemoteRepositoryFormat()
+        false_format._network_name = false_name
+        self.assertEqual(False, false_format.fast_deltas)
+
+
 class TestRepositoryGatherStats(TestRemoteRepository):
 
     def test_revid_none(self):




More information about the bazaar-commits mailing list