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