summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuslan Kuprieiev <kupruser@gmail.com>2018-04-03 14:39:44 +0300
committerSebastian Thiel <byronimo@gmail.com>2018-04-04 09:35:57 +0200
commit0857d33852b6b2f4d7bc470b4c97502c7f978180 (patch)
tree92fa55c07313d4fb8459716413eb47dcd5b62662
parente79a3f8f6bc6594002a0747dd4595bc6b88a2b27 (diff)
downloadgitpython-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.py5
-rw-r--r--git/test/test_index.py15
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