comparison mercurial/posix.py @ 49306:2e726c934fcd

py3: catch FileNotFoundError instead of checking errno == ENOENT
author Manuel Jacob <me@manueljacob.de>
date Tue, 31 May 2022 22:50:01 +0200
parents 53e9422a9b45
children 6f2a57ba2d13
comparison
equal deleted inserted replaced
49305:53e9422a9b45 49306:2e726c934fcd
173 """Copy the file mode from the file at path src to dst. 173 """Copy the file mode from the file at path src to dst.
174 If src doesn't exist, we're using mode instead. If mode is None, we're 174 If src doesn't exist, we're using mode instead. If mode is None, we're
175 using umask.""" 175 using umask."""
176 try: 176 try:
177 st_mode = os.lstat(src).st_mode & 0o777 177 st_mode = os.lstat(src).st_mode & 0o777
178 except OSError as inst: 178 except FileNotFoundError:
179 if inst.errno != errno.ENOENT:
180 raise
181 st_mode = mode 179 st_mode = mode
182 if st_mode is None: 180 if st_mode is None:
183 st_mode = ~umask 181 st_mode = ~umask
184 st_mode &= 0o666 182 st_mode &= 0o666
185 183
224 checkisexec = os.path.join(cachedir, b'checkisexec') 222 checkisexec = os.path.join(cachedir, b'checkisexec')
225 checknoexec = os.path.join(cachedir, b'checknoexec') 223 checknoexec = os.path.join(cachedir, b'checknoexec')
226 224
227 try: 225 try:
228 m = os.stat(checkisexec).st_mode 226 m = os.stat(checkisexec).st_mode
229 except OSError as e: 227 except FileNotFoundError:
230 if e.errno != errno.ENOENT:
231 raise
232 # checkisexec does not exist - fall through ... 228 # checkisexec does not exist - fall through ...
229 pass
233 else: 230 else:
234 # checkisexec exists, check if it actually is exec 231 # checkisexec exists, check if it actually is exec
235 if m & EXECFLAGS != 0: 232 if m & EXECFLAGS != 0:
236 # ensure checkisexec exists, check it isn't exec 233 # ensure checkisexec exists, check it isn't exec
237 try: 234 try:
238 m = os.stat(checknoexec).st_mode 235 m = os.stat(checknoexec).st_mode
239 except OSError as e: 236 except FileNotFoundError:
240 if e.errno != errno.ENOENT:
241 raise
242 open(checknoexec, b'w').close() # might fail 237 open(checknoexec, b'w').close() # might fail
243 m = os.stat(checknoexec).st_mode 238 m = os.stat(checknoexec).st_mode
244 if m & EXECFLAGS == 0: 239 if m & EXECFLAGS == 0:
245 # check-exec is exec and check-no-exec is not exec 240 # check-exec is exec and check-no-exec is not exec
246 return True 241 return True