Rev 348: More efficient implementation of last_revision(). in http://people.samba.org/bzr/jelmer/bzr-svn/bzr.dev

Jelmer Vernooij jelmer at samba.org
Mon Jan 1 06:18:22 GMT 2007


------------------------------------------------------------
revno: 348
revision-id: jelmer at samba.org-20070101061751-hbqi11kw435l7e3p
parent: jelmer at samba.org-20070101054344-0crkmk42n3k2u9fp
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: main
timestamp: Mon 2007-01-01 07:17:51 +0100
message:
  More efficient implementation of last_revision().
modified:
  branch.py                      svnbranch.py-20051017135706-11c749eb0dab04a7
  checkout.py                    workingtree.py-20060306120941-b083cb0fdd4a69de
  commit.py                      commit.py-20060607190346-qvq128wgfubhhgm2-1
  repository.py                  repository.py-20060306123302-1f8c5069b3fe0265
=== modified file 'branch.py'
--- a/branch.py	2006-12-30 21:08:37 +0000
+++ b/branch.py	2007-01-01 06:17:51 +0000
@@ -64,7 +64,7 @@
         self.control_files = FakeControlFiles()
         self.base = base.rstrip("/")
         self._format = SvnBranchFormat()
-        self._generate_revision_history(self.repository._latest_revnum)
+        self._revision_history = None
 
     def check(self):
         """See Branch.Check.
@@ -141,8 +141,25 @@
         return None
 
     def revision_history(self):
+        if self._revision_history is None:
+            self._generate_revision_history(self.repository._latest_revnum)
         return self._revision_history
 
+    def last_revision(self):
+        # Shortcut for finding the tip. This avoids expensive generation time
+        # on large branches.
+        if self._revision_history is None:
+            for (branch, rev) in self.repository.follow_branch(
+                self.branch_path, self.repository._latest_revnum):
+                return self.repository.generate_revision_id(rev, branch)
+            return None
+
+        ph = self.revision_history()
+        if ph:
+            return ph[-1]
+        else:
+            return none
+
     def pull(self, source, overwrite=False, stop_revision=None):
         source.lock_read()
         try:

=== modified file 'checkout.py'
--- a/checkout.py	2006-12-31 20:57:48 +0000
+++ b/checkout.py	2007-01-01 06:17:51 +0000
@@ -346,6 +346,8 @@
         revid = self.branch.repository.generate_revision_id(commit_info.revision, self.branch.branch_path)
 
         self.base_revid = revid
+        #FIXME: Use public API:
+        self.branch.revision_history()
         self.branch._revision_history.append(revid)
 
         return revid

=== modified file 'commit.py'
--- a/commit.py	2006-12-23 21:38:26 +0000
+++ b/commit.py	2007-01-01 06:17:51 +0000
@@ -319,6 +319,8 @@
         revid = self.repository.generate_revision_id(self.revnum, 
                                                     self.branch.branch_path)
 
+        #FIXME: Use public API:
+        self.branch.revision_history()
         self.branch._revision_history.append(revid)
 
         mutter('commit finished. author: %r, date: %r' % 

=== modified file 'repository.py'
--- a/repository.py	2007-01-01 05:43:44 +0000
+++ b/repository.py	2007-01-01 06:17:51 +0000
@@ -221,8 +221,9 @@
         self.cachedb = cachedbs[cache_file]
 
         self._latest_revnum = transport.get_latest_revnum()
-        self._log = logwalker.LogWalker(transport=transport, cache_db=self.cachedb, 
-                                       last_revnum=self._latest_revnum)
+        self._log = logwalker.LogWalker(transport=transport, 
+                                        cache_db=self.cachedb, 
+                                        last_revnum=self._latest_revnum)
 
         self.branchprop_list = BranchPropertyList(self._log, self.cachedb)
         self.fileid_map = SimpleFileIdMap(self, self.cachedb)




More information about the bazaar-commits mailing list