From 58997abb2e81d568799696c3650657b8ec3a8bfd Mon Sep 17 00:00:00 2001
From: Michael Hanselmann <hansmi@google.com>
Date: Mon, 7 Jan 2013 19:53:31 +0100
Subject: [PATCH] Add script to check man page references
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This script checks for some of the most obvious mistakes when formatting
man page references (which should have the form β€œ**ganeti**\(7)”). While
this works now, it is very hard to avoid ambiguities (e.g. references
within verbatim blocks) when using regular expressions.

Also fixes a typo in Makefile.am by replacing β€œharcoded” with
β€œhardcoded”.

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>
---
 Makefile.am                    |  5 +++-
 autotools/check-man-references | 51 ++++++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+), 1 deletion(-)
 create mode 100755 autotools/check-man-references

diff --git a/Makefile.am b/Makefile.am
index b9473f0b9..871f73f38 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -23,6 +23,7 @@ RUN_IN_TEMPDIR = $(top_srcdir)/autotools/run-in-tempdir
 CHECK_PYTHON_CODE = $(top_srcdir)/autotools/check-python-code
 CHECK_HEADER = $(top_srcdir)/autotools/check-header
 CHECK_MAN_DASHES = $(top_srcdir)/autotools/check-man-dashes
+CHECK_MAN_REFERENCES = $(top_srcdir)/autotools/check-man-references
 CHECK_MAN_WARNINGS = $(top_srcdir)/autotools/check-man-warnings
 CHECK_VERSION = $(top_srcdir)/autotools/check-version
 CHECK_NEWS = $(top_srcdir)/autotools/check-news
@@ -794,6 +795,7 @@ EXTRA_DIST = \
 	autotools/check-header \
 	autotools/check-imports \
 	autotools/check-man-dashes \
+	autotools/check-man-references \
 	autotools/check-man-warnings \
 	autotools/check-news \
 	autotools/check-python-code \
@@ -1193,12 +1195,13 @@ man/%.gen: man/%.rst lib/query.py lib/build/sphinx_ext.py \
 	| $(RUN_IN_TEMPDIR) $(BUILT_PYTHON_SOURCES)
 	@echo "Checking $< for hardcoded paths..."
 	@if grep -nEf autotools/wrong-hardcoded-paths $<; then \
-	  echo "Man page $< has harcoded paths (see above)!" 1>&2 ; \
+	  echo "Man page $< has hardcoded paths (see above)!" 1>&2 ; \
 	  exit 1; \
 	fi
 	set -e ; \
 	trap 'echo auto-removing $@; rm $@' EXIT; \
 	PYTHONPATH=. $(RUN_IN_TEMPDIR) $(CURDIR)/$(DOCPP) < $< > $@ ;\
+	$(CHECK_MAN_REFERENCES) $@; \
 	trap - EXIT
 
 man/%.7.in man/%.8.in man/%.1.in: man/%.gen man/footer.rst
diff --git a/autotools/check-man-references b/autotools/check-man-references
new file mode 100755
index 000000000..34b9a32d4
--- /dev/null
+++ b/autotools/check-man-references
@@ -0,0 +1,51 @@
+#!/bin/bash
+#
+
+# Copyright (C) 2013 Google 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 of the License, 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+set -e -u -o pipefail
+
+# Use array for arguments so that comments can be inline
+args=(
+  # "...name*(8)" (missing backslash)
+  -e '\w+\*+\([0-9]*\)'
+
+  # "...name(8)" (no asterisk)
+  -e '\w+\([0-9]*\)'
+
+  # "...name(8)*" (asterisk after number)
+  -e '\w+\([0-9]*\)\*'
+
+  # "...name*\(8)" (only one asterisk before backslash)
+  -e '\w+\*\\\([0-9]*\)'
+
+  # ":manpage:..." (Sphinx-specific)
+  -e ':manpage:'
+  )
+
+for fname; do
+  # Ignore title and then look for faulty references
+  if tail -n +2 $fname | grep -n -E -i "${args[@]}"; then
+    {
+      echo "Found faulty man page reference(s) in '$fname'."\
+           'Use syntax "**name**\(number)" instead.'\
+           'Example: **gnt-instance**\(8).'
+    } >&2
+    exit 1
+  fi
+done
-- 
GitLab