Rev 328: Reduce number of find_children() calls. in http://people.samba.org/bzr/jelmer/bzr-svn/bzr.dev
Jelmer Vernooij
jelmer at samba.org
Fri Dec 29 18:49:19 GMT 2006
------------------------------------------------------------
revno: 328
revision-id: jelmer at samba.org-20061229184647-pbc050jhf8ls78fk
parent: jelmer at samba.org-20061229171536-42b4448bos7zjhp4
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: main
timestamp: Fri 2006-12-29 19:46:47 +0100
message:
Reduce number of find_children() calls.
modified:
fetch.py fetch.py-20060625004942-x2lfaib8ra707a8p-1
fileids.py fileids.py-20060714013623-u5iiyqqnko11grcf-1
repository.py repository.py-20060306123302-1f8c5069b3fe0265
=== modified file 'fetch.py'
--- a/fetch.py 2006-12-29 16:56:21 +0000
+++ b/fetch.py 2006-12-29 18:46:47 +0000
@@ -31,6 +31,7 @@
from svn.core import SubversionException, Pool
import svn.core, svn.ra
+from fileids import generate_file_id
from repository import (SvnRepository, SVN_PROP_BZR_MERGE, SVN_PROP_SVK_MERGE,
SVN_PROP_BZR_REVPROP_PREFIX, SvnRepositoryFormat)
from tree import apply_txdelta_handler
@@ -95,11 +96,22 @@
def relpath(self, path):
return path.strip("/")
- def _get_existing_id(self, parent_id, old_path):
+ def _get_existing_id(self, parent_id, path):
+ if self.id_map.has_key(path):
+ return self.id_map[path]
+
+ return self._get_old_id(parent_id, path)
+
+ def _get_old_id(self, parent_id, old_path):
return self.old_inventory[parent_id].children[os.path.basename(old_path)].file_id
- def delete_entry(self, path, revnum, parent_baton, pool):
- del self.inventory[self._get_existing_id(parent_baton, path)]
+ def _get_new_id(self, parent_id, new_path):
+ if self.id_map.has_key(new_path):
+ return self.id_map[new_path]
+ return generate_file_id(self.revid, new_path)
+
+ def delete_entry(self, path, revnum, parent_id, pool):
+ del self.inventory[self._get_old_id(parent_id, path)]
def close_directory(self, id):
if id != ROOT_ID:
@@ -109,8 +121,8 @@
if not file_weave.has_version(self.revid):
file_weave.add_lines(self.revid, self.dir_baserev[id], [])
- def add_directory(self, path, parent_baton, copyfrom_path, copyfrom_revnum, pool):
- file_id = self.id_map[path]
+ def add_directory(self, path, parent_id, copyfrom_path, copyfrom_revnum, pool):
+ file_id = self._get_new_id(parent_id, path)
self.dir_baserev[file_id] = []
ie = self.inventory.add_path(path, 'directory', file_id)
@@ -118,14 +130,11 @@
return file_id
- def open_directory(self, path, parent_baton, base_revnum, pool):
+ def open_directory(self, path, parent_id, base_revnum, pool):
assert base_revnum >= 0
- base_file_id = self._get_existing_id(parent_baton, path)
+ base_file_id = self._get_old_id(parent_id, path)
base_revid = self.old_inventory[base_file_id].revision
- if self.id_map.has_key(path):
- file_id = self.id_map[path]
- else:
- file_id = base_file_id
+ file_id = self._get_existing_id(parent_id, path)
if file_id == base_file_id:
self.dir_baserev[file_id] = [base_revid]
ie = self.inventory[file_id]
@@ -194,16 +203,13 @@
self.file_data = ""
self.file_parents = []
self.file_stream = None
- self.file_id = self.id_map[path]
+ self.file_id = self._get_new_id(parent_id, path)
return path
def open_file(self, path, parent_id, base_revnum, pool):
- base_file_id = self._get_existing_id(parent_id, path)
+ base_file_id = self._get_old_id(parent_id, path)
base_revid = self.old_inventory[base_file_id].revision
- if self.id_map.has_key(path):
- self.file_id = self.id_map[path]
- else:
- self.file_id = base_file_id
+ self.file_id = self._get_existing_id(parent_id, path)
self.is_executable = None
self.is_symlink = (self.inventory[base_file_id].kind == 'symlink')
file_weave = self.weave_store.get_weave_or_empty(base_file_id, self.transact)
=== modified file 'fileids.py'
--- a/fileids.py 2006-12-29 17:15:36 +0000
+++ b/fileids.py 2006-12-29 18:46:47 +0000
@@ -68,10 +68,10 @@
except NotBranchError:
# Copied from outside of a known branch
# Make it look like the files were added in this revision
- assert find_children is not None
- for c in find_children(data[1], data[2]):
- mutter('oops: %r child %r' % (data[1], c))
- new_paths[(new_p+"/"+c[len(data[1]):].strip("/")).strip("/")] = (data[0], None, -1)
+ if find_children is not None:
+ for c in find_children(data[1], data[2]):
+ mutter('oops: %r child %r' % (data[1], c))
+ new_paths[(new_p+"/"+c[len(data[1]):].strip("/")).strip("/")] = (data[0], None, -1)
data = (data[0], None, -1)
new_paths[new_p] = data
@@ -120,11 +120,13 @@
"""
changes = get_local_changes(global_changes, self.repos.scheme,
uuid, find_children)
-
- def get_children(path, revid):
- (_, bp, revnum) = parse_svn_revision_id(revid)
- for p in find_children(bp+"/"+path, revnum):
- yield self.repos.scheme.unprefix(p)[1]
+ if find_children is not None:
+ def get_children(path, revid):
+ (_, bp, revnum) = parse_svn_revision_id(revid)
+ for p in find_children(bp+"/"+path, revnum):
+ yield self.repos.scheme.unprefix(p)[1]
+ else:
+ get_children = None
revid = generate_svn_revision_id(uuid, revnum, branch)
@@ -208,10 +210,10 @@
if data[1] is not None:
mutter('%r:%s copied from %r:%s' % (p, revid, data[1], data[2]))
- assert find_children is not None, 'incomplete data for %r' % p
- for c in find_children(data[1], data[2]):
- path = c.replace(data[1], p+"/", 1).replace("//", "/")
- map[path] = generate_file_id(revid, c)
- mutter('added mapping %r -> %r' % (path, map[path]))
+ if find_children is not None:
+ for c in find_children(data[1], data[2]):
+ path = c.replace(data[1], p+"/", 1).replace("//", "/")
+ map[path] = generate_file_id(revid, c)
+ mutter('added mapping %r -> %r' % (path, map[path]))
return map
=== modified file 'repository.py'
--- a/repository.py 2006-12-29 17:15:36 +0000
+++ b/repository.py 2006-12-29 18:46:47 +0000
@@ -256,8 +256,8 @@
return self.fileid_map.get_map(self.uuid, revnum, path, pb)
def transform_fileid_map(self, uuid, revnum, branch, changes):
- return self.fileid_map.apply_changes(uuid, revnum, branch, changes,
- find_children=self._log.find_children)
+ return self.fileid_map.apply_changes(uuid, revnum, branch, changes)
+ #find_children=self._log.find_children)
def path_to_file_id(self, revnum, path):
"""Generate a bzr file id from a Subversion file name.
More information about the bazaar-commits
mailing list