Mercurial > public > mercurial-scm > hg
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 |