shelve: remove useless and incorrect code paths for file access stable
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Tue, 29 Oct 2013 01:03:43 +0900
branchstable
changeset 19964 ff38dfbce4f8
parent 19963 6f29cc567845
child 19965 f1dd988a8bcc
shelve: remove useless and incorrect code paths for file access This patch removes code paths in "shelvedfile.opener()", because: - explicit "vfs.mkdir()" invocation is useless "vfs.__call__()" for modes other than "read" creates parent directory of target file automatically by "util.ensuredirs()". - mode checking in "except IOError" code path is useless ENOENT occurs only for "read" mode, because target file is created forcibly for other modes. - there is no explicit "return" statement in the code path for "except IOError" if "mode[0] in 'wa'" this is incorrect, because None may be returnd unexpectedly, even though it seems the EEXIST case in the directory creation race for ".hg/shelved" and is very rare. this directory creation race is also treated in "util.ensuredirs()".
hgext/shelve.py
--- a/hgext/shelve.py	Tue Oct 29 01:03:43 2013 +0900
+++ b/hgext/shelve.py	Tue Oct 29 01:03:43 2013 +0900
@@ -66,16 +66,7 @@
         except IOError, err:
             if err.errno != errno.ENOENT:
                 raise
-            if mode[0] in 'wa':
-                try:
-                    self.vfs.mkdir()
-                    return self.vfs(self.fname, mode)
-                except IOError, err:
-                    if err.errno != errno.EEXIST:
-                        raise
-            elif mode[0] == 'r':
-                raise util.Abort(_("shelved change '%s' not found") %
-                                 self.name)
+            raise util.Abort(_("shelved change '%s' not found") % self.name)
 
 class shelvedstate(object):
     """Handle persistence during unshelving operations.