yann@756: #!/bin/sh
yann@756: # Yes, this intends to be a true POSIX script file.
yann@1175: set -e
yann@756:
yann@756: myname="$0"
yann@756:
yann@1175: # Parse the tools' paths configuration
yann@1175: . "paths.mk"
yann@1175:
yann@756: doUsage() {
yann@756: cat <<_EOF_
yann@1608: Usage: ${myname}
[sed_re]
yann@1608: Will renumber all patches found in 'dir', starting at 'base', and with
yann@1608: an increment of 'inc'.
yann@1608: If 'sed_re' is given, it is interpreted as a valid sed expression, and
yann@1608: it will be applied to the patch name.
yann@1608: If the environment variable FAKE is set to 'y', then the command will
yann@1608: only be printed, and not executed (so you can check beforehand).
yann@1608: Eg.:
yann@1608: patch-renumber.sh patches/gcc/4.3.1 100 10
yann@1608: patch-renumber.sh patches/gcc/4.2.4 100 10 's/(all[_-])*(gcc[-_])*//;'
yann@756: _EOF_
yann@756: }
yann@756:
yann@1608: [ $# -lt 3 -o $# -gt 4 ] && { doUsage; exit 1; }
yann@756: [ -d "${1}" ] || { doUsage; exit 1; }
yann@756:
yann@756: dir="${1}"
yann@756: cpt="${2}"
yann@756: inc="${3}"
yann@1608: sed_re="${4}"
yann@756:
yann@1577: case "$(LC_ALL=C hg id "${dir}" 2>/dev/null)" in
yann@1608: "") CMD="";;
yann@1608: *) CMD="hg";;
yann@756: esac
yann@756:
yann@1608: if [ "${FAKE}" = "y" ]; then
yann@1608: CMD="echo ${CMD}"
yann@1608: fi
yann@1608:
yann@1608: for p in "${dir}"/*.patch*; do
yann@756: [ -e "${p}" ] || { echo "No such file '${p}'"; exit 1; }
yann@1608: newname="$(printf "%03d-%s" \
yann@1608: "${cpt}" \
yann@1608: "$( basename "${p}" \
yann@1608: |"${sed}" -r -e 's/^[[:digit:]]+[-_]//' \
yann@1608: -e "${sed_re}" \
yann@1608: )" \
yann@1192: )"
yann@1608: [ "${p}" = "${dir}/${newname}" ] || ${CMD} mv -v "${p}" "${dir}/${newname}"
yann@756: cpt=$((cpt+inc))
yann@756: done