Rev 5319: (spiv) Fix BzrDir.sprout to respect default stacking policies (#597942) in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Fri Jun 25 02:47:20 BST 2010


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

------------------------------------------------------------
revno: 5319 [merge]
revision-id: pqm at pqm.ubuntu.com-20100625014717-87uomuhwxiuths2j
parent: pqm at pqm.ubuntu.com-20100624111149-o3crzmivr896yafb
parent: andrew.bennetts at canonical.com-20100624062940-51ycnvtomytvlnua
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Fri 2010-06-25 02:47:17 +0100
message:
  (spiv) Fix BzrDir.sprout to respect default stacking policies (#597942)
   (Andrew Bennetts)
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/bzrdir.py               bzrdir.py-20060131065624-156dfea39c4387cb
  bzrlib/tests/per_bzrdir/test_bzrdir.py test_bzrdir.py-20060131065642-0ebeca5e30e30866
=== modified file 'NEWS'
--- a/NEWS	2010-06-23 08:14:21 +0000
+++ b/NEWS	2010-06-25 01:47:17 +0000
@@ -43,6 +43,10 @@
 Bug Fixes
 *********
 
+* ``bzr branch`` to a new repository with a default stacking policy no
+  longer transfers the full history unnecessarily.
+  (Andrew Bennetts, #597942)
+
 * ``bzr init`` does not recursively scan directory contents anymore
   leading to faster init for directories with existing content.
   (Martin [gz], Parth Malwankar, #501307)

=== modified file 'bzrlib/bzrdir.py'
--- a/bzrlib/bzrdir.py	2010-05-25 17:27:52 +0000
+++ b/bzrlib/bzrdir.py	2010-06-24 06:29:40 +0000
@@ -1244,7 +1244,8 @@
         repository_policy = result.determine_repository_policy(
             force_new_repo, stacked_branch_url, require_stacking=stacked)
         result_repo, is_new_repo = repository_policy.acquire_repository()
-        if is_new_repo and revision_id is not None and not stacked:
+        is_stacked = stacked or (len(result_repo._fallback_repositories) != 0)
+        if is_new_repo and revision_id is not None and not is_stacked:
             fetch_spec = graph.PendingAncestryResult(
                 [revision_id], source_repository)
         else:

=== modified file 'bzrlib/tests/per_bzrdir/test_bzrdir.py'
--- a/bzrlib/tests/per_bzrdir/test_bzrdir.py	2010-05-20 18:23:17 +0000
+++ b/bzrlib/tests/per_bzrdir/test_bzrdir.py	2010-06-24 06:29:40 +0000
@@ -1168,6 +1168,29 @@
         self.assertEqual(tree.branch.last_revision(),
                          target.open_branch().last_revision())
 
+    def test_sprout_with_revision_id_uses_default_stack_on(self):
+        # Make a branch with three commits to stack on.
+        builder = self.make_branch_builder('stack-on')
+        builder.start_series()
+        builder.build_commit(message='Rev 1.', rev_id='rev-1')
+        builder.build_commit(message='Rev 2.', rev_id='rev-2')
+        builder.build_commit(message='Rev 3.', rev_id='rev-3')
+        builder.finish_series()
+        stack_on = builder.get_branch()
+        # Make a bzrdir with a default stacking policy to stack on that branch.
+        config = self.make_bzrdir('policy-dir').get_config()
+        try:
+            config.set_default_stack_on(self.get_url('stack-on'))
+        except errors.BzrError:
+            raise TestNotApplicable('Only relevant for stackable formats.')
+        # Sprout the stacked-on branch into the bzrdir.
+        sprouted = stack_on.bzrdir.sprout(
+            self.get_url('policy-dir/sprouted'), revision_id='rev-3')
+        # Not all revisions are copied into the sprouted repository.
+        repo = sprouted.open_repository()
+        self.addCleanup(repo.lock_read().unlock)
+        self.assertEqual(None, repo.get_parent_map(['rev-1']).get('rev-1'))
+
     def test_format_initialize_find_open(self):
         # loopback test to check the current format initializes to itself.
         if not self.bzrdir_format.is_supported():




More information about the bazaar-commits mailing list