Rev 4642: bzrlib.transform.TreeTransform.tree_kind and in file:///home/vila/src/bzr/experimental/conflict-manager/

Vincent Ladeuil v.ladeuil+lp at free.fr
Wed Aug 25 14:02:32 BST 2010


At file:///home/vila/src/bzr/experimental/conflict-manager/

------------------------------------------------------------
revno: 4642
revision-id: v.ladeuil+lp at free.fr-20100825130232-p6ti8njzv5dn322t
parent: v.ladeuil+lp at free.fr-20100825102041-g4gn4h23ydsi3ngn
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: cleanup
timestamp: Wed 2010-08-25 15:02:32 +0200
message:
  bzrlib.transform.TreeTransform.tree_kind and
  bzrlib.transform.TransformPreview.tree_kind also return None instead of
  raising NoSuchFile.
-------------- next part --------------
=== modified file 'NEWS'
--- a/NEWS	2010-08-25 10:20:41 +0000
+++ b/NEWS	2010-08-25 13:02:32 +0000
@@ -160,9 +160,10 @@
 API Changes
 ***********
 
-* ``bzrlib.transform.TreeTransformBase.final_kind`` now returns None
-  instead of raising NoSuchFile.
-  (Vincent Ladeuil)
+* ``bzrlib.transform.TreeTransformBase.final_kind``,
+  ``bzrlib.transform.TreeTransform.tree_kind`` and
+  ``bzrlib.transform.TransformPreview.tree_kind``now return None instead
+  of raising NoSuchFile.  (Vincent Ladeuil)
 
 * InventoryEntry instances now raise AttributeError if you try to assign
   to attributes that are irrelevant to that kind of entry.  e.g. setting

=== modified file 'bzrlib/merge.py'
--- a/bzrlib/merge.py	2010-08-25 10:20:41 +0000
+++ b/bzrlib/merge.py	2010-08-25 13:02:32 +0000
@@ -1397,10 +1397,7 @@
             self.tt.version_file(file_id, trans_id)
         # The merge has been performed, so the old contents should not be
         # retained.
-        try:
-            self.tt.delete_contents(trans_id)
-        except errors.NoSuchFile:
-            pass
+        self.tt.delete_contents(trans_id)
         return result
 
     def _default_other_winner_merge(self, merge_hook_params):

=== modified file 'bzrlib/transform.py'
--- a/bzrlib/transform.py	2010-08-25 10:20:41 +0000
+++ b/bzrlib/transform.py	2010-08-25 13:02:32 +0000
@@ -315,10 +315,9 @@
 
     def delete_contents(self, trans_id):
         """Schedule the contents of a path entry for deletion"""
-        # Ensure that the object exists in the WorkingTree, this will raise an
-        # exception if there is a problem
-        self.tree_kind(trans_id)
-        self._removed_contents.add(trans_id)
+        kind = self.tree_kind(trans_id)
+        if kind is not None:
+            self._removed_contents.add(trans_id)
 
     def cancel_deletion(self, trans_id):
         """Cancel a scheduled deletion"""
@@ -389,8 +388,8 @@
         changed_kind = set(self._removed_contents)
         changed_kind.intersection_update(self._new_contents)
         changed_kind.difference_update(new_ids)
-        changed_kind = (t for t in changed_kind if self.tree_kind(t) !=
-                        self.final_kind(t))
+        changed_kind = (t for t in changed_kind
+                        if self.tree_kind(t) != self.final_kind(t))
         new_ids.update(changed_kind)
         return sorted(FinalPaths(self).get_paths(new_ids))
 
@@ -406,13 +405,7 @@
         elif trans_id in self._removed_contents:
             return None
         else:
-            # FIXME?: One step forward, one step backwards, tree_kind raise
-            # NoSuchFile instead of returning None -- vila 20100415
-            try:
-                kind = self.tree_kind(trans_id)
-            except errors.NoSuchFile:
-                kind = None
-            return kind
+            return self.tree_kind(trans_id)
 
     def tree_file_id(self, trans_id):
         """Determine the file id associated with the trans_id in the tree"""
@@ -631,9 +624,7 @@
         """Check for overwrites (not permitted on Win32)"""
         conflicts = []
         for trans_id in self._new_contents:
-            try:
-                self.tree_kind(trans_id)
-            except NoSuchFile:
+            if self.tree_kind(trans_id) is None:
                 continue
             if trans_id not in self._removed_contents:
                 conflicts.append(('overwrite', trans_id,
@@ -1407,18 +1398,15 @@
     def tree_kind(self, trans_id):
         """Determine the file kind in the working tree.
 
-        Raises NoSuchFile if the file does not exist
+        :returns: The file kind or None if the file does not exist
         """
         path = self._tree_id_paths.get(trans_id)
         if path is None:
-            raise NoSuchFile(None)
+            return None
         try:
             return file_kind(self._tree.abspath(path))
-        except OSError, e:
-            if e.errno != errno.ENOENT:
-                raise
-            else:
-                raise NoSuchFile(path)
+        except errors.NoSuchFile:
+            return None
 
     def _set_mode(self, trans_id, mode_id, typefunc):
         """Set the mode of new file contents.
@@ -1712,9 +1700,12 @@
     def tree_kind(self, trans_id):
         path = self._tree_id_paths.get(trans_id)
         if path is None:
-            raise NoSuchFile(None)
+            return None
         file_id = self._tree.path2id(path)
-        return self._tree.kind(file_id)
+        try:
+            return self._tree.kind(file_id)
+        except errors.NoSuchFile:
+            return None
 
     def _set_mode(self, trans_id, mode_id, typefunc):
         """Set the mode of new file contents.



More information about the bazaar-commits mailing list