[PATCH] Add "Date" field while creating patches from commits
[guilt.git] / regression / scaffold
blob4099b11f3ebef5f445bddf985cf5ee05a03c4a7d
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/refs/patches -type d -exec dump_reg {} \; 2> /dev/null || true
86                 find .git/patches -exec dump_reg {} \;
87         ) | sort
90 function setup_git_repo
92         # set up the repo so we have something interesting to run guilt on
93         echo "abc" > def
94         git add def
95         git commit -s -m "initial" 2> /dev/null > /dev/null
97         # The HEAD should be a specific hash.  Abort the test if it is not.
98         # If we kept on executing, the test would just fail in mysterious
99         # ways.
100         rev=`git rev-parse HEAD`
101         [ "d4850419ccc1146c7169f500725ce504b9774ed0" != "$rev" ] && \
102                 die "setup_git_repo HEAD check failed (HEAD: $rev)"
104         # Explicitly set config that the tests rely on.
105         git config log.date default
106         git config log.decorate no
107         git config guilt.diffstat false
108         git config guilt.reusebranch false
111 function setup_guilt_repo
113         mkdir -p .git/patches/master
115         # patch to modify a file
116         cp "$REG_DIR/data/modify.patch" .git/patches/master/modify
118         # patch to add a new file
119         cp "$REG_DIR/data/add.patch" .git/patches/master/add
121         # patch to remove an existing file
122         cp "$REG_DIR/data/remove.patch" .git/patches/master/remove
124         # patch to change a mode
125         cp "$REG_DIR/data/mode.patch" .git/patches/master/mode
127         # the series file of all the things
128         cp "$REG_DIR/data/series" .git/patches/master/series
130         # the status file
131         touch .git/patches/master/status
133         # the status file
134         touch .git/patches/master/status
136         touch -a -m -t "$TOUCH_DATE" .git/patches/master/modify
137         touch -a -m -t "$TOUCH_DATE" .git/patches/master/add
138         touch -a -m -t "$TOUCH_DATE" .git/patches/master/remove
139         touch -a -m -t "$TOUCH_DATE" .git/patches/master/mode
142 function reset_git_repo
144         git checkout master
146         git reset --hard d4850419ccc1146c7169f500725ce504b9774ed0
148         rm -rf .git/patches/
151 function setup_repo
153         setup_git_repo
154         setup_guilt_repo