comparison hgext/shelve.py @ 19964:ff38dfbce4f8 stable

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()".
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Tue, 29 Oct 2013 01:03:43 +0900
parents 6f29cc567845
children 065e6f1c9259
comparison
equal deleted inserted replaced
19963:6f29cc567845 19964:ff38dfbce4f8
64 try: 64 try:
65 return self.vfs(self.fname, mode) 65 return self.vfs(self.fname, mode)
66 except IOError, err: 66 except IOError, err:
67 if err.errno != errno.ENOENT: 67 if err.errno != errno.ENOENT:
68 raise 68 raise
69 if mode[0] in 'wa': 69 raise util.Abort(_("shelved change '%s' not found") % self.name)
70 try:
71 self.vfs.mkdir()
72 return self.vfs(self.fname, mode)
73 except IOError, err:
74 if err.errno != errno.EEXIST:
75 raise
76 elif mode[0] == 'r':
77 raise util.Abort(_("shelved change '%s' not found") %
78 self.name)
79 70
80 class shelvedstate(object): 71 class shelvedstate(object):
81 """Handle persistence during unshelving operations. 72 """Handle persistence during unshelving operations.
82 73
83 Handles saving and restoring a shelved state. Ensures that different 74 Handles saving and restoring a shelved state. Ensures that different