diff options
-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}") |