At http://people.samba.org/bzr/jelmer/bzr-svn/0.5
------------------------------------------------------------ revno: 2303 revision-id: [email protected] parent: [email protected] parent: [email protected] committer: Jelmer Vernooij <[email protected]> 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: [email protected] parent: [email protected] committer: Jelmer Vernooij <[email protected]> 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: [email protected] parent: [email protected] committer: Jelmer Vernooij <[email protected]> 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: [email protected] parent: [email protected] committer: Jelmer Vernooij <[email protected]> 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) -- bazaar-commits mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/bazaar-commits
