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