diff --git a/git/index/base.py b/git/index/base.py index edc648750..1c56a219b 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -617,11 +617,11 @@ def _preprocess_add_items( paths = [] entries = [] # if it is a string put in list - if isinstance(items, str): + if isinstance(items, (str, os.PathLike)): items = [items] for item in items: - if isinstance(item, str): + if isinstance(item, (str, os.PathLike)): paths.append(self._to_relative_path(item)) elif isinstance(item, (Blob, Submodule)): entries.append(BaseIndexEntry.from_blob(item)) diff --git a/test/test_index.py b/test/test_index.py index d6e0fb819..3bebb382b 100644 --- a/test/test_index.py +++ b/test/test_index.py @@ -37,6 +37,8 @@ import os.path as osp from git.cmd import Git +from pathlib import Path + HOOKS_SHEBANG = "#!/usr/bin/env sh\n" is_win_without_bash = is_win and not shutil.which("bash.exe") @@ -943,3 +945,12 @@ def test_commit_msg_hook_fail(self, rw_repo): assert str(err) else: raise AssertionError("Should have caught a HookExecutionError") + + @with_rw_repo('HEAD') + def test_index_add_pathlike(self, rw_repo): + git_dir = Path(rw_repo.git_dir) + + file = git_dir / "file.txt" + file.touch() + + rw_repo.index.add(file) \ No newline at end of file