localrepo: handle ValueError during repository opening
authorGregory Szorc <gregory.szorc@gmail.com>
Sat, 18 Jan 2020 10:07:07 -0800
changeset 44943 9e5b4dbe8ff2
parent 44942 25512a65cefd
child 44944 617cd3b1e9cd
localrepo: handle ValueError during repository opening Python 3.8 can raise ValueError on attempt of an I/O operation against an illegal path. This was causing test-remotefilelog-gc.t to fail on Python 3.8. This commit teaches repository opening to handle ValueError and re-raise an Abort on failure. An arguably better solution would be to implement this logic in the vfs layer. But that seems like a bag of worms and I don't want to go down that rabbit hole. Until users report uncaught ValueError exceptions in the wild, I think it is fine to patch this at the only occurrence our test harness is finding it. Differential Revision: https://phab.mercurial-scm.org/D7944
mercurial/localrepo.py
--- a/mercurial/localrepo.py	Wed May 27 12:56:13 2020 +0200
+++ b/mercurial/localrepo.py	Sat Jan 18 10:07:07 2020 -0800
@@ -509,6 +509,11 @@
         except OSError as e:
             if e.errno != errno.ENOENT:
                 raise
+        except ValueError as e:
+            # Can be raised on Python 3.8 when path is invalid.
+            raise error.Abort(
+                _(b'invalid path %s: %s') % (path, pycompat.bytestr(e))
+            )
 
         raise error.RepoError(_(b'repository %s not found') % path)