docs: rework check-docs test script

Try to make check-docs.sh script more readable.

Also, previously the script would check that one side was a subset
of the other side. Tighten this check up, now both sides of the
comparison must agree and yield the same lines.

(cherry picked from commit 7a59cd2744)
This commit is contained in:
Thomas Haller 2018-10-25 08:55:08 +02:00
parent ff7d3fd3d6
commit 679fa18e34

View file

@ -1,22 +1,48 @@
#!/bin/sh
#!/bin/bash
SOURCEDIR=$1
set -e
die() {
printf '%s\n' "$@" >&2
exit 1
}
word_regex() {
tr '\n|<>\\' ' ' \
| sed -e 's, *$,\\>,' \
-e 's,^ *,\\<,' \
-e 's, \+,\\>\\|\\<,g'
}
same_lines() {
diff <(printf "%s\n" "$1" | sed '/^$/d' | sort) \
<(printf "%s\n%s\n" "$2" "$3" | sed '/^$/d' | sort) >&2
}
SOURCEDIR="$1"
[ -n "$SOURCEDIR" ] && SOURCEDIR="$SOURCEDIR/"
# Check that the D-Bus API docs contain all known interfaces
if (sed -n 's/.*<xi:include href="dbus-\(.*\.xml\)".*/\1\n\1/p' $SOURCEDIR''docs/api/network-manager-docs.xml;
cd $SOURCEDIR''introspection; ls *.xml) |sort |uniq -u| grep . >&2; then
echo "*** Error: D-Bus interfaces not included in docs/api/network-manager-docs.xml ***" >&2
exit 1
F1="$(sed -n 's,^ <xi:include href="dbus-\([^"]*\.xml\)"/>$,\1,p' "$SOURCEDIR"docs/api/network-manager-docs.xml)"
F2="$(cd "$SOURCEDIR"introspection; ls -1 *.xml)"
if ! same_lines "$F1" "$F2" ; then
die "*** Error: D-Bus interfaces not included in docs/api/network-manager-docs.xml ***"
fi
# Check that files that define types that are in public libnm API are included in libnm documentation.
# Don't complain about readability or I'll rewrite this in Perl.
if (sed -n 's/.*<xi:include href="\(xml\/.*\.xml\)".*/\1\n\1/p' $SOURCEDIR''docs/libnm/libnm-docs.xml;
grep -lE "$(sed -n 's/^[\t ]*\(.*_get_type\);/\1/p' $SOURCEDIR''libnm/libnm.ver |xargs echo |sed 's/ /|/g')" $SOURCEDIR''libnm/*.h $SOURCEDIR''libnm-core/*.h |
sed 's,.*/,xml/,;s/\.h$/.xml/') |sort |uniq -u| grep . >&2; then
echo "*** Error: libnm classes not included in docs/libnm/libnm-docs.xml ***" >&2
exit 1
F1="$(sed -n 's/.*<xi:include href="xml\/\([^"]*\)\.xml".*/\1/p' "$SOURCEDIR"docs/libnm/libnm-docs.xml)"
F2="$(grep -l "$(sed -n 's/^[\t ]*\(.*_get_type\);/\1/p' "$SOURCEDIR"libnm/libnm.ver | word_regex)" \
"$SOURCEDIR"libnm/*.h \
"$SOURCEDIR"libnm-core/*.h \
| sed 's,.*/\([^/]\+\)\.h$,\1,')"
F2_EXTRA="
annotation-glossary
api-index-full
nm-dbus-interface
nm-errors
nm-utils
nm-version
"
if ! same_lines "$F1" "$F2" "$F2_EXTRA"; then
die "*** Error: libnm classes not included in docs/libnm/libnm-docs.xml ***"
fi
exit 0