xref: /dpdk/devtools/check-doc-vs-code.sh (revision 947dff12bcf5023255433c9997710a5635522431)
1#! /bin/sh -e
2# SPDX-License-Identifier: BSD-3-Clause
3# Copyright 2021 Mellanox Technologies, Ltd
4
5# Check whether doc & code are in sync.
6# Optional argument: check only what changed since a commit.
7trusted_commit=$1 # example: origin/main
8
9selfdir=$(dirname $(readlink -f $0))
10rootdir=$(readlink -f $selfdir/..)
11
12# speed up by ignoring Unicode details
13export LC_COLLATE=C
14
15result=0
16error() # <message>
17{
18	echo "$*"
19	result=$(($result + 1))
20}
21
22changed_files()
23{
24	[ -n "$files" ] ||
25		files=$(git diff-tree --name-only -r $trusted_commit..)
26	echo "$files"
27}
28
29has_code_change() # <pattern>
30{
31	test -n "$(git log --format='%h' -S"$1" $trusted_commit..)"
32}
33
34has_file_change() # <pattern>
35{
36	changed_files | grep -q "$1"
37}
38
39changed_net_drivers()
40{
41	net_paths='drivers/net/|doc/guides/nics/features/'
42	[ -n "$drivers" ] ||
43		drivers=$(changed_files |
44			sed -rn "s,^($net_paths)([^./]*).*,\2,p" |
45			sort -u)
46	echo "$drivers"
47}
48
49all_net_drivers()
50{
51	find $rootdir/drivers/net -mindepth 1 -maxdepth 1 -type d |
52	sed 's,.*/,,' |
53	sort
54}
55
56check_rte_flow() # <driver>
57{
58	code=$rootdir/drivers/net/$1
59	doc=$rootdir/doc/guides/nics/features/$1.ini
60	[ -d $code ] || return 0
61	[ -f $doc ] || return 0
62	report=$($selfdir/parse-flow-support.sh $code $doc)
63	if [ -n "$report" ]; then
64		error "rte_flow doc out of sync for $1"
65		echo "$report" | sed 's,^,\t,'
66	fi
67}
68
69if [ -z "$trusted_commit" ]; then
70	# check all
71	for driver in $(all_net_drivers); do
72		check_rte_flow $driver
73	done
74	exit $result
75fi
76
77# find what changed and check
78if has_code_change 'RTE_FLOW_.*_TYPE_' ||
79		has_file_change 'doc/guides/nics/features'; then
80	for driver in $(changed_net_drivers); do
81		check_rte_flow $driver
82	done
83fi
84exit $result
85