Rev 384: Fix recognizing properties when reading the base revision in a subversion working copy. bzr status in a large tree (Samba) now takes ~15 seconds in http://people.samba.org/bzr/jelmer/bzr-svn/bzr.dev
Jelmer Vernooij
jelmer at samba.org
Mon Jan 8 04:46:17 GMT 2007
------------------------------------------------------------
revno: 384
revision-id: jelmer at samba.org-20070108044556-wv5lracm68pkuw2d
parent: jelmer at samba.org-20070108024856-wrhdhdetx909ouzl
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: main
timestamp: Mon 2007-01-08 05:45:56 +0100
message:
Fix recognizing properties when reading the base revision in a subversion working copy. bzr status in a large tree (Samba) now takes ~15 seconds
modified:
checkout.py workingtree.py-20060306120941-b083cb0fdd4a69de
tests/test_tree.py test_tree.py-20070103204350-pr8nupes7e5sd2wr-1
tree.py tree.py-20060624222557-dudlwqcmkf22lt2s-1
=== modified file 'checkout.py'
--- a/checkout.py 2007-01-08 02:48:56 +0000
+++ b/checkout.py 2007-01-08 04:45:56 +0000
@@ -296,8 +296,9 @@
else:
(subid, subrevid) = find_ids(entry)
if subid:
+ add_file_to_inv(subrelpath, subid, subrevid, id)
+ else:
mutter('no id for %r' % entry.url)
- add_file_to_inv(subrelpath, subid, subrevid, id)
wc = self._get_wc()
try:
=== modified file 'tests/test_tree.py'
--- a/tests/test_tree.py 2007-01-03 22:24:00 +0000
+++ b/tests/test_tree.py 2007-01-08 04:45:56 +0000
@@ -29,9 +29,8 @@
self.client_add("dc/file")
self.client_set_prop("dc/file", "svn:executable", "*")
self.client_commit("dc", "executable")
- self.client_update("dc")
tree = SvnBasisTree(WorkingTree.open("dc"))
- self.assertTrue(tree.is_executable(tree.inventory.path2id("file")))
+ self.assertTrue(tree.inventory[tree.inventory.path2id("file")].executable)
def test_executable_changed(self):
repos_url = self.make_client("d", "dc")
@@ -41,7 +40,7 @@
self.client_update("dc")
self.client_set_prop("dc/file", "svn:executable", "*")
tree = SvnBasisTree(WorkingTree.open("dc"))
- self.assertFalse(tree.is_executable(tree.inventory.path2id("file")))
+ self.assertFalse(tree.inventory[tree.inventory.path2id("file")].executable)
def test_symlink(self):
repos_url = self.make_client("d", "dc")
@@ -73,3 +72,17 @@
tree.inventory[tree.inventory.path2id("file")].kind)
self.assertEqual("target",
tree.inventory[tree.inventory.path2id("file")].symlink_target)
+
+ def test_executable_link(self):
+ repos_url = self.make_client("d", "dc")
+ import os
+ os.symlink("target", "dc/file")
+ self.build_tree({"dc/file": "x"})
+ self.client_add("dc/file")
+ self.client_set_prop("dc/file", "svn:executable", "*")
+ self.client_commit("dc", "exe1")
+ wt = WorkingTree.open("dc")
+ tree = SvnBasisTree(wt)
+ self.assertFalse(tree.inventory[tree.inventory.path2id("file")].executable)
+ self.assertFalse(wt.inventory[wt.inventory.path2id("file")].executable)
+
=== modified file 'tree.py'
--- a/tree.py 2007-01-08 02:48:56 +0000
+++ b/tree.py 2007-01-08 04:45:56 +0000
@@ -173,6 +173,7 @@
ie.text_sha1 = None
ie.text_size = None
ie.text_id = None
+ ie.executable = False
else:
ie.text_sha1 = osutils.sha_string(file_data)
ie.text_size = len(file_data)
@@ -203,28 +204,21 @@
self._inventory = Inventory()
self._repository = workingtree.branch.repository
- def _get_props(relpath):
- path = self.workingtree.abspath(relpath)
- wc = workingtree._get_wc()
- try:
- return svn.wc.get_prop_diffs(path, wc)
- finally:
- svn.wc.adm_close(wc)
-
- def add_file_to_inv(relpath, id, revid):
- props = _get_props(relpath)
+ def add_file_to_inv(relpath, id, revid, wc):
+ props = svn.wc.get_prop_diffs(self.workingtree.abspath(relpath), wc)
if props.has_key(svn.core.SVN_PROP_SPECIAL):
ie = self._inventory.add_path(relpath, 'symlink', id)
ie.symlink_target = open(self._abspath(relpath)).read()[len("link "):]
ie.text_sha1 = None
ie.text_size = None
ie.text_id = None
+ ie.executable = False
else:
ie = self._inventory.add_path(relpath, 'file', id)
data = osutils.fingerprint_file(open(self._abspath(relpath)))
ie.text_sha1 = data['sha1']
ie.text_size = data['size']
- ie.executable = props.has_key(svn.core.SVN_PROP_EXECUTABLE)
+ ie.executable = props.has_key(svn.core.SVN_PROP_EXECUTABLE)
ie.revision = revid
return ie
@@ -267,7 +261,7 @@
else:
(subid, subrevid) = find_ids(entry)
if subid is not None:
- add_file_to_inv(subrelpath, subid, subrevid)
+ add_file_to_inv(subrelpath, subid, subrevid, wc)
wc = workingtree._get_wc()
try:
More information about the bazaar-commits
mailing list