t5004: avoid using tar for checking emptiness of archive
[git/mjg.git] / t / lib-t6000.sh
blobea25dd89e505525507c16c62d91fb07c092b064a
1 : included from 6002 and others
3 [ -d .git/refs/tags ] || mkdir -p .git/refs/tags
5 :> sed.script
7 # Answer the sha1 has associated with the tag. The tag must exist in .git or .git/refs/tags
8 tag()
10 _tag=$1
11 [ -f .git/refs/tags/$_tag ] || error "tag: \"$_tag\" does not exist"
12 cat .git/refs/tags/$_tag
15 # Generate a commit using the text specified to make it unique and the tree
16 # named by the tag specified.
17 unique_commit()
19 _text=$1
20 _tree=$2
21 shift 2
22 echo $_text | git commit-tree $(tag $_tree) "$@"
25 # Save the output of a command into the tag specified. Prepend
26 # a substitution script for the tag onto the front of sed.script
27 save_tag()
29 _tag=$1
30 [ -n "$_tag" ] || error "usage: save_tag tag commit-args ..."
31 shift 1
32 "$@" >.git/refs/tags/$_tag
34 echo "s/$(tag $_tag)/$_tag/g" > sed.script.tmp
35 cat sed.script >> sed.script.tmp
36 rm sed.script
37 mv sed.script.tmp sed.script
40 # Replace unhelpful sha1 hashses with their symbolic equivalents
41 entag()
43 sed -f sed.script
46 # Execute a command after first saving, then setting the GIT_AUTHOR_EMAIL
47 # tag to a specified value. Restore the original value on return.
48 as_author()
50 _author=$1
51 shift 1
52 _save=$GIT_AUTHOR_EMAIL
54 GIT_AUTHOR_EMAIL="$_author"
55 export GIT_AUTHOR_EMAIL
56 "$@"
57 if test -z "$_save"
58 then
59 unset GIT_AUTHOR_EMAIL
60 else
61 GIT_AUTHOR_EMAIL="$_save"
62 export GIT_AUTHOR_EMAIL
66 commit_date()
68 _commit=$1
69 git cat-file commit $_commit | sed -n "s/^committer .*> \([0-9]*\) .*/\1/p"
72 on_committer_date()
74 _date=$1
75 shift 1
76 GIT_COMMITTER_DATE="$_date"
77 export GIT_COMMITTER_DATE
78 "$@"
79 unset GIT_COMMITTER_DATE
82 # Execute a command and suppress any error output.
83 hide_error()
85 "$@" 2>/dev/null
88 check_output()
90 _name=$1
91 shift 1
92 if eval "$*" | entag > $_name.actual
93 then
94 test_cmp $_name.expected $_name.actual
95 else
96 return 1;
100 # Turn a reasonable test description into a reasonable test name.
101 # All alphanums translated into -'s which are then compressed and stripped
102 # from front and back.
103 name_from_description()
105 perl -pe '
106 s/[^A-Za-z0-9.]/-/g;
107 s/-+/-/g;
108 s/-$//;
109 s/^-//;
110 y/A-Z/a-z/;
115 # Execute the test described by the first argument, by eval'ing
116 # command line specified in the 2nd argument. Check the status code
117 # is zero and that the output matches the stream read from
118 # stdin.
119 test_output_expect_success()
121 _description=$1
122 _test=$2
123 [ $# -eq 2 ] || error "usage: test_output_expect_success description test <<EOF ... EOF"
124 _name=$(echo $_description | name_from_description)
125 cat > $_name.expected
126 test_expect_success "$_description" "check_output $_name \"$_test\""