summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--repo/fun.py7
-rw-r--r--test/test_repo.py9
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}")