From 4a98300feb783684a3adfba4959f7d7d26a4bd79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= Date: Thu, 27 May 2021 01:31:43 +0200 Subject: [PATCH] mancheck: accept lints, accept lint overrides MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Richard Laager Reviewed-by: Brian Behlendorf Reviewed-by: Tony Nguyen Reviewed-by: Ryan Moeller Signed-off-by: Ahelenia ZiemiaƄska Closes #12129 --- Makefile.am | 7 +------ scripts/Makefile.am | 3 ++- scripts/mancheck.sh | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 7 deletions(-) create mode 100755 scripts/mancheck.sh diff --git a/Makefile.am b/Makefile.am index 8e4fffc5d..4e7e29589 100644 --- a/Makefile.am +++ b/Makefile.am @@ -137,12 +137,7 @@ storeabi: lib PHONY += mancheck mancheck: - @if type mandoc > /dev/null 2>&1; then \ - find ${top_srcdir}/man ${top_srcdir}/tests/test-runner/man -type f -name '*[1-9]*' \ - -exec mandoc -Tlint -Werror {} \+; \ - else \ - echo "skipping mancheck because mandoc is not installed"; \ - fi + ${top_srcdir}/scripts/mancheck.sh ${top_srcdir}/man ${top_srcdir}/tests/test-runner/man if BUILD_LINUX stat_fmt = -c '%A %n' diff --git a/scripts/Makefile.am b/scripts/Makefile.am index f338cdc39..6c59fd7d4 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -17,7 +17,8 @@ EXTRA_SCRIPTS = \ kmodtool \ make_gitrev.sh \ man-dates.sh \ - paxcheck.sh + paxcheck.sh \ + mancheck.sh EXTRA_DIST = \ cstyle.pl \ diff --git a/scripts/mancheck.sh b/scripts/mancheck.sh new file mode 100755 index 000000000..a5b8b0d0a --- /dev/null +++ b/scripts/mancheck.sh @@ -0,0 +1,43 @@ +#!/bin/sh +# +# Permission to use, copy, modify, and/or distribute this software for +# any purpose with or without fee is hereby granted. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN +# AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +# shellcheck disable=SC2086 + +if [ "$#" -eq 0 ]; then + echo "Usage: $0 manpage-directory..." + exit 1 +fi + +if ! command -v mandoc > /dev/null; then + echo "skipping mancheck because mandoc is not installed" + exit 0 +fi + +IFS=" +" + +files="$(find "$@" -type f -name '*[1-9]*' ! -name '*module-param*' ! -name 'zpool-features*' ! -name 'zfs-mount-generator*')" || exit 1 + +add_excl="$(awk ' + /^.\\" lint-ok:/ { + print "-e" + $1 = "mandoc:" + $2 = FILENAME ":[[:digit:]]+:[[:digit:]]+:" + print + }' $files)" + +# Redirect to file instead of 2>&1ing because mandoc flushes inconsistently(?) which tears lines +# https://github.com/openzfs/zfs/pull/12129/checks?check_run_id=2701608671#step:5:3 +etmp="$(mktemp)" +! { mandoc -Tlint $files 2>"$etmp"; cat "$etmp"; rm -f "$etmp"; } | + grep -vE -e 'mandoc: outdated mandoc.db' -e 'STYLE: referenced manual not found' $add_excl >&2