e424450790af560a53d1ed4cfcbcb2271f57ff93
[xfstests-dev.git] / tools / mkgroupfile
1 #!/bin/bash
2
3 # Generate a group file from the _begin_fstest call in each test.
4
5 if [ "$1" = "--help" ]; then
6         echo "Usage: (cd tests/XXX/ ; ../../tools/mkgroupfile [output])"
7         exit 1
8 fi
9
10 test_dir="$PWD"
11 groupfile="$1"
12 GROUPNAME_DOC_FILE="$(readlink -m ../../doc/group-names.txt)"
13 export GROUPNAME_DOC_FILE
14
15 if [ ! -x ../../check ]; then
16         echo "$0: Run this from tests/XXX/."
17         exit 1
18 fi
19
20 cleanup() {
21         test -z "$groupfile" && return
22         test -z "$ngroupfile" && return
23
24         if [ $ret -eq 0 ]; then
25                 mv "$ngroupfile" "$groupfile"
26         else
27                 rm -f "$ngroupfile"
28         fi
29 }
30
31 ret=1   # trigger cleanup of temporary files unless we succeed
32 trap 'cleanup; exit $ret' EXIT INT TERM QUIT
33
34 generate_groupfile() {
35         cat << ENDL
36 # QA groups control file, automatically generated.
37 # See _begin_fstest in each test for details.
38
39 ENDL
40         cd ../../
41         export GENERATE_GROUPS=yes
42         grep -R -l "^_begin_fstest" "$test_dir/" 2>/dev/null | while read testfile; do
43                 test -x "$testfile" && "$testfile" || return 1
44         done | sort -g
45         ret="${PIPESTATUS[1]}"
46         cd "$test_dir"
47 }
48
49 if [ -z "$groupfile" ] || [ "$groupfile" = "-" ]; then
50         # Dump the group file to stdout and exit
51         unset groupfile
52         generate_groupfile
53 else
54         # Otherwise, write the group file to disk somewhere.
55         ngroupfile="${groupfile}.new"
56         rm -f "$ngroupfile"
57         generate_groupfile >> "$ngroupfile"
58         # let cleanup rename or delete ngroupfile
59 fi