Skip to content

Pre-commit fails for git >=2.25 if repo is on a Windows subst drive #1610

@jcameron73

Description

@jcameron73

Cross reference for another issue with same apparent root cause: microsoft/vscode#100274 (comment)

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions