Skip to content

[Windows] Hooks for submodules that are configured outside the submodule repository lead to error in PurePath.relative_to #1999

Open
@visq

Description

@visq

Issue: Repo.Index.commit fails during execution of post-commit hook
Root Cause: The .git config does not reside inside the submodule repository in the problematic setup.

    Repo/SubmoduleA$ cat .git
    gitdir: ../.git/modules/SubmoduleA

However, this is expected by the commit hook on windows:

    if sys.platform == "win32" and not _has_file_extension(hp):
        # Windows only uses extensions to determine how to open files
        # (doesn't understand shebangs). Try using bash to run the hook.
        relative_hp = Path(hp).relative_to(index.repo.working_dir).as_posix()
        cmd = ["bash.exe", relative_hp]

Reproduce: Track files with git-lfs and have the hooks outside the repository directory

Fix:

    if sys.platform == "win32" and not _has_file_extension(hp):
        # Windows only uses extensions to determine how to open files
        # (doesn't understand shebangs). Try using bash to run the hook.
        relative_hp = Path(hp).relative_to(index.repo.working_dir, walk_up=True).as_posix()
        cmd = ["bash.exe", relative_hp]

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