Rev 1842: pass project parameter around everywhere to limit revision id searching. in file:///data/jelmer/bzr-svn/trunk/
Jelmer Vernooij
jelmer at samba.org
Sun Sep 7 00:49:37 BST 2008
At file:///data/jelmer/bzr-svn/trunk/
------------------------------------------------------------
revno: 1842
revision-id: jelmer at samba.org-20080906234934-5m18ae0s01dsavxz
parent: jelmer at samba.org-20080906225612-lllmnbna8iqyfkm9
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Sun 2008-09-07 01:49:34 +0200
message:
pass project parameter around everywhere to limit revision id searching.
modified:
NEWS news-20061231030336-h9fhq245ie0de8bs-1
branch.py svnbranch.py-20051017135706-11c749eb0dab04a7
convert.py svn2bzr.py-20051018015439-cb4563bff29e632d
layout.py layout.py-20080323165407-y9qw8nx4oykvoe1k-1
repository.py repository.py-20060306123302-1f8c5069b3fe0265
revmeta.py revmeta.py-20080901215045-n8a6arqybs9ez5hl-1
=== modified file 'NEWS'
--- a/NEWS 2008-09-06 19:33:59 +0000
+++ b/NEWS 2008-09-06 23:49:34 +0000
@@ -13,6 +13,9 @@
replaced by "repository layouts", which are
much more flexible. (#130372)
+ * Will avoid browsing the full repository for bzr-revisions,
+ only closely related paths.
+
FEATURES
* Add bzr:skip revision property to allow skipping
=== modified file 'branch.py'
--- a/branch.py 2008-09-06 22:49:08 +0000
+++ b/branch.py 2008-09-06 23:49:34 +0000
@@ -238,7 +238,7 @@
def set_revision_history(self, rev_history):
"""See Branch.set_revision_history()."""
if (rev_history == [] or
- not self.repository.has_revision(rev_history[-1])):
+ not self.repository.has_revision(rev_history[-1], project=self.project)):
raise NotImplementedError("set_revision_history can't add ghosts")
push(self.repository.get_graph(),
self, self.repository, rev_history[-1])
@@ -271,7 +271,7 @@
"""
missing = []
for revid in other.repository.iter_reverse_revision_history(stop_revision):
- if self.repository.has_revision(revid):
+ if self.repository.has_revision(revid, project=self.project):
missing.reverse()
return missing
missing.append(revid)
=== modified file 'convert.py'
--- a/convert.py 2008-09-04 15:47:01 +0000
+++ b/convert.py 2008-09-06 23:49:34 +0000
@@ -176,7 +176,7 @@
# have to remove existing branches.
if from_revnum == 0 or (not keep and len(to_transport.list_dir(".")) > 1):
removed_branches, changed_branches = source_repos.find_branches_between(layout=layout,
- from_revnum=from_revnum, to_revnum=to_revnum)
+ from_revnum=from_revnum, to_revnum=to_revnum, project=None)
existing_branches = []
for bp in changed_branches:
try:
=== modified file 'layout.py'
--- a/layout.py 2008-09-06 22:49:08 +0000
+++ b/layout.py 2008-09-06 23:49:34 +0000
@@ -17,7 +17,7 @@
from bzrlib.errors import NotBranchError
from bzrlib.trace import mutter
from bzrlib.plugins.svn.core import SubversionException, NODE_DIR
-from bzrlib.plugins.svn.errors import ERR_FS_NOT_DIRECTORY, ERR_FS_NOT_FOUND, ERR_RA_DAV_PATH_NOT_FOUND
+from bzrlib.plugins.svn.errors import ERR_FS_NOT_DIRECTORY, ERR_FS_NOT_FOUND, ERR_RA_DAV_PATH_NOT_FOUND, InvalidSvnBranchPath
from bzrlib.plugins.svn.ra import DIRENT_KIND
class RepositoryLayout(object):
@@ -26,6 +26,9 @@
def __init__(self):
pass
+ def get_project_prefixes(self, project):
+ return [project]
+
def supports_tags(self):
return True
@@ -71,6 +74,15 @@
"""
raise NotImplementedError
+ def split_project_path(self, path, project):
+ """Parse a project inside a particular project.
+
+ """
+ (pt, parsed_project, bp, ip) = self.parse(path)
+ if project is not None and parsed_project != project:
+ raise InvalidSvnBranchPath(path, self)
+ return (pt, bp, ip)
+
def is_branch(self, path, project=None):
"""Check whether a specified path points at a branch."""
try:
=== modified file 'repository.py'
--- a/repository.py 2008-09-06 22:49:08 +0000
+++ b/repository.py 2008-09-06 23:49:34 +0000
@@ -546,7 +546,7 @@
raise errors.RevpropChangeFailed(SVN_REVPROP_BZR_SIGNATURE)
@needs_read_lock
- def find_branches_between(self, layout, from_revnum, to_revnum):
+ def find_branches_between(self, layout, from_revnum, to_revnum, project=None):
deleted = set()
created = set()
for (paths, revnum, revprops) in self._log.iter_changes(None, from_revnum, to_revnum):
@@ -568,7 +568,7 @@
except SubversionException, (_, errors.ERR_FS_NOT_DIRECTORY):
pass
try:
- (pt, project, bp, rp) = layout.parse(p)
+ (pt, bp, rp) = layout.split_project_path(p, project)
if pt == "branch":
if paths[p][0] != 'D' or rp != "":
created.add(bp)
@@ -639,12 +639,12 @@
pass
else:
try:
- (pt, proj, bp, rp) = layout.parse(p)
+ (pt, bp, rp) = layout.split_project_path(p, project)
except errors.InvalidSvnBranchPath:
continue
except NotBranchError:
continue
- if pt != "tag" or (project is not None and proj != project):
+ if pt != "tag":
continue
if action == "D" and rp == "":
tag_changes[p] = None
@@ -698,7 +698,7 @@
layout=layout, mapping=mapping, from_revnum=0, to_revnum=revnum)
return self._cached_tags[layout,mapping]
- def find_branchpaths(self, check_path, check_parent_path,
+ def find_branchpaths(self, layout,
from_revnum=0, to_revnum=None,
project=None):
"""Find all branch paths that were changed in the specified revision
@@ -716,21 +716,26 @@
ret = []
+ if project is not None:
+ prefixes = layout.get_project_prefixes(project)
+ else:
+ prefixes = [""]
+
pb = ui.ui_factory.nested_progress_bar()
try:
- for (paths, i, revprops) in self._log.iter_changes([""], from_revnum, to_revnum):
+ for (paths, i, revprops) in self._log.iter_changes(prefixes, from_revnum, to_revnum):
pb.update("finding branches", i, to_revnum)
if self.transport.has_capability("log-revprops") and is_bzr_revision_revprops(revprops) is not None:
continue
for p in sorted(paths.keys()):
- if check_path(p, project):
+ if layout.is_branch_or_tag(p, project):
if paths[p][0] in ('R', 'D') and p in created_branches:
ret.append((p, created_branches[p], False))
del created_branches[p]
if paths[p][0] in ('A', 'R', 'M'):
created_branches[p] = i
- elif check_parent_path(p, project):
+ elif layout.is_branch_or_tag_parent(p, project):
if paths[p][0] in ('R', 'D'):
k = created_branches.keys()
for c in k:
@@ -744,9 +749,9 @@
try:
for c in self.transport.get_dir(p, i)[0].keys():
n = p+"/"+c
- if check_path(n, project):
+ if layout.is_branch_or_tag(n, project):
created_branches[n] = i
- elif check_parent_path(n, project):
+ elif layout.is_branch_or_tag_parent(n, project):
parents.append(n)
except SubversionException, (_, errors.ERR_FS_NOT_DIRECTORY):
pass
@@ -782,11 +787,8 @@
for (project, branch, nick) in it:
yield (branch, to_revnum, True)
else:
- check_path_fn = layout.is_branch_or_tag
- check_parent_path_fn = layout.is_branch_or_tag_parent
for (branch, revno, exists) in self.find_branchpaths(
- check_path_fn, check_parent_path_fn,
- from_revnum, to_revnum, project):
+ layout, from_revnum, to_revnum, project):
yield (branch, revno, exists)
def abort_write_group(self):
=== modified file 'revmeta.py'
--- a/revmeta.py 2008-09-06 21:56:26 +0000
+++ b/revmeta.py 2008-09-06 23:49:34 +0000
@@ -485,7 +485,7 @@
if prev is not None:
yield prev
- def iter_all_changes(self, layout, mapping, from_revnum, to_revnum=0, pb=None):
+ def iter_all_changes(self, layout, mapping, from_revnum, to_revnum=0, project=None, pb=None):
assert from_revnum >= to_revnum
metabranches = {}
if mapping is None:
@@ -498,8 +498,13 @@
if not bp in metabranches:
metabranches[bp] = RevisionMetadataBranch(mapping)
return metabranches[bp]
+
+ if project is not None:
+ prefixes = layout.get_project_prefixes(project)
+ else:
+ prefixes = [""]
unusual = set()
- for (paths, revnum, revprops) in self._log.iter_changes(None, from_revnum, to_revnum, pb=pb):
+ for (paths, revnum, revprops) in self._log.iter_changes(prefixes, from_revnum, to_revnum, pb=pb):
bps = {}
if pb:
pb.update("discovering revisions", revnum, from_revnum-revnum)
@@ -508,7 +513,7 @@
action = paths[p][0]
try:
- (_, _, bp, ip) = layout.parse(p)
+ (_, bp, ip) = layout.split_project_path(p, project)
except errors.NotBranchError:
pass
for u in unusual:
@@ -530,7 +535,7 @@
del metabranches[new_name]
if mapping_check_path(old_name):
metabranches[old_name] = data
- if not layout.is_branch_or_tag(old_name):
+ if not layout.is_branch_or_tag(old_name, project):
unusual.add(old_name)
for bp in bps:
@@ -539,6 +544,6 @@
yield revmeta
# Make sure commit 0 is processed
- if to_revnum == 0 and layout.is_branch_or_tag(""):
+ if to_revnum == 0 and layout.is_branch_or_tag("", project):
bps[""] = get_metabranch("")
yield self.get_revision("", 0, {"": ('A', None, -1)}, {}, metabranch=bps[""])
More information about the bazaar-commits
mailing list