Pre-commit fails for git >=2.25 if repo is on a Windows subst drive
See original GitHub issueCross reference for another issue with same apparent root cause: https://github.com/microsoft/vscode/issues/100274#issuecomment-646499795
Issue observed with pre-commit==2.7.1 and git 2.27. Issue resolved with downgrading git to 2.21 (I only have access to certain versions on my work machine).
Steps to recreate for pre-commit (some taken from the above cross-reference):
-
Install git >= 2.25 on Windows
-
Create a subst drive (
mkdir C:\subst_dir && subst Z: C:\subst_dir
) -
Create a git repo in there (
mkdir Z:\repo && cd /d Z:\repo && git init
) -
Add some python code, configure pre-commit, and run pre-commit.
Failure observed: An unexpected error has occurred: ValueError: path is on mount 'Z:', start on mount 'C:'
Diagnosis - it appears that the use of git rev-parse --show-toplevel
in pre_commit.main.get_root()
is suffering the same issue as seen in cross-referenced ticket; git will “see through” the subst command and rather than return a path on the subst-defined Z: drive, it will return the path from the C: drive. With this, after pre_commit.main._adjust_args_and_chdir()
calls pre_commit.main.get_root()
and does a chdir to the returned location, the following call to os.path.relpath(args.config)
then fails with the ValueError as above, because it sees the path to the config file being on Z:
but the current location being on C:
.
Afraid I don’t have a suggested resolution but wanted to flag this up. I’m not too familiar with Windows systems and I’m a long way from Admin access on my work machine so opportunities for testing are limited; this was discovered as my scratch space for repos is a subst drive.
Issue Analytics
- State:
- Created 3 years ago
- Comments:5 (3 by maintainers)
Top GitHub Comments
Using
--show-cdup
instead of--show-toplevel
, as was suggested in the VSCode issue listed in the OP, is worth considering.The original failure mode (ie. issuing the command from in .git) will fail, but will be a non-zero return code from Git and be caught by CalledProcessError.
I’ve pulled this into the project where the issue first arose and it’s working beautifully - thank you!