@@ -394,7 +394,12 @@ def _assert_rev_parse(self, name):
394394 """tries multiple different rev-parse syntaxes with the given name
395395 :return: parsed object"""
396396 rev_parse = self .rorepo .rev_parse
397- obj = rev_parse (name )
397+ orig_obj = rev_parse (name )
398+ if orig_obj .type == 'tag' :
399+ obj = orig_obj .object
400+ else :
401+ obj = orig_obj
402+ # END deref tags by default
398403
399404 # try history
400405 rev = name + "~"
@@ -404,10 +409,9 @@ def _assert_rev_parse(self, name):
404409
405410 # history with number
406411 ni = 11
407- history = list ()
408- citer = obj .traverse ()
412+ history = [obj .parents [0 ]]
409413 for pn in range (ni ):
410- history .append (citer . next () )
414+ history .append (history [ - 1 ]. parents [ 0 ] )
411415 # END get given amount of commits
412416
413417 for pn in range (11 ):
@@ -430,11 +434,14 @@ def _assert_rev_parse(self, name):
430434 self ._assert_rev_parse_types (rev , obj2 )
431435 # END for each parent
432436
433- return obj
437+ return orig_obj
434438
435439 def test_rev_parse (self ):
436440 rev_parse = self .rorepo .rev_parse
437441
442+ # it works with tags !
443+ self ._assert_rev_parse ('0.1.4' )
444+
438445 # start from reference
439446 num_resolved = 0
440447 for ref in Reference .iter_items (self .rorepo ):
@@ -447,7 +454,6 @@ def test_rev_parse(self):
447454 num_resolved += 1
448455 except BadObject :
449456 print "failed on %s" % path_section
450- raise
451457 # is fine, in case we have something like 112, which belongs to remotes/rname/merge-requests/112
452458 pass
453459 # END exception handling
@@ -467,6 +473,12 @@ def test_rev_parse(self):
467473
468474 # dereference tag using ^{} notation
469475
476+ # ref^0 returns commit being pointed to, same with ref~0
477+ tag = rev_parse ('0.1.4' )
478+ for token in ('~^' ):
479+ assert tag .object == rev_parse ('0.1.4%s0' % token )
480+ # END handle multiple tokens
481+
470482 # missing closing brace commit^{tree
471483
472484 # missing starting brace
0 commit comments