dpdk/devtools/check-doc-vs-code.sh
<<
>>
Prefs
   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