@@ -381,6 +381,9 @@ def mktiny():
381
381
def _assert_rev_parse_types (self , name , rev_obj ):
382
382
rev_parse = self .rorepo .rev_parse
383
383
384
+ if rev_obj .type == 'tag' :
385
+ rev_obj = rev_obj .object
386
+
384
387
# tree and blob type
385
388
obj = rev_parse (name + '^{tree}' )
386
389
assert obj == rev_obj .tree
@@ -439,9 +442,6 @@ def _assert_rev_parse(self, name):
439
442
def test_rev_parse (self ):
440
443
rev_parse = self .rorepo .rev_parse
441
444
442
- # it works with tags !
443
- self ._assert_rev_parse ('0.1.4' )
444
-
445
445
# start from reference
446
446
num_resolved = 0
447
447
for ref in Reference .iter_items (self .rorepo ):
@@ -461,29 +461,53 @@ def test_rev_parse(self):
461
461
# END for each reference
462
462
assert num_resolved
463
463
464
+ # it works with tags !
465
+ tag = self ._assert_rev_parse ('0.1.4' )
466
+ assert tag .type == 'tag'
467
+
464
468
# try full sha directly ( including type conversion )
469
+ assert tag .object == rev_parse (tag .object .hexsha )
470
+ self ._assert_rev_parse_types (tag .object .hexsha , tag .object )
465
471
466
472
467
473
# multiple tree types result in the same tree: HEAD^{tree}^{tree}:CHANGES
474
+ rev = '0.1.4^{tree}^{tree}'
475
+ assert rev_parse (rev ) == tag .object .tree
476
+ assert rev_parse (rev + ':CHANGES' ) == tag .object .tree ['CHANGES' ]
477
+
468
478
469
479
# try to get parents from first revision - it should fail as no such revision
470
480
# exists
481
+ first_rev = "33ebe7acec14b25c5f84f35a664803fcab2f7781"
482
+ commit = rev_parse (first_rev )
483
+ assert len (commit .parents ) == 0
484
+ assert commit .hexsha == first_rev
485
+ self .failUnlessRaises (BadObject , rev_parse , first_rev + "~" )
486
+ self .failUnlessRaises (BadObject , rev_parse , first_rev + "^" )
487
+
488
+ # short SHA1
489
+ commit2 = rev_parse (first_rev [:20 ])
490
+ assert commit2 == commit
491
+ commit2 = rev_parse (first_rev [:5 ])
492
+ assert commit2 == commit
493
+
471
494
472
495
# todo: dereference tag into a blob 0.1.7^{blob} - quite a special one
496
+ # needs a tag which points to a blob
473
497
474
- # dereference tag using ^{} notation
475
498
476
- # ref^0 returns commit being pointed to, same with ref~0
499
+ # ref^0 returns commit being pointed to, same with ref~0, and ^{}
477
500
tag = rev_parse ('0.1.4' )
478
- for token in ('~^' ):
479
- assert tag .object == rev_parse ('0.1.4%s0 ' % token )
501
+ for token in (( '~0' , '^0' , '^{}' ) ):
502
+ assert tag .object == rev_parse ('0.1.4%s ' % token )
480
503
# END handle multiple tokens
481
504
482
505
# missing closing brace commit^{tree
506
+ self .failUnlessRaises (ValueError , rev_parse , '0.1.4^{tree' )
483
507
484
508
# missing starting brace
509
+ self .failUnlessRaises (ValueError , rev_parse , '0.1.4^tree}' )
485
510
486
- # not enough parents ^10
487
511
488
512
# cannot handle rev-log for now
489
513
self .failUnlessRaises (ValueError , rev_parse , "hi@there" )
0 commit comments