| #!/usr/bin/env bash | |
| # Convenience script to rename test cases in Automake. | |
| # Copyright (C) 2013-2018 Free Software Foundation, Inc. | |
| # This program is free software; you can redistribute it and/or modify | |
| # it under the terms of the GNU General Public License as published by | |
| # the Free Software Foundation; either version 2, or (at your option) | |
| # any later version. | |
| # This program is distributed in the hope that it will be useful, | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| # GNU General Public License for more details. | |
| # You should have received a copy of the GNU General Public License | |
| # along with this program. If not, see <https://www.gnu.org/licenses/>. | |
| set -e -u | |
| me=${0##*/} | |
| msg_file=$me.git-msg | |
| fatal () { echo "$me: $*" >&2; exit 1; } | |
| case $# in | |
| 0) input=$(cat);; | |
| 1) input=$(cat -- "$1");; | |
| *) fatal "too many arguments";; | |
| esac | |
| AWK=${AWK-awk} | |
| SED=${SED-sed} | |
| [[ -f bin/automake.in && -d lib/Automake ]] \ | |
| || fatal "can only be run from the top-level of the Automake source tree" | |
| $SED --version 2>&1 | grep GNU >/dev/null 2>&1 \ | |
| || fatal "GNU sed is required by this script" | |
| # Input validation and cleanup. | |
| input=$( | |
| $AWK -v me="$me" ' | |
| /^#/ { next; } | |
| (NF == 0) { next; } | |
| (NF != 2) { print me ": wrong number of fields at line " NR; | |
| exit(1); } | |
| { printf ("t/%s t/%s\n", $1, $2); } | |
| ' <<<"$input" | |
| ) || exit $? | |
| # Prepare git commit message. | |
| exec 5>"$msg_file" | |
| echo "tests: more significant names for some tests" >&5 | |
| echo >&5 | |
| $AWK >&5 <<<"$input" \ | |
| '{ printf ("* %s: Rename...\n* %s: ... like this.\n", $1, $2) }' | |
| exec 5>&- | |
| # Rename tests. | |
| eval "$($AWK '{ printf ("git mv %s %s\n", $1, $2) }' <<<"$input")" | |
| # Adjust the list of tests (do this conditionally, since such a | |
| # list is not required nor used in Automake-NG). | |
| if test -f t/list-of-tests.mk; then | |
| $SED -e "$($AWK '{ printf ("s|^%s |%s |\n", $1, $2) }' <<<"$input")" \ | |
| -i t/list-of-tests.mk | |
| git add t/list-of-tests.mk | |
| fi | |
| git status | |
| echo | |
| echo "NOTICE: pre-filled commit message is in file '$msg_file'" | |
| exit 0 |