#!/bin/sh global test_description := ''tests for ref^{stuff}'' source ./test-lib.sh test_expect_success 'setup' ' echo blob >a-blob && git tag -a -m blob blob-tag $(git hash-object -w a-blob) && mkdir a-tree && echo moreblobs >a-tree/another-blob && git add . && TREE_SHA1=$(git write-tree) && git tag -a -m tree tree-tag "$TREE_SHA1" && git commit -m Initial && git tag -a -m commit commit-tag && git branch ref && git checkout master && echo modified >>a-blob && git add -u && git commit -m Modified && git branch modref && echo changed! >>a-blob && git add -u && git commit -m !Exp && git branch expref && echo changed >>a-blob && git add -u && git commit -m Changed && echo changed-again >>a-blob && git add -u && git commit -m Changed-again ' test_expect_success 'ref^{non-existent}' ' test_must_fail git rev-parse ref^{non-existent} ' test_expect_success 'ref^{}' ' git rev-parse ref >expected && git rev-parse ref^{} >actual && test_cmp expected actual && git rev-parse commit-tag^{} >actual && test_cmp expected actual ' test_expect_success 'ref^{commit}' ' git rev-parse ref >expected && git rev-parse ref^{commit} >actual && test_cmp expected actual && git rev-parse commit-tag^{commit} >actual && test_cmp expected actual && test_must_fail git rev-parse tree-tag^{commit} && test_must_fail git rev-parse blob-tag^{commit} ' test_expect_success 'ref^{tree}' ' echo $TREE_SHA1 >expected && git rev-parse ref^{tree} >actual && test_cmp expected actual && git rev-parse commit-tag^{tree} >actual && test_cmp expected actual && git rev-parse tree-tag^{tree} >actual && test_cmp expected actual && test_must_fail git rev-parse blob-tag^{tree} ' test_expect_success 'ref^{tag}' ' test_must_fail git rev-parse HEAD^{tag} && git rev-parse commit-tag >expected && git rev-parse commit-tag^{tag} >actual && test_cmp expected actual ' test_expect_success 'ref^{/.}' ' git rev-parse master >expected && git rev-parse master^{/.} >actual && test_cmp expected actual ' test_expect_success 'ref^{/non-existent}' ' test_must_fail git rev-parse master^{/non-existent} ' test_expect_success 'ref^{/Initial}' ' git rev-parse ref >expected && git rev-parse master^{/Initial} >actual && test_cmp expected actual ' test_expect_success 'ref^{/!Exp}' ' test_must_fail git rev-parse master^{/!Exp} ' test_expect_success 'ref^{/!}' ' test_must_fail git rev-parse master^{/!} ' test_expect_success 'ref^{/!!Exp}' ' git rev-parse expref >expected && git rev-parse master^{/!!Exp} >actual && test_cmp expected actual ' test_expect_success 'ref^{/!-}' ' test_must_fail git rev-parse master^{/!-} ' test_expect_success 'ref^{/!-.}' ' test_must_fail git rev-parse master^{/!-.} ' test_expect_success 'ref^{/!-non-existent}' ' git rev-parse master >expected && git rev-parse master^{/!-non-existent} >actual && test_cmp expected actual ' test_expect_success 'ref^{/!-Changed}' ' git rev-parse expref >expected && git rev-parse master^{/!-Changed} >actual && test_cmp expected actual ' test_expect_success 'ref^{/!-!Exp}' ' git rev-parse modref >expected && git rev-parse expref^{/!-!Exp} >actual && test_cmp expected actual ' test_done (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <"tests for ref^{stuff}">)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ )} { (SQ <"\n"> <"\techo blob >a-blob &&\n"> <"\tgit tag -a -m blob blob-tag $(git hash-object -w a-blob) &&\n"> <"\tmkdir a-tree &&\n"> <"\techo moreblobs >a-tree/another-blob &&\n"> <"\tgit add . &&\n"> <"\tTREE_SHA1=$(git write-tree) &&\n"> <"\tgit tag -a -m tree tree-tag \"$TREE_SHA1\" &&\n"> <"\tgit commit -m Initial &&\n"> <"\tgit tag -a -m commit commit-tag &&\n"> <"\tgit branch ref &&\n"> <"\tgit checkout master &&\n"> <"\techo modified >>a-blob &&\n"> <"\tgit add -u &&\n"> <"\tgit commit -m Modified &&\n"> <"\tgit branch modref &&\n"> <"\techo changed! >>a-blob &&\n"> <"\tgit add -u &&\n"> <"\tgit commit -m !Exp &&\n"> <"\tgit branch expref &&\n"> <"\techo changed >>a-blob &&\n"> <"\tgit add -u &&\n"> <"\tgit commit -m Changed &&\n"> <"\techo changed-again >>a-blob &&\n"> <"\tgit add -u &&\n"> <"\tgit commit -m Changed-again\n"> ) } ) (C {(test_expect_success)} {(SQ <"ref^{non-existent}">)} {(SQ <"\n"> <"\ttest_must_fail git rev-parse ref^{non-existent}\n">)} ) (C {(test_expect_success)} {(SQ <"ref^{}">)} { (SQ <"\n"> <"\tgit rev-parse ref >expected &&\n"> <"\tgit rev-parse ref^{} >actual &&\n"> <"\ttest_cmp expected actual &&\n"> <"\tgit rev-parse commit-tag^{} >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"ref^{commit}">)} { (SQ <"\n"> <"\tgit rev-parse ref >expected &&\n"> <"\tgit rev-parse ref^{commit} >actual &&\n"> <"\ttest_cmp expected actual &&\n"> <"\tgit rev-parse commit-tag^{commit} >actual &&\n"> <"\ttest_cmp expected actual &&\n"> <"\ttest_must_fail git rev-parse tree-tag^{commit} &&\n"> <"\ttest_must_fail git rev-parse blob-tag^{commit}\n"> ) } ) (C {(test_expect_success)} {(SQ <"ref^{tree}">)} { (SQ <"\n"> <"\techo $TREE_SHA1 >expected &&\n"> <"\tgit rev-parse ref^{tree} >actual &&\n"> <"\ttest_cmp expected actual &&\n"> <"\tgit rev-parse commit-tag^{tree} >actual &&\n"> <"\ttest_cmp expected actual &&\n"> <"\tgit rev-parse tree-tag^{tree} >actual &&\n"> <"\ttest_cmp expected actual &&\n"> <"\ttest_must_fail git rev-parse blob-tag^{tree}\n"> ) } ) (C {(test_expect_success)} {(SQ <"ref^{tag}">)} { (SQ <"\n"> <"\ttest_must_fail git rev-parse HEAD^{tag} &&\n"> <"\tgit rev-parse commit-tag >expected &&\n"> <"\tgit rev-parse commit-tag^{tag} >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"ref^{/.}">)} { (SQ <"\n"> <"\tgit rev-parse master >expected &&\n"> <"\tgit rev-parse master^{/.} >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"ref^{/non-existent}">)} {(SQ <"\n"> <"\ttest_must_fail git rev-parse master^{/non-existent}\n">)} ) (C {(test_expect_success)} {(SQ <"ref^{/Initial}">)} { (SQ <"\n"> <"\tgit rev-parse ref >expected &&\n"> <"\tgit rev-parse master^{/Initial} >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"ref^{/!Exp}">)} {(SQ <"\n"> <"\ttest_must_fail git rev-parse master^{/!Exp}\n">)} ) (C {(test_expect_success)} {(SQ <"ref^{/!}">)} {(SQ <"\n"> <"\ttest_must_fail git rev-parse master^{/!}\n">)} ) (C {(test_expect_success)} {(SQ <"ref^{/!!Exp}">)} { (SQ <"\n"> <"\tgit rev-parse expref >expected &&\n"> <"\tgit rev-parse master^{/!!Exp} >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"ref^{/!-}">)} {(SQ <"\n"> <"\ttest_must_fail git rev-parse master^{/!-}\n">)} ) (C {(test_expect_success)} {(SQ <"ref^{/!-.}">)} {(SQ <"\n"> <"\ttest_must_fail git rev-parse master^{/!-.}\n">)} ) (C {(test_expect_success)} {(SQ <"ref^{/!-non-existent}">)} { (SQ <"\n"> <"\tgit rev-parse master >expected &&\n"> <"\tgit rev-parse master^{/!-non-existent} >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"ref^{/!-Changed}">)} { (SQ <"\n"> <"\tgit rev-parse expref >expected &&\n"> <"\tgit rev-parse master^{/!-Changed} >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"ref^{/!-!Exp}">)} { (SQ <"\n"> <"\tgit rev-parse modref >expected &&\n"> <"\tgit rev-parse expref^{/!-!Exp} >actual &&\n"> <"\ttest_cmp expected actual\n"> ) } ) (C {(test_done)}) ] )