diff options
author | Ruslan Kuprieiev <kupruser@gmail.com> | 2018-04-03 14:39:44 +0300 |
---|---|---|
committer | Sebastian Thiel <byronimo@gmail.com> | 2018-04-04 09:35:57 +0200 |
commit | 0857d33852b6b2f4d7bc470b4c97502c7f978180 (patch) | |
tree | 92fa55c07313d4fb8459716413eb47dcd5b62662 | |
parent | e79a3f8f6bc6594002a0747dd4595bc6b88a2b27 (diff) | |
download | gitpython-0857d33852b6b2f4d7bc470b4c97502c7f978180.tar.gz |
git: index: base: use os.path.relpath
Fixes #743
Signed-off-by: Ruslan Kuprieiev <kupruser@gmail.com>
-rw-r--r-- | git/index/base.py | 5 | ||||
-rw-r--r-- | git/test/test_index.py | 15 |
2 files changed, 17 insertions, 3 deletions
diff --git a/git/index/base.py b/git/index/base.py index 14a3117a..04a3934d 100644 --- a/git/index/base.py +++ b/git/index/base.py @@ -561,10 +561,9 @@ class IndexFile(LazyMixin, diff.Diffable, Serializable): 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: + if not path.startswith(self.repo.working_tree_dir): raise ValueError("Absolute path %r is not in git repository at %r" % (path, self.repo.working_tree_dir)) - return relative_path + return os.path.relpath(path, self.repo.working_tree_dir) def _preprocess_add_items(self, items): """ Split the items into two lists of path strings and BaseEntries. """ diff --git a/git/test/test_index.py b/git/test/test_index.py index 9be4031d..a30d314b 100644 --- a/git/test/test_index.py +++ b/git/test/test_index.py @@ -838,6 +838,21 @@ class TestIndex(TestBase): r.index.add([fp]) r.index.commit('Added [.exe') + def test__to_relative_path_at_root(self): + root = osp.abspath(os.sep) + + class Mocked(object): + bare = False + git_dir = root + working_tree_dir = root + + repo = Mocked() + path = os.path.join(root, 'file') + index = IndexFile(repo) + + rel = index._to_relative_path(path) + self.assertEqual(rel, os.path.relpath(path, root)) + @with_rw_repo('HEAD', bare=True) def test_pre_commit_hook_success(self, rw_repo): index = rw_repo.index |