Closed
Description
This is a weird scenario, but if you init git repo in the root directory(e.g. D:\) and try to add a file using gitpython, it will throw a ValueError:
Absolute path `D:\\file` is not in git repository at `D:\\`
The reason for this is improper validation in _to_relative_path method located at git/index/base.py:
def _to_relative_path(self, path):
""":return: Version of path relative to our git directory or raise ValueError
if it is not within our git direcotory"""
if not osp.isabs(path):
return path
if self.repo.bare:
raise InvalidGitRepositoryError("require non-bare repository")
relative_path = path.replace(self.repo.working_tree_dir + os.sep, "")
if relative_path == path:
raise ValueError("Absolute path %r is not in git repository at %r" % (path, self.repo.working_tree_dir))
return relative_path
I.e. when path is /file
and working_tree_dir is /
, relative_path stays equal to path, because self.repo.working_tree + os.sep
is equal to //
. The way to solve this is to simply use os.path.relpath methond. Please see pull-request attached.