1: included from 6002 and others 2 3mkdir-p .git/refs/tags 4 5>sed.script 6 7# Answer the sha1 has associated with the tag. The tag must exist in .git/refs/tags 8tag () { 9 _tag=$1 10test -f".git/refs/tags/$_tag"|| error "tag:\"$_tag\"does not exist" 11cat".git/refs/tags/$_tag" 12} 13 14# Generate a commit using the text specified to make it unique and the tree 15# named by the tag specified. 16unique_commit () { 17 _text=$1 18 _tree=$2 19shift2 20echo"$_text"| git commit-tree$(tag "$_tree")"$@" 21} 22 23# Save the output of a command into the tag specified. Prepend 24# a substitution script for the tag onto the front of sed.script 25save_tag () { 26 _tag=$1 27test -n"$_tag"|| error "usage: save_tag tag commit-args ..." 28shift1 29"$@">".git/refs/tags/$_tag" 30 31echo"s/$(tag $_tag)/$_tag/g">sed.script.tmp 32cat sed.script>>sed.script.tmp 33rm sed.script 34mv sed.script.tmp sed.script 35} 36 37# Replace unhelpful sha1 hashses with their symbolic equivalents 38entag () { 39sed-fsed.script 40} 41 42# Execute a command after first saving, then setting the GIT_AUTHOR_EMAIL 43# tag to a specified value. Restore the original value on return. 44as_author () { 45 _author=$1 46shift1 47 _save=$GIT_AUTHOR_EMAIL 48 49 GIT_AUTHOR_EMAIL="$_author" 50export GIT_AUTHOR_EMAIL 51"$@" 52iftest -z"$_save" 53then 54unset GIT_AUTHOR_EMAIL 55else 56 GIT_AUTHOR_EMAIL="$_save" 57export GIT_AUTHOR_EMAIL 58fi 59} 60 61commit_date () { 62 _commit=$1 63 git cat-file commit $_commit| 64sed-n"s/^committer .*> \([0-9]*\) .*/\1/p" 65} 66 67on_committer_date () { 68 _date=$1 69shift1 70 GIT_COMMITTER_DATE="$_date" 71export GIT_COMMITTER_DATE 72"$@" 73unset GIT_COMMITTER_DATE 74} 75 76# Execute a command and suppress any error output. 77hide_error () { 78"$@"2>/dev/null 79} 80 81check_output () { 82 _name=$1 83shift1 84ifeval"$*"| entag >"$_name.actual" 85then 86 test_cmp "$_name.expected""$_name.actual" 87else 88return1 89fi 90} 91 92# Turn a reasonable test description into a reasonable test name. 93# All alphanums translated into -'s which are then compressed and stripped 94# from front and back. 95name_from_description () { 96 perl -pe' 97 s/[^A-Za-z0-9.]/-/g; 98 s/-+/-/g; 99 s/-$//; 100 s/^-//; 101 y/A-Z/a-z/; 102 ' 103} 104 105 106# Execute the test described by the first argument, by eval'ing 107# command line specified in the 2nd argument. Check the status code 108# is zero and that the output matches the stream read from 109# stdin. 110test_output_expect_success() 111{ 112 _description=$1 113 _test=$2 114test$#-eq2|| 115 error "usage: test_output_expect_success description test <<EOF ... EOF" 116 117 _name=$(echo $_description | name_from_description) 118cat>"$_name.expected" 119 test_expect_success "$_description""check_output$_name\"$_test\"" 120}