Junio C Hamano | b9b727d | 2010-01-30 15:59:09 -0800 | [diff] [blame] | 1 | : included from 6002 and others |
| 2 | |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 3 | mkdir -p .git/refs/tags |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 4 | |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 5 | >sed.script |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 6 | |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 7 | # Answer the sha1 has associated with the tag. The tag must exist in .git/refs/tags |
| 8 | tag () { |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 9 | _tag=$1 |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 10 | test -f ".git/refs/tags/$_tag" || error "tag: \"$_tag\" does not exist" |
| 11 | cat ".git/refs/tags/$_tag" |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 12 | } |
| 13 | |
| 14 | # Generate a commit using the text specified to make it unique and the tree |
| 15 | # named by the tag specified. |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 16 | unique_commit () { |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 17 | _text=$1 |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 18 | _tree=$2 |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 19 | shift 2 |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 20 | echo "$_text" | git commit-tree $(tag "$_tree") "$@" |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 21 | } |
| 22 | |
| 23 | # Save the output of a command into the tag specified. Prepend |
Jon Seymour | 28346d2 | 2005-07-07 10:50:07 +1000 | [diff] [blame] | 24 | # a substitution script for the tag onto the front of sed.script |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 25 | save_tag () { |
Junio C Hamano | a6080a0 | 2007-06-07 00:04:01 -0700 | [diff] [blame] | 26 | _tag=$1 |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 27 | test -n "$_tag" || error "usage: save_tag tag commit-args ..." |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 28 | shift 1 |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 29 | "$@" >".git/refs/tags/$_tag" |
Jon Seymour | f6069c5 | 2005-07-06 20:11:29 +1000 | [diff] [blame] | 30 | |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 31 | echo "s/$(tag $_tag)/$_tag/g" >sed.script.tmp |
| 32 | cat sed.script >>sed.script.tmp |
Jon Seymour | 28346d2 | 2005-07-07 10:50:07 +1000 | [diff] [blame] | 33 | rm sed.script |
| 34 | mv sed.script.tmp sed.script |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 35 | } |
| 36 | |
Ondřej Bílka | 98e023d | 2013-07-29 10:18:21 +0200 | [diff] [blame] | 37 | # Replace unhelpful sha1 hashes with their symbolic equivalents |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 38 | entag () { |
Jon Seymour | 28346d2 | 2005-07-07 10:50:07 +1000 | [diff] [blame] | 39 | sed -f sed.script |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 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. |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 44 | as_author () { |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 45 | _author=$1 |
| 46 | shift 1 |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 47 | _save=$GIT_AUTHOR_EMAIL |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 48 | |
Bryan Donlan | 0e46e70 | 2008-05-04 01:37:58 -0400 | [diff] [blame] | 49 | GIT_AUTHOR_EMAIL="$_author" |
| 50 | export GIT_AUTHOR_EMAIL |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 51 | "$@" |
Junio C Hamano | 47e013f | 2006-02-07 15:35:46 -0800 | [diff] [blame] | 52 | if test -z "$_save" |
| 53 | then |
| 54 | unset GIT_AUTHOR_EMAIL |
| 55 | else |
Bryan Donlan | 0e46e70 | 2008-05-04 01:37:58 -0400 | [diff] [blame] | 56 | GIT_AUTHOR_EMAIL="$_save" |
| 57 | export GIT_AUTHOR_EMAIL |
Junio C Hamano | 47e013f | 2006-02-07 15:35:46 -0800 | [diff] [blame] | 58 | fi |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 59 | } |
| 60 | |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 61 | commit_date () { |
| 62 | _commit=$1 |
| 63 | git cat-file commit $_commit | |
| 64 | sed -n "s/^committer .*> \([0-9]*\) .*/\1/p" |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 65 | } |
| 66 | |
Junio C Hamano | 841dc69 | 2013-06-21 10:29:59 -0700 | [diff] [blame] | 67 | # Assign the value of fake date to a variable, but |
| 68 | # allow fairly common "1971-08-16 00:00" to be omittd |
| 69 | assign_fake_date () { |
| 70 | case "$2" in |
| 71 | ??:??:??) eval "$1='1971-08-16 $2'" ;; |
| 72 | ??:??) eval "$1='1971-08-16 00:$2'" ;; |
| 73 | ??) eval "$1='1971-08-16 00:00:$2'" ;; |
| 74 | *) eval "$1='$2'" ;; |
| 75 | esac |
| 76 | } |
| 77 | |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 78 | on_committer_date () { |
Junio C Hamano | 841dc69 | 2013-06-21 10:29:59 -0700 | [diff] [blame] | 79 | assign_fake_date GIT_COMMITTER_DATE "$1" |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 80 | export GIT_COMMITTER_DATE |
Junio C Hamano | 841dc69 | 2013-06-21 10:29:59 -0700 | [diff] [blame] | 81 | shift 1 |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 82 | "$@" |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 83 | } |
| 84 | |
Junio C Hamano | 1166731 | 2013-06-21 11:03:32 -0700 | [diff] [blame] | 85 | on_dates () { |
| 86 | assign_fake_date GIT_COMMITTER_DATE "$1" |
| 87 | assign_fake_date GIT_AUTHOR_DATE "$2" |
| 88 | export GIT_COMMITTER_DATE GIT_AUTHOR_DATE |
| 89 | shift 2 |
| 90 | "$@" |
| 91 | } |
| 92 | |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 93 | # Execute a command and suppress any error output. |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 94 | hide_error () { |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 95 | "$@" 2>/dev/null |
| 96 | } |
| 97 | |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 98 | check_output () { |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 99 | _name=$1 |
| 100 | shift 1 |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 101 | if eval "$*" | entag >"$_name.actual" |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 102 | then |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 103 | test_cmp "$_name.expected" "$_name.actual" |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 104 | else |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 105 | return 1 |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 106 | fi |
| 107 | } |
| 108 | |
| 109 | # Turn a reasonable test description into a reasonable test name. |
| 110 | # All alphanums translated into -'s which are then compressed and stripped |
| 111 | # from front and back. |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 112 | name_from_description () { |
Jeff King | aab0abf | 2008-03-14 20:32:33 -0400 | [diff] [blame] | 113 | perl -pe ' |
| 114 | s/[^A-Za-z0-9.]/-/g; |
| 115 | s/-+/-/g; |
| 116 | s/-$//; |
| 117 | s/^-//; |
| 118 | y/A-Z/a-z/; |
| 119 | ' |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 120 | } |
| 121 | |
| 122 | |
| 123 | # Execute the test described by the first argument, by eval'ing |
| 124 | # command line specified in the 2nd argument. Check the status code |
Junio C Hamano | a6080a0 | 2007-06-07 00:04:01 -0700 | [diff] [blame] | 125 | # is zero and that the output matches the stream read from |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 126 | # stdin. |
| 127 | test_output_expect_success() |
Junio C Hamano | a6080a0 | 2007-06-07 00:04:01 -0700 | [diff] [blame] | 128 | { |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 129 | _description=$1 |
Junio C Hamano | 50e5a25 | 2013-06-21 10:12:48 -0700 | [diff] [blame] | 130 | _test=$2 |
| 131 | test $# -eq 2 || |
| 132 | error "usage: test_output_expect_success description test <<EOF ... EOF" |
| 133 | |
| 134 | _name=$(echo $_description | name_from_description) |
| 135 | cat >"$_name.expected" |
Junio C Hamano | a6080a0 | 2007-06-07 00:04:01 -0700 | [diff] [blame] | 136 | test_expect_success "$_description" "check_output $_name \"$_test\"" |
Jon Seymour | ce11895 | 2005-07-06 20:11:24 +1000 | [diff] [blame] | 137 | } |