Rev 3212: * ``RemoteBzrDir._get_tree_branch`` no longer triggers ``_ensure_real``, in http://people.ubuntu.com/~robertc/baz2.0/RemoteBzrDir._get_tree_branch

Robert Collins robertc at robertcollins.net
Mon Feb 4 03:51:07 GMT 2008


At http://people.ubuntu.com/~robertc/baz2.0/RemoteBzrDir._get_tree_branch

------------------------------------------------------------
revno: 3212
revision-id:robertc at robertcollins.net-20080204035039-gdwcyz8gopti4r0l
parent: pqm at pqm.ubuntu.com-20080201053934-q32y2nk5vvo13c6v
committer: Robert Collins <robertc at robertcollins.net>
branch nick: RemoteBzrDir._get_tree_branch
timestamp: Mon 2008-02-04 14:50:39 +1100
message:
   * ``RemoteBzrDir._get_tree_branch`` no longer triggers ``_ensure_real``,
     removing one round trip on many network operations. (Robert Collins)
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/bzrdir.py               bzrdir.py-20060131065624-156dfea39c4387cb
  bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
  bzrlib/tests/test_remote.py    test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
=== modified file 'NEWS'
--- a/NEWS	2008-02-01 05:39:34 +0000
+++ b/NEWS	2008-02-04 03:50:39 +0000
@@ -137,6 +137,9 @@
       ``Repository.get_data_stream_for_search`` which allows less network
       traffic when requesting data streams over a smart server. (Robert Collins)
 
+    * ``RemoteBzrDir._get_tree_branch`` no longer triggers ``_ensure_real``,
+      removing one round trip on many network operations. (Robert Collins)
+
     * Repository has a new method ``has_revisions`` which signals the presence
       of many revisions by returning a set of the revisions listed which are
       present. This can be done by index queries without reading data for parent

=== modified file 'bzrlib/bzrdir.py'
--- a/bzrlib/bzrdir.py	2008-01-17 13:45:16 +0000
+++ b/bzrlib/bzrdir.py	2008-02-04 03:50:39 +0000
@@ -748,7 +748,7 @@
     def _get_tree_branch(self):
         """Return the branch and tree, if any, for this bzrdir.
 
-        Return None for tree if not present.
+        Return None for tree if not present or inaccessible.
         Raise NotBranchError if no branch is present.
         :return: (tree, branch)
         """

=== modified file 'bzrlib/remote.py'
--- a/bzrlib/remote.py	2008-01-29 03:22:52 +0000
+++ b/bzrlib/remote.py	2008-02-04 03:50:39 +0000
@@ -130,6 +130,10 @@
         else:
             raise errors.UnexpectedSmartServerResponse(response)
 
+    def _get_tree_branch(self):
+        """See BzrDir._get_tree_branch()."""
+        return None, self.open_branch()
+
     def open_branch(self, _unsupported=False):
         assert _unsupported == False, 'unsupported flag support not implemented yet.'
         reference_url = self.get_branch_reference()

=== modified file 'bzrlib/tests/test_remote.py'
--- a/bzrlib/tests/test_remote.py	2008-01-22 00:27:42 +0000
+++ b/bzrlib/tests/test_remote.py	2008-02-04 03:50:39 +0000
@@ -206,6 +206,23 @@
             [('call', 'BzrDir.open_branch', ('quack/',))],
             client._calls)
 
+    def test__get_tree_branch(self):
+        # _get_tree_branch is a form of open_branch, but it should only ask for
+        # branch opening, not any other network requests.
+        calls = []
+        def open_branch():
+            calls.append("Called")
+            return "a-branch"
+        transport = MemoryTransport()
+        # no requests on the network - catches other api calls being made.
+        client = FakeClient([], transport.base)
+        bzrdir = RemoteBzrDir(transport, _client=client)
+        # patch the open_branch call to record that it was called.
+        bzrdir.open_branch = open_branch
+        self.assertEqual((None, "a-branch"), bzrdir._get_tree_branch())
+        self.assertEqual(["Called"], calls)
+        self.assertEqual([], client._calls)
+
     def test_url_quoting_of_path(self):
         # Relpaths on the wire should not be URL-escaped.  So "~" should be
         # transmitted as "~", not "%7E".



More information about the bazaar-commits mailing list