diff options
author | Sebastian Thiel <byronimo@gmail.com> | 2010-11-24 09:37:40 +0100 |
---|---|---|
committer | Sebastian Thiel <byronimo@gmail.com> | 2010-11-24 09:37:40 +0100 |
commit | 8dd51f1d63fa5ee704c2bdf4cb607bb6a71817d2 (patch) | |
tree | 9a3c15132e7f43f1431570f83c696e4d7d5bea49 | |
parent | 7029773512eee5a0bb765b82cfdd90fd5ab34e15 (diff) | |
download | gitpython-8dd51f1d63fa5ee704c2bdf4cb607bb6a71817d2.tar.gz |
Improved refparse error handling in case of out-of-bound indices
-rw-r--r-- | repo/fun.py | 7 | ||||
-rw-r--r-- | test/test_repo.py | 9 |
2 files changed, 14 insertions, 2 deletions
diff --git a/repo/fun.py b/repo/fun.py index 7b842c38..aa938477 100644 --- a/repo/fun.py +++ b/repo/fun.py @@ -190,7 +190,12 @@ def rev_parse(repo, rev): raise NotImplementedError("Support for additional @{...} modes not implemented") #END handle revlog index - entry = ref.log()[revlog_index] + try: + entry = ref.log()[revlog_index] + except IndexError: + raise BadObject("Invalid revlog index: %i" % revlog_index) + #END handle index out of bound + obj = Object.new_from_sha(repo, hex_to_bin(entry.newhexsha)) # make it pass the following checks diff --git a/test/test_repo.py b/test/test_repo.py index 820fed26..95b0750a 100644 --- a/test/test_repo.py +++ b/test/test_repo.py @@ -557,12 +557,19 @@ class TestRepo(TestBase): # uses HEAD.ref by default assert rev_parse('@{0}') == head.commit if not head.is_detached: - assert rev_parse('%s@{0}' % head.ref.name) == head.ref.commit + refspec = '%s@{0}' % head.ref.name + assert rev_parse(refspec) == head.ref.commit + # all additional specs work as well + assert rev_parse(refspec+"^{tree}") == head.commit.tree + assert rev_parse(refspec+":CHANGES").type == 'blob' #END operate on non-detached head # the last position assert rev_parse('@{1}') != head.commit + # position doesn't exist + self.failUnlessRaises(BadObject, rev_parse, '@{10000}') + # currently, nothing more is supported self.failUnlessRaises(NotImplementedError, rev_parse, "@{1 week ago}") |