Rev 803: Implement optimization in find_branches() to be able to start from a in file:///data/jelmer/bzr-svn/0.4/
Jelmer Vernooij
jelmer at samba.org
Thu Dec 6 17:51:41 GMT 2007
At file:///data/jelmer/bzr-svn/0.4/
------------------------------------------------------------
revno: 803
revision-id:jelmer at samba.org-20071206175113-m0ayc56h3u3wi5s5
parent: jelmer at samba.org-20071206155408-23oe0l7zjw17tlqe
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.4
timestamp: Thu 2007-12-06 18:51:13 +0100
message:
Implement optimization in find_branches() to be able to start from a
different revno than 0. Speeds up push significantly.
modified:
repository.py repository.py-20060306123302-1f8c5069b3fe0265
tests/test_repos.py test_repos.py-20060508151940-ddc49a59257ca712
=== modified file 'repository.py'
--- a/repository.py 2007-12-06 15:54:08 +0000
+++ b/repository.py 2007-12-06 17:51:13 +0000
@@ -766,8 +766,9 @@
# check again.
raise e
found = False
- # TODO: Start at self.revmap.last_revnum_checked(str(scheme))
- for (branch, revno, _) in self.find_branches(scheme, last_revnum):
+ for (branch, revno, _) in self.find_branches(scheme,
+ self.revmap.last_revnum_checked(str(scheme)),
+ last_revnum):
# Look at their bzr:revision-id-vX
revids = []
try:
@@ -1030,15 +1031,15 @@
return self._ancestry
- def find_branches(self, scheme, revnum=None):
+ def find_branches(self, scheme, from_revnum=0, to_revnum=None):
"""Find all branches that were changed in the specified revision number.
:param revnum: Revision to search for branches.
:return: iterator that returns tuples with (path, revision number, still exists). The revision number is the revision in which the branch last existed.
"""
assert scheme is not None
- if revnum is None:
- revnum = self.transport.get_latest_revnum()
+ if to_revnum is None:
+ to_revnum = self.transport.get_latest_revnum()
created_branches = {}
@@ -1046,8 +1047,8 @@
pb = ui.ui_factory.nested_progress_bar()
try:
- for i in range(revnum+1):
- pb.update("finding branches", i, revnum+1)
+ for i in range(from_revnum, to_revnum+1):
+ pb.update("finding branches", i, to_revnum+1)
paths = self._log.get_revision_paths(i)
for p in sorted(paths.keys()):
if scheme.is_branch(p) or scheme.is_tag(p):
@@ -1088,7 +1089,7 @@
pb.finished()
for p in created_branches:
- j = self._log.find_latest_change(p, revnum,
+ j = self._log.find_latest_change(p, to_revnum,
include_parents=True,
include_children=True)
if j is None:
=== modified file 'tests/test_repos.py'
--- a/tests/test_repos.py 2007-11-23 13:20:17 +0000
+++ b/tests/test_repos.py 2007-12-06 17:51:13 +0000
@@ -297,7 +297,23 @@
self.assertEqual([("tags/branchab", 2, True),
("tags/brancha", 2, True)],
- list(repos.find_branches(TrunkBranchingScheme(), 2)))
+ list(repos.find_branches(TrunkBranchingScheme(), to_revnum=2)))
+
+ def test_find_branches_start_revno(self):
+ repos_url = self.make_client("a", "dc")
+ self.build_tree({'dc/branches/brancha': None})
+ self.client_add("dc/branches")
+ self.client_commit("dc", "My Message")
+ self.build_tree({'dc/branches/branchb': None})
+ self.client_add("dc/branches/branchb")
+ self.client_commit("dc", "My Message 2")
+
+ repos = Repository.open(repos_url)
+ repos.set_branching_scheme(TrunkBranchingScheme())
+
+ self.assertEqual([("branches/branchb", 2, True)],
+ list(repos.find_branches(TrunkBranchingScheme(), from_revnum=2,
+ to_revnum=2)))
def test_find_branches_file_moved_from_nobranch(self):
repos_url = self.make_client("a", "dc")
@@ -345,7 +361,7 @@
self.assertEqual([("t2/branches/brancha", 2, True),
("t2/branches/branchab", 2, True)],
- list(repos.find_branches(TrunkBranchingScheme(1), 2)))
+ list(repos.find_branches(TrunkBranchingScheme(1), to_revnum=2)))
def test_find_branches_no(self):
repos_url = self.make_client("a", "dc")
@@ -354,7 +370,7 @@
repos.set_branching_scheme(NoBranchingScheme())
self.assertEqual([("", 0, True)],
- list(repos.find_branches(NoBranchingScheme(), 0)))
+ list(repos.find_branches(NoBranchingScheme(), to_revnum=0)))
def test_find_branches_no_later(self):
repos_url = self.make_client("a", "dc")
@@ -363,7 +379,7 @@
repos.set_branching_scheme(NoBranchingScheme())
self.assertEqual([("", 0, True)],
- list(repos.find_branches(NoBranchingScheme(), 0)))
+ list(repos.find_branches(NoBranchingScheme(), to_revnum=0)))
def test_find_branches_trunk_empty(self):
repos_url = self.make_client("a", "dc")
@@ -372,7 +388,7 @@
repos.set_branching_scheme(TrunkBranchingScheme())
self.assertEqual([],
- list(repos.find_branches(TrunkBranchingScheme(), 0)))
+ list(repos.find_branches(TrunkBranchingScheme(), to_revnum=0)))
def test_find_branches_trunk_one(self):
repos_url = self.make_client("a", "dc")
@@ -385,7 +401,7 @@
self.client_commit("dc", "My Message")
self.assertEqual([("trunk", 1, True)],
- list(repos.find_branches(TrunkBranchingScheme(), 1)))
+ list(repos.find_branches(TrunkBranchingScheme(), to_revnum=1)))
def test_find_branches_removed(self):
repos_url = self.make_client("a", "dc")
@@ -401,9 +417,9 @@
self.client_commit("dc", "remove")
self.assertEqual([("trunk", 1, True)],
- list(repos.find_branches(TrunkBranchingScheme(), 1)))
+ list(repos.find_branches(TrunkBranchingScheme(), to_revnum=1)))
self.assertEqual([("trunk", 1, False)],
- list(repos.find_branches(TrunkBranchingScheme(), 2)))
+ list(repos.find_branches(TrunkBranchingScheme(), to_revnum=2)))
def test_url(self):
""" Test repository URL is kept """
More information about the bazaar-commits
mailing list