numam-dpdk/devtools/parse-flow-support.sh
Ali Alnubani a70c98f4dd devtools: check for supported git version
The script devtools/parse-flow-support.sh uses the git-grep
option (-o, --only-matching), which is only supported from
git version 2.19 and onwards.[1]

The script now exits early providing a clear message to the user
about the required git version instead of showing the following
error messages multiple times:
  error: unknown switch `o'
  usage: git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]
  [..]

[1] https://github.com/git/git/blob/v2.19.0/Documentation/RelNotes/2.19.0.txt

Signed-off-by: Ali Alnubani <alialnu@nvidia.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Tested-by: Chaoyong He <chaoyong.he@corigine.com>
2022-10-31 17:16:54 +01:00

86 lines
1.8 KiB
Bash
Executable File

#! /bin/sh -e
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2021 Mellanox Technologies, Ltd
# Parse rte_flow support of a driver directory,
# and optionally show difference with a doc file in .ini format.
dir=$1 # drivers/net/foo
ref=$2 # doc/guides/nics/features/foo.ini
if [ -z "$dir" ]; then
echo "directory argument is required" >&2
exit 1
fi
# test git-grep for -o (--only-matching) option
if ! git grep -qo git -- $0 >/dev/null 2>&1; then
echo "git version >= 2.19 is required" >&2
exit 1
fi
# sorting order
export LC_COLLATE=C
# exclude exceptions
exclude() # <pattern>
{
case $(basename $dir) in
bnxt)
filter=$(sed -n "/$1/{N;/TYPE_NOT_SUPPORTED/P;}" \
$dir/tf_ulp/ulp_rte_handler_tbl.c |
grep -wo "$1[[:alnum:]_]*" | sort -u |
tr '\n' '|' | sed 's,.$,\n,')
exceptions='RTE_FLOW_ACTION_TYPE_SHARED'
grep -vE "$filter" | grep -vE $exceptions;;
*) cat
esac
}
# include exceptions
include() # <pattern>
{
case $(basename $dir) in
esac
}
# generate INI section
list() # <title> <pattern>
{
echo "[$1]"
git grep -who "$2[[:alnum:]_]*" $dir |
(exclude $2; include $2) | sort -u |
awk 'sub(/'$2'/, "") {printf "%-20s = Y\n", tolower($0)}'
}
rte_flow_support() # <category>
{
title="rte_flow $1s"
pattern=$(echo "RTE_FLOW_$1_TYPE_" | awk '{print toupper($0)}')
list "$title" "$pattern" | grep -vwE 'void|indirect|end'
}
if [ -z "$ref" ]; then # generate full tables
rte_flow_support item
echo
rte_flow_support action
exit 0
fi
# compare with reference input
rte_flow_compare() # <category>
{
section="rte_flow $1s]"
{
rte_flow_support $1
sed -n "/$section/,/]/p" "$ref" | sed '/^$/d'
} |
sed '/]/d' | # ignore section title
sed 's, *=.*,,' | # ignore value (better in doc than generated one)
sort | uniq -u | # show differences
sed "s,^,$1 ," # prefix with category name
}
rte_flow_compare item
rte_flow_compare action