Rev 2303: merge upstream. in http://people.samba.org/bzr/jelmer/bzr-svn/0.5
Jelmer Vernooij
jelmer at samba.org
Wed Jan 14 18:32:24 GMT 2009
At http://people.samba.org/bzr/jelmer/bzr-svn/0.5
------------------------------------------------------------
revno: 2303
revision-id: jelmer at samba.org-20090114183223-ajmt87iurn1ln40l
parent: jelmer at samba.org-20090114180105-3jab2wtm7z5rm5ye
parent: jelmer at samba.org-20090114163015-whb34wkexi40y08c
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.5
timestamp: Wed 2009-01-14 19:32:23 +0100
message:
merge upstream.
modified:
revmeta.py revmeta.py-20080901215045-n8a6arqybs9ez5hl-1
tests/test_workingtree.py test_workingtree.py-20060622191524-0di7bc3q1ckdbybb-1
workingtree.py workingtree.py-20060306120941-b083cb0fdd4a69de
------------------------------------------------------------
revno: 2300.1.3
revision-id: jelmer at samba.org-20090114163015-whb34wkexi40y08c
parent: jelmer at samba.org-20090114162054-y2egcljye2ukf34p
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.5
timestamp: Wed 2009-01-14 17:30:15 +0100
message:
Better locking.
modified:
workingtree.py workingtree.py-20060306120941-b083cb0fdd4a69de
------------------------------------------------------------
revno: 2300.1.2
revision-id: jelmer at samba.org-20090114162054-y2egcljye2ukf34p
parent: jelmer at samba.org-20090114005302-53fi1b5lpy38e847
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.5
timestamp: Wed 2009-01-14 17:20:54 +0100
message:
Add test for 304134, based on Wesley's test script.
modified:
tests/test_workingtree.py test_workingtree.py-20060622191524-0di7bc3q1ckdbybb-1
------------------------------------------------------------
revno: 2300.1.1
revision-id: jelmer at samba.org-20090114005302-53fi1b5lpy38e847
parent: jelmer at samba.org-20090113162520-gzv3mg8t2hgl095h
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: 0.5
timestamp: Wed 2009-01-14 01:53:02 +0100
message:
keep metabranches history more sparse to avoid iterating over lots of empty entries.
modified:
revmeta.py revmeta.py-20080901215045-n8a6arqybs9ez5hl-1
=== modified file 'revmeta.py'
--- a/revmeta.py 2009-01-13 03:18:11 +0000
+++ b/revmeta.py 2009-01-14 00:53:02 +0000
@@ -1007,6 +1007,7 @@
for bp in metabranches_history[x].keys():
metabranches_history[revnum][bp].update(metabranches_history[x][bp])
del metabranches_history[x][bp]
+ del metabranches_history[x]
for bp, mbs in metabranches_history[revnum].iteritems():
if not bp in self._metabranches:
self._metabranches[bp] = iter(mbs).next()
=== modified file 'tests/test_workingtree.py'
--- a/tests/test_workingtree.py 2009-01-13 00:10:39 +0000
+++ b/tests/test_workingtree.py 2009-01-14 16:20:54 +0000
@@ -465,6 +465,31 @@
tree = WorkingTree.open("dc")
self.assertFalse(tree.inventory.has_filename("bl"))
+ def test_fileid_missing(self):
+ self.make_client("repos", "svn-wc")
+ self.build_tree({"svn-wc/parent": None})
+ self.client_add("svn-wc/parent")
+ self.client_commit("svn-wc", "Added parent.")
+
+ self.build_tree({"svn-wc/peer": None})
+ self.client_add("svn-wc/peer")
+ self.client_commit("svn-wc", "Added peer")
+
+ self.build_tree({"svn-wc/peer/file": "A"})
+ self.client_add("svn-wc/peer/file")
+ self.client_commit("svn-wc", "Added file")
+ self.client_update("svn-wc")
+
+ self.build_tree({"svn-wc/peer/file": "B"})
+ self.client_copy("svn-wc/peer", "svn-wc/parent/child")
+ self.client_delete("svn-wc/peer")
+ self.client_commit("svn-wc", "Made peer a child, with mods.")
+ self.client_update("svn-wc")
+
+ WorkingTree.open("svn-wc").update()
+ self.client_update("svn-wc/parent")
+ WorkingTree.open("svn-wc").update()
+
def test_extras(self):
self.make_client('a', 'dc')
self.build_tree({"dc/bl": None})
=== modified file 'workingtree.py'
--- a/workingtree.py 2009-01-13 00:10:39 +0000
+++ b/workingtree.py 2009-01-14 16:30:15 +0000
@@ -109,7 +109,6 @@
self.bzrdir = bzrdir
self._branch = branch
self.base_revnum = 0
- self._get_wc()
max_rev = revision_status(self.basedir, None, True)[1]
self._update_base_revnum(max_rev)
self._detect_case_handling()
@@ -226,16 +225,16 @@
def move(self, from_paths, to_dir=None, after=False, **kwargs):
"""Move files to a new location."""
# FIXME: Use after argument
- if after == True:
+ if after:
raise NotImplementedError("move after not supported")
for entry in from_paths:
+ to_wc = self._get_wc(to_dir, write_lock=True)
try:
- to_wc = self._get_wc(to_dir, write_lock=True)
to_wc.copy(self.abspath(entry), os.path.basename(entry))
finally:
to_wc.close()
+ from_wc = self._get_wc(write_lock=True)
try:
- from_wc = self._get_wc(write_lock=True)
from_wc.delete(self.abspath(entry))
finally:
from_wc.close()
@@ -247,20 +246,25 @@
def rename_one(self, from_rel, to_rel, after=False):
# FIXME: Use after
- if after == True:
+ if after:
raise NotImplementedError("rename_one after not supported")
+ from_wc = None
(to_wc, to_file) = self._get_rel_wc(to_rel, write_lock=True)
- if os.path.dirname(from_rel) == os.path.dirname(to_rel):
- # Prevent lock contention
- from_wc = to_wc
- else:
- (from_wc, _) = self._get_rel_wc(from_rel, write_lock=True)
- from_id = self.inventory.path2id(from_rel)
try:
- to_wc.copy(self.abspath(from_rel), to_file)
- from_wc.delete(self.abspath(from_rel))
+ if os.path.dirname(from_rel) == os.path.dirname(to_rel):
+ # Prevent lock contention
+ from_wc = to_wc
+ else:
+ (from_wc, _) = self._get_rel_wc(from_rel, write_lock=True)
+ try:
+ from_id = self.inventory.path2id(from_rel)
+ to_wc.copy(self.abspath(from_rel), to_file)
+ from_wc.delete(self.abspath(from_rel))
+ finally:
+ from_wc.close()
finally:
- to_wc.close()
+ if from_wc != to_wc:
+ to_wc.close()
self._change_fileid_mapping(None, from_rel)
self._change_fileid_mapping(from_id, to_rel)
self.read_working_inventory()
@@ -325,19 +329,21 @@
:return: Yields all copies
"""
wc = self._get_wc(relpath)
- entries = wc.entries_read(False)
- for entry in entries.values():
- subrelpath = os.path.join(relpath, entry.name)
- if entry.name == "" or entry.kind != 'directory':
- if ((entry.copyfrom_url == url or entry.url == url) and
- not (entry.schedule in (SCHEDULE_DELETE,
- SCHEDULE_REPLACE))):
- yield os.path.join(
- self.branch.get_branch_path().strip("/"),
- subrelpath)
- else:
- find_copies(subrelpath)
- wc.close()
+ try:
+ entries = wc.entries_read(False)
+ for entry in entries.values():
+ subrelpath = os.path.join(relpath, entry.name)
+ if entry.name == "" or entry.kind != 'directory':
+ if ((entry.copyfrom_url == url or entry.url == url) and
+ not (entry.schedule in (SCHEDULE_DELETE,
+ SCHEDULE_REPLACE))):
+ yield os.path.join(
+ self.branch.get_branch_path().strip("/"),
+ subrelpath)
+ else:
+ find_copies(subrelpath)
+ finally:
+ wc.close()
def find_ids(entry, rootwc):
relpath = urllib.unquote(entry.url[len(entry.repos):].strip("/"))
@@ -563,23 +569,25 @@
subwc = self._get_wc(write_lock=True)
else:
subwc = wc
- new_entries = self._get_new_file_ids(subwc)
- if id is None:
- if new_entries.has_key(path):
- del new_entries[path]
- else:
- assert isinstance(id, str)
- new_entries[path] = id
- fileprops = self._get_branch_props()
- self.branch.mapping.export_fileid_map_fileprops(new_entries, fileprops)
- self._set_branch_props(subwc, fileprops)
- if wc is None:
- subwc.close()
+ try:
+ new_entries = self._get_new_file_ids(subwc)
+ if id is None:
+ if new_entries.has_key(path):
+ del new_entries[path]
+ else:
+ assert isinstance(id, str)
+ new_entries[path] = id
+ fileprops = self._get_branch_props()
+ self.branch.mapping.export_fileid_map_fileprops(new_entries, fileprops)
+ self._set_branch_props(subwc, fileprops)
+ finally:
+ if wc is None:
+ subwc.close()
def _get_changed_branch_props(self):
wc = self._get_wc()
- ret = {}
try:
+ ret = {}
(prop_changes, orig_props) = wc.get_prop_diffs(self.basedir)
for k,v in prop_changes:
ret[k] = (orig_props.get(k), v)
More information about the bazaar-commits
mailing list