#!/usr/bin/env bash # Convenience script to rename test cases in Automake. # Copyright (C) 2013-2023 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 . 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