new: clean up the group name input code
[xfstests-dev.git] / new
1 #! /bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (c) 2000-2005 Silicon Graphics, Inc.  All Rights Reserved.
4 #
5 # Make a new test
6 #
7
8 # generic initialization
9 iam=new
10 . ./common/test_names
11
12 tmpfile="/tmp/$$."
13 trap "rm -f $tmpfile; exit" 0 1 2 3 15
14
15 _cleanup()
16 {
17     :
18 }
19
20 SRC_GROUPS=`find tests -not -path tests -type d -printf "%f "`
21 usage()
22 {
23     echo "Usage $0 test_dir|test_dir_and_name"
24     echo "Available dirs are: $SRC_GROUPS"
25     exit
26 }
27
28 [ $# -eq 0 ] && usage
29
30 if echo "$1" | grep -q '/'; then
31         if [ -e "tests/$1" ]; then
32                 echo "$1: test already exists."
33                 exit 1
34         fi
35         tdir="tests/$(echo "$1" | cut -d '/' -f 1)"
36         id="$(echo "$1" | cut -d '/' -f 2)"
37 else
38         tdir=tests/$1
39         id="$(basename "$(./tools/nextid "$1")")"
40 fi
41
42 i=0
43 line=0
44 eof=1
45 [ -d "$tdir/" ] || usage
46
47 export AWK_PROG="$(type -P awk)"
48 [ "$AWK_PROG" = "" ] && { echo "awk not found"; exit; }
49
50 echo "Next test id is $id"
51 shift
52
53 read -p "Append a name to the ID? Test name will be $id-\$name. y,[n]: " -r
54 if [[ $REPLY = [Yy] ]]; then
55         # get the new name from user
56         name=""
57         while [ "$name" = "" ]; do
58                 read -p "Enter the name: "
59                 if [ "$REPLY" = "" ]; then
60                         echo "For canceling, use ctrl+c."
61                 elif echo "$id-$REPLY" | grep -q "^$VALID_TEST_NAME$"; then
62                         if [ -e "$tdir/$id-$REPLY" ]; then
63                                 echo "File '$id-$REPLY' already exists, use another one."
64                                 echo
65                         else
66                                 name="$REPLY"
67                         fi
68                 else
69                         echo "A name can contain only alphanumeric symbols and dash!"
70                         echo
71                 fi
72         done
73
74         id="$id-$name"
75 fi
76
77 echo "Creating test file '$id'"
78
79 if [ -f $tdir/$id ]
80 then
81     echo "Error: test $id already exists!"
82     _cleanup
83     exit 1
84 fi
85
86 # Extract group names from the documentation.
87 group_names() {
88         awk '/^[[:lower:][:digit:]_]/ {
89                 if ($1 != "" && $1 != "Group" && $2 != "Name:" && $1 != "all")
90                         printf("%s\n", $1);
91         }' doc/group-names.txt
92 }
93
94 if [ $# -eq 0 ]; then
95         prompt="Add to group(s) [other] (separate by space, ? for list): "
96     while true
97     do
98         read -p "${prompt}" ans || exit 1
99         test -z "${ans}" && ans=other
100         if [ "${ans}" = "?" ]; then
101             echo $(group_names)
102         else
103             # only allow lower cases, spaces, digits and underscore in group
104             inval=`echo $ans | tr -d '[:lower:][:space:][:digit:]_'`
105             if [ "$inval" != "" ]; then
106                 echo "Invalid characters in group(s): $inval"
107                 echo "Only lower cases, digits and underscore are allowed in groups, separated by space"
108                 continue
109             else
110                 # remove redundant spaces/tabs
111                 ans=`echo "$ans" | sed 's/\s\+/ /g'`
112                 break
113             fi
114         fi
115     done
116 else
117     # expert mode, groups are on the command line
118     #
119     for g in $*
120     do
121         if ! grep -q "^$g" doc/group-names.txt; then
122             echo "Warning: group \"$g\" not defined in documentation"
123         fi
124     done
125     ans="$*"
126 fi
127
128 echo -n "Creating skeletal script for you to edit ..."
129
130 year=`date +%Y`
131
132 cat <<End-of-File >$tdir/$id
133 #! /bin/bash
134 # SPDX-License-Identifier: GPL-2.0
135 # Copyright (c) $year YOUR NAME HERE.  All Rights Reserved.
136 #
137 # FS QA Test $id
138 #
139 # what am I here for?
140 #
141 . ./common/preamble
142 _begin_fstest $ans
143
144 # Override the default cleanup function.
145 # _cleanup()
146 # {
147 #       cd /
148 #       rm -r -f \$tmp.*
149 # }
150
151 # Import common functions.
152 # . ./common/filter
153
154 # real QA test starts here
155
156 # Modify as appropriate.
157 _supported_fs generic
158 _require_test
159
160 # if error
161 exit
162
163 # optional stuff if your test has verbose output to help resolve problems
164 #echo
165 #echo "If failure, check \$seqres.full (this) and \$seqres.full.ok (reference)"
166
167 # success, all done
168 status=0
169 exit
170 End-of-File
171
172 sleep 2         # latency to read messages to this point
173 echo ""
174
175 chmod 755 $tdir/$id
176 ${EDITOR-vi} $tdir/$id
177
178 # Create default .out file
179 cat <<End-of-File >$tdir/$id.out
180 QA output created by $id
181 Silence is golden
182 End-of-File
183
184 echo " done."
185 exit 0