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