regression: stop checking for existence of refs directories
[guilt.git] / regression / scaffold
blobdf60c09fb27a89ffb1ec978aac215f8699346593
1 if [ -z "$REG_DIR" ]; then
2         echo "ERROR: You cannot run tests by hand" >&2
3         exit 2
4 fi
6 set -e
8 export PATH=$PWD/..:$PATH
10 export TZ="UTC"
11 export TOUCH_DATE="200701010000.00"
12 export GIT_AUTHOR_DATE="2007-01-01 00:00:00 UTC"
13 export GIT_COMMITTER_DATE="2007-01-01 00:00:00 UTC"
14 export GIT_AUTHOR_NAME="Author Name"
15 export GIT_AUTHOR_EMAIL="author@email"
16 export GIT_COMMITTER_NAME="Commiter Name"
17 export GIT_COMMITTER_EMAIL="commiter@email"
19 # usage: die <msg>
20 function die
22         echo "Error: $@" >&2
23         exit 1
26 UNAME_S=`uname -s`
28 if [ -r "$REG_DIR/../os.$UNAME_S" ]; then
29         . "$REG_DIR/../os.$UNAME_S"
30 else
31         die "Unsupported operating system: $UNAME_S"
34 function replace_path
36         sed -e "s,$PWD,PATH,g" \
37             -e "s,$REG_DIR/\.\./,,g" \
38             -e "s,^Usage: guilt-,Usage: guilt ,g" \
39             -e "s,\.\.\. initial, initial,g" \
40             -e "s,^Already on\( branch\)\? [\"']\([^\"']*\)[\"']$,Already on \"\2\",g" \
41             -e "s,^Switched to branch [\"']\([^\"']*\)[\"'],Switched to branch \"\1\",g" \
42             -e "\\,^Deleted branch guilt/.* (was .*).$,d"
45 # Newer dd does
46 #   (1.0 kB, 1.0 kiB) copied, ...
47 function filter_dd
49         sed -e 's:^\([0-9]*\) bytes (\([0-9]*\.[0-9]* .B\).*) copied.*$:\1 bytes (\2) copied:'
52 # usage: cmd <cmd>..
53 function cmd
55         printf "%% %s\n" "$*"
56         if ! (
57                 exec 3>&1
58                 rv=`(("$@" 2>&1; echo $? >&4) | replace_path >&3 ) 4>&1`
59                 exit $rv
60         ) ; then
61                 echo "% FAIL: The above command should succeed but failed."
62                 exit 1
63         fi
66 # usage: shouldfail <cmd>..
67 function shouldfail
69         printf "%% %s\n" "$*"
70         if (
71                 exec 3>&1
72                 rv=`(("$@" 2>&1; echo $? >&4) | replace_path >&3 ) 4>&1`
73                 exit $rv
74         ) ; then
75                 echo "% FAIL: The above command should fail but succeeded."
76                 exit 1
77         fi
80 # usage: list_files
81 function list_files
83         (
84                 find .git/refs/patches -type f -exec dump_ref {} \; 2> /dev/null || true
85                 find .git/patches -exec dump_reg {} \;
86         ) | sort
89 function setup_git_repo
91         # set up the repo so we have something interesting to run guilt on
92         echo "abc" > def
93         git add def
94         git commit -s -m "initial" 2> /dev/null > /dev/null
96         # The HEAD should be a specific hash.  Abort the test if it is not.
97         # If we kept on executing, the test would just fail in mysterious
98         # ways.
99         rev=`git rev-parse HEAD`
100         [ "d4850419ccc1146c7169f500725ce504b9774ed0" != "$rev" ] && \
101                 die "setup_git_repo HEAD check failed (HEAD: $rev)"
103         # Explicitly set config that the tests rely on.
104         git config log.date default
105         git config log.decorate no
106         git config guilt.diffstat false
107         git config guilt.reusebranch false
110 function setup_guilt_repo
112         mkdir -p .git/patches/master
114         # patch to modify a file
115         cp "$REG_DIR/data/modify.patch" .git/patches/master/modify
117         # patch to add a new file
118         cp "$REG_DIR/data/add.patch" .git/patches/master/add
120         # patch to remove an existing file
121         cp "$REG_DIR/data/remove.patch" .git/patches/master/remove
123         # patch to change a mode
124         cp "$REG_DIR/data/mode.patch" .git/patches/master/mode
126         # the series file of all the things
127         cp "$REG_DIR/data/series" .git/patches/master/series
129         # the status file
130         touch .git/patches/master/status
132         # the status file
133         touch .git/patches/master/status
135         touch -a -m -t "$TOUCH_DATE" .git/patches/master/modify
136         touch -a -m -t "$TOUCH_DATE" .git/patches/master/add
137         touch -a -m -t "$TOUCH_DATE" .git/patches/master/remove
138         touch -a -m -t "$TOUCH_DATE" .git/patches/master/mode
141 function reset_git_repo
143         git checkout master
145         git reset --hard d4850419ccc1146c7169f500725ce504b9774ed0
147         rm -rf .git/patches/
150 function setup_repo
152         setup_git_repo
153         setup_guilt_repo