|  | #!/bin/sh | 
|  |  | 
|  | test_description='tests for ref^{stuff}' | 
|  |  | 
|  | . ./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 | 
|  | ' | 
|  |  | 
|  | 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_done |