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