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()".
--- 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.