Rev 3057: Preserve repository format when branching from a smart server in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Fri Nov 30 07:31:04 GMT 2007


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

------------------------------------------------------------
revno: 3057
revision-id:pqm at pqm.ubuntu.com-20071130073050-wqh13t7fars5qbhl
parent: pqm at pqm.ubuntu.com-20071130070051-vl4e257ac6vxgo72
parent: andrew.bennetts at canonical.com-20071130060632-jh8ii23pcpnzqq5p
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Fri 2007-11-30 07:30:50 +0000
message:
  Preserve repository format when branching from a smart server
  	(#164626, Andrew Bennetts)
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
  bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
    ------------------------------------------------------------
    revno: 3047.1.5
    revision-id:andrew.bennetts at canonical.com-20071130060632-jh8ii23pcpnzqq5p
    parent: andrew.bennetts at canonical.com-20071130060454-dtbvokyugnztgsnq
    committer: Andrew Bennetts <andrew.bennetts at canonical.com>
    branch nick: preserve-format-from-hpss
    timestamp: Fri 2007-11-30 17:06:32 +1100
    message:
      Add NEWS entry.
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
    ------------------------------------------------------------
    revno: 3047.1.4
    revision-id:andrew.bennetts at canonical.com-20071130060454-dtbvokyugnztgsnq
    parent: andrew.bennetts at canonical.com-20071130054200-tp1k3vfbczd78cjo
    committer: Andrew Bennetts <andrew.bennetts at canonical.com>
    branch nick: preserve-format-from-hpss
    timestamp: Fri 2007-11-30 17:04:54 +1100
    message:
      Simplify RemoteRepository.sprout thanks to review comments.
    modified:
      bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
    ------------------------------------------------------------
    revno: 3047.1.3
    revision-id:andrew.bennetts at canonical.com-20071130054200-tp1k3vfbczd78cjo
    parent: andrew.bennetts at canonical.com-20071130022851-yopp2a7jxb3ts0sa
    parent: pqm at pqm.ubuntu.com-20071129184101-u9506rihe4zbzyyz
    committer: Andrew Bennetts <andrew.bennetts at canonical.com>
    branch nick: preserve-format-from-hpss
    timestamp: Fri 2007-11-30 16:42:00 +1100
    message:
      Merge from bzr.dev.
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
      bzrlib/bzrdir.py               bzrdir.py-20060131065624-156dfea39c4387cb
      bzrlib/errors.py               errors.py-20050309040759-20512168c4e14fbd
      bzrlib/inventory.py            inventory.py-20050309040759-6648b84ca2005b37
      bzrlib/mail_client.py          mail_client.py-20070809192806-vuxt3t19srtpjpdn-1
      bzrlib/reconfigure.py          reconfigure.py-20070908040425-6ykgo7escxhyrg9p-1
      bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
      bzrlib/tests/blackbox/test_reconfigure.py test_reconfigure.py-20070908173426-khfo5fi2rgzgtwj3-1
      bzrlib/tests/blackbox/test_remove.py test_remove.py-20060530011439-fika5rm84lon0goe-1
      bzrlib/tests/blackbox/test_send.py test_bundle.py-20060616222707-c21c8b7ea5ef57b1
      bzrlib/tests/branch_implementations/test_create_checkout.py test_create_checkout-20070322193723-n2wkp1g03r0404di-1
      bzrlib/tests/bzrdir_implementations/test_bzrdir.py test_bzrdir.py-20060131065642-0ebeca5e30e30866
      bzrlib/tests/test_bzrdir.py    test_bzrdir.py-20060131065654-deba40eef51cf220
      bzrlib/tests/test_mail_client.py test_mail_client.py-20070809192806-vuxt3t19srtpjpdn-2
      bzrlib/tests/test_reconfigure.py test_reconfigure.py-20070908040425-6ykgo7escxhyrg9p-2
      bzrlib/tests/tree_implementations/test_inv.py test_inv.py-20070312023226-0cdvk5uwhutis9vg-1
      bzrlib/tests/workingtree_implementations/test_remove.py test_remove.py-20070413183901-rvnp85rtc0q0sclp-1
      bzrlib/workingtree.py          workingtree.py-20050511021032-29b6ec0a681e02e3
    ------------------------------------------------------------
    revno: 3047.1.2
    revision-id:andrew.bennetts at canonical.com-20071130022851-yopp2a7jxb3ts0sa
    parent: andrew.bennetts at canonical.com-20071130015900-vlllu9ovlyrudt7d
    committer: Andrew Bennetts <andrew.bennetts at canonical.com>
    branch nick: preserve-format-from-hpss
    timestamp: Fri 2007-11-30 13:28:51 +1100
    message:
      Directly test that sprouting branches from a HPSS preserves the repository format.
    modified:
      bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
    ------------------------------------------------------------
    revno: 3047.1.1
    revision-id:andrew.bennetts at canonical.com-20071130015900-vlllu9ovlyrudt7d
    parent: pqm at pqm.ubuntu.com-20071129010913-07e4l7k5x9gfnmoh
    committer: Andrew Bennetts <andrew.bennetts at canonical.com>
    branch nick: preserve-format-from-hpss
    timestamp: Fri 2007-11-30 12:59:00 +1100
    message:
      Fix for bug 164626, add test that Repository.sprout preserves format.
    modified:
      bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
      bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
=== modified file 'NEWS'
--- a/NEWS	2007-11-30 03:49:39 +0000
+++ b/NEWS	2007-11-30 07:30:50 +0000
@@ -103,6 +103,9 @@
    * A progress bar has been added for knitpack -> knitpack fetching.
      (Robert Collins, #157789, #159147)
 
+   * Branching from a branch via smart server now preserves the repository
+     format. (Andrew Bennetts,  #164626)
+     
    * ``commit`` is now able to invoke an external editor in a non-ascii
      directory. (Daniel Watkins, #84043)
 

=== modified file 'bzrlib/remote.py'
--- a/bzrlib/remote.py	2007-11-29 18:41:01 +0000
+++ b/bzrlib/remote.py	2007-11-30 06:04:54 +0000
@@ -595,7 +595,9 @@
 
     def sprout(self, to_bzrdir, revision_id=None):
         # TODO: Option to control what format is created?
-        dest_repo = to_bzrdir.create_repository()
+        self._ensure_real()
+        dest_repo = self._real_repository._format.initialize(to_bzrdir,
+                                                             shared=False)
         dest_repo.fetch(self, revision_id=revision_id)
         return dest_repo
 
@@ -1232,7 +1234,8 @@
         # format, because RemoteBranches can't be created at arbitrary URLs.
         # XXX: if to_bzrdir is a RemoteBranch, this should perhaps do
         # to_bzrdir.create_branch...
-        result = branch.BranchFormat.get_default_format().initialize(to_bzrdir)
+        self._ensure_real()
+        result = self._real_branch._format.initialize(to_bzrdir)
         self.copy_content_into(result, revision_id=revision_id)
         result.set_parent(self.bzrdir.root_transport.base)
         return result

=== modified file 'bzrlib/tests/repository_implementations/test_repository.py'
--- a/bzrlib/tests/repository_implementations/test_repository.py	2007-11-26 21:01:29 +0000
+++ b/bzrlib/tests/repository_implementations/test_repository.py	2007-11-30 02:28:51 +0000
@@ -28,8 +28,15 @@
     )
 from bzrlib.delta import TreeDelta
 from bzrlib.inventory import Inventory, InventoryDirectory
+from bzrlib.repofmt.weaverepo import (
+    RepositoryFormat5,
+    RepositoryFormat6,
+    RepositoryFormat7,
+    )
 from bzrlib.revision import NULL_REVISION, Revision
+from bzrlib.smart import server
 from bzrlib.tests import (
+    KnownFailure,
     TestCaseWithTransport,
     TestNotApplicable,
     TestSkipped,
@@ -573,6 +580,56 @@
         self.assertEqual(revision, repo2.get_revision('A'))
         self.assertEqual(signature, repo2.get_signature_text('A'))
 
+    # XXX: this helper duplicated from tests.test_repository
+    def make_remote_repository(self, path):
+        """Make a RemoteRepository object backed by a real repository that will
+        be created at the given path."""
+        repo = self.make_repository(path)
+        smart_server = server.SmartTCPServer_for_testing()
+        smart_server.setUp(self.get_server())
+        remote_transport = get_transport(smart_server.get_url()).clone(path)
+        self.addCleanup(smart_server.tearDown)
+        remote_bzrdir = bzrdir.BzrDir.open_from_transport(remote_transport)
+        remote_repo = remote_bzrdir.open_repository()
+        return remote_repo
+
+    def test_sprout_from_hpss_preserves_format(self):
+        """repo.sprout from a smart server preserves the repository format."""
+        if self.repository_format == RepositoryFormat7():
+            raise KnownFailure(
+                "Cannot fetch weaves over smart protocol.")
+        remote_repo = self.make_remote_repository('remote')
+        local_bzrdir = self.make_bzrdir('local')
+        try:
+            local_repo = remote_repo.sprout(local_bzrdir)
+        except errors.TransportNotPossible:
+            raise TestNotApplicable(
+                "Cannot lock_read old formats like AllInOne over HPSS.")
+        remote_backing_repo = bzrdir.BzrDir.open(
+            self.get_vfs_only_url('remote')).open_repository()
+        self.assertEqual(remote_backing_repo._format, local_repo._format)
+
+    def test_sprout_branch_from_hpss_preserves_repo_format(self):
+        """branch.sprout from a smart server preserves the repository format.
+        """
+        weave_formats = [RepositoryFormat5(), RepositoryFormat6(),
+                         RepositoryFormat7()]
+        if self.repository_format in weave_formats:
+            raise KnownFailure(
+                "Cannot fetch weaves over smart protocol.")
+        remote_repo = self.make_remote_repository('remote')
+        remote_branch = remote_repo.bzrdir.create_branch()
+        try:
+            local_bzrdir = remote_branch.bzrdir.sprout('local')
+        except errors.TransportNotPossible:
+            raise TestNotApplicable(
+                "Cannot lock_read old formats like AllInOne over HPSS.")
+        local_repo = local_bzrdir.open_repository()
+        remote_backing_repo = bzrdir.BzrDir.open(
+            self.get_vfs_only_url('remote')).open_repository()
+        self.assertEqual(remote_backing_repo._format, local_repo._format)
+
+
 class TestRepositoryLocking(TestCaseWithRepository):
 
     def test_leave_lock_in_place(self):




More information about the bazaar-commits mailing list