aboutsummaryrefslogtreecommitdiff
path: root/Tools
diff options
context:
space:
mode:
authorMatthias Andree <mandree@FreeBSD.org>2020-05-08 01:10:16 +0000
committerMatthias Andree <mandree@FreeBSD.org>2020-05-08 01:10:16 +0000
commit106ebbd24e12c1923f24b63a278cf6d88dc75df9 (patch)
treebb0a7532187bb067f4e8fabe3bf49643c0eba497 /Tools
parentdb9d6d4735f0b83315b21b8657b9e99fc91f00d5 (diff)
downloadports-106ebbd24e12c1923f24b63a278cf6d88dc75df9.tar.gz
ports-106ebbd24e12c1923f24b63a278cf6d88dc75df9.zip
Tools/scripts/bump_revision.pl: chase option rename for getopts().
Notes
Notes: svn path=/head/; revision=534314
Diffstat (limited to 'Tools')
-rwxr-xr-xTools/scripts/bump_revision.pl2
-rwxr-xr-xTools/scripts/sed_checked.sh91
2 files changed, 82 insertions, 11 deletions
diff --git a/Tools/scripts/bump_revision.pl b/Tools/scripts/bump_revision.pl
index 1e7e803e886b..234924dedb66 100755
--- a/Tools/scripts/bump_revision.pl
+++ b/Tools/scripts/bump_revision.pl
@@ -109,7 +109,7 @@ my ($portsdir, $INDEX);
{
$opt_i = "";
$opt_u = "";
- getopts("cgi:lnu:p:");
+ getopts("fgi:lnu:p:");
$shallow = $opt_l if $opt_l;
if ($opt_l and $opt_g) {
die "Options -g and -l given, which are mutually exclusive. Pick either.";
diff --git a/Tools/scripts/sed_checked.sh b/Tools/scripts/sed_checked.sh
index 647d59c7ba19..dd03284db720 100755
--- a/Tools/scripts/sed_checked.sh
+++ b/Tools/scripts/sed_checked.sh
@@ -1,13 +1,84 @@
#!/bin/sh
-set -e
-/usr/bin/sed -i.bak "$@"
-for x in "${@}" ; do
- if [ -f "${x}" ]; then
- if cmp -s "${x}" "${x}".bak ; then
- if [ ! -z "${REWARNFILE}" ]; then
- echo sed failed: file content unchanged from backup: ${x#${WRKSRC}/} >> ${REWARNFILE}
- fi
- fi
+# Rationale:
+# The ports tree has accumulated quite a bit of REINPLACE_CMD lines
+# in its Makefile. Some of these have gone stale as ports were updated
+# upstream, or as the ports have evolved.
+
+# For DEVELOPERS, we check the effectiveness of REINPLACE_CMD lines
+# by requesting backup files be written, and comparing them against
+# source files.
+
+set -eu
+
+DEBUG=:
+#DEBUG=echo
+
+check_dash_i() {
+ # this must be called from a subshell so as not to clobber $@
+ # WARNING: assumes that -i is given at least once!
+ unset OPTIND
+ $DEBUG >&2 DEBUG: check_dash_i "$@"
+ while getopts :EI:ae:f:i:lnru var ; do
+ $DEBUG >&2 DEBUG: option "$var" '"'"${OPTARG-""}"'"'
+ case "$var" in [iI])
+ last_i="$OPTARG"
+ esac
+ done
+
+ $DEBUG >&2 DEBUG: last_i='"'"$last_i"'"'
+ printf '"%s"\n' "$last_i"
+}
+
+shadowed="$( (check_dash_i -i.bak "$@") )"
+if [ "$shadowed" != '".bak"' ] ; then
+ echo >&2 "WARNING: $0 -i.bak clobbered by caller's backup suffix $shadowed"
+fi
+
+${SED-/usr/bin/sed} -i.bak "$@"
+check() {
+ issues=0
+ files=0
+ args=
+ for x in "${@}" ; do
+ # we decide very simply whether the argument we are looking at is
+ # a sed command or a file: if it's not a regular file, it must be
+ # a sed argument worth collecting for our warning message,
+ # so that maintainers can identify the failing sed command.
+ #
+ # We cannot easily relate to Makefile lines here.
+ if [ -f "${x}" ]; then
+ # File? Check if sed was effective.
+ files=$(($files + 1))
+ if cmp -s "${x}" "${x}".bak ; then
+ issues=$(($issues + 1))
+ if [ $issues -eq 1 ] ; then
+ echo "sed failed:${args} ..."
+ fi
+ echo " - file content unchanged from backup: ${x#${WRKSRC}/}"
+ fi
+ else
+ # Not a file? Collect sed(1) command.
+ args="${args} ${x}"
+ fi
+ done
+
+ if [ ${issues} -gt 0 ] ; then
+ action="review"
+ if [ ${issues} -eq ${files} ] ; then
+ action=" FIX " # blanks at either end
+ else
+ action="review"
+ fi
+ echo "--- issues found: ${issues}, files to edit: ${files}, please ${action} ---"
fi
-done
+}
+
+if [ ! -z "${REWARNFILE}" ] ; then
+ check "$@" | tee -a ${REWARNFILE}
+ # if ${REWARNFILE} is a regular file (not /dev/null) and empty, delete it.
+ if [ -f "${REWARNFILE}" -a ! -s "${REWARNFILE}" ] ; then rm -f "${REWARNFILE}" ; fi
+else
+ check "$@"
+fi
+