exit 1
fi
-if [ $# -eq 0 ]
-then
+# Extract group names from the documentation.
+group_names() {
+ awk '/^[[:lower:][:digit:]_]/ {
+ if ($1 != "" && $1 != "Group" && $2 != "Name:" && $1 != "all")
+ printf("%s\n", $1);
+ }' doc/group-names.txt
+}
- while true
- do
- echo -n "Add to group(s) [other] (separate by space, ? for list): "
- read ans
- [ -z "$ans" ] && ans=other
- if [ "X$ans" = "X?" ]
- then
- for d in $SRC_GROUPS; do
- (cd "tests/$d/" ; ../../tools/mkgroupfile "$tmpfile")
- l=$(sed -n < "$tmpfile" \
- -e 's/#.*//' \
- -e 's/$/ /' \
- -e 's;\(^[0-9][0-9][0-9]\)\(.*$\);\2;p')
- grpl="$grpl $l"
- done
- lst=`for word in $grpl; do echo $word; done | sort| uniq `
- echo $lst
- else
- # only allow lower cases, spaces, digits and underscore in group
- inval=`echo $ans | tr -d '[:lower:][:space:][:digit:]_'`
- if [ "$inval" != "" ]; then
- echo "Invalid characters in group(s): $inval"
- echo "Only lower cases, digits and underscore are allowed in groups, separated by space"
- continue
- else
- # remove redundant spaces/tabs
- ans=`echo "$ans" | sed 's/\s\+/ /g'`
- break
- fi
- fi
- done
+# Make sure that the new test's groups fit the correct format and are listed
+# in the group documentation file.
+check_groups() {
+ for g in "$@"; do
+ local inval="$(echo "${g}" | tr -d '[:lower:][:space:][:digit:]_')"
+ if [ -n "${inval}" ]; then
+ echo "Invalid characters in group(s): ${inval}"
+ echo "Only lower cases, digits and underscore are allowed in groups, separated by space"
+ return 1
+ elif [ "${g}" = "other" ]; then
+ echo "Do not add more tests to group \"other\""
+ return 1
+ elif ! group_names | grep -q -w "${g}"; then
+ echo "Warning: group \"${g}\" not defined in documentation"
+ return 1
+ fi
+ done
+
+ return 0
+}
+
+if [ $# -eq 0 ]; then
+ # interactive mode
+ prompt="Add to group(s) [auto] (separate by space, ? for list): "
+ while true; do
+ read -p "${prompt}" -a new_groups || exit 1
+ case "${#new_groups[@]}" in
+ 0)
+ new_groups=("auto")
+ ;;
+ 1)
+ if [ "${new_groups[0]}" = "?" ]; then
+ echo $(group_names | grep -v -w 'other')
+ continue
+ fi
+ ;;
+ esac
+ check_groups "${new_groups[@]}" && break
+ done
else
- # expert mode, groups are on the command line
- #
- (cd "$tdir" ; ../../tools/mkgroupfile "$tmpfile")
- for g in $*
- do
- if ! grep -q "[[:space:]]$g" "$tmpfile"; then
- echo "Warning: group \"$g\" not defined in $tdir tests"
- fi
- done
- ans="$*"
+ # expert mode, groups are on the command line
+ new_groups=("$@")
+ check_groups "${new_groups[@]}" || exit 1
fi
echo -n "Creating skeletal script for you to edit ..."
# what am I here for?
#
. ./common/preamble
-_begin_fstest $ans
+_begin_fstest ${new_groups[@]}
# Override the default cleanup function.
# _cleanup()