mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-03 10:54:56 +00:00
tools: add path support for checkpatch.sh
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
parent
33fe08f4b1
commit
a162e6a599
@ -1,69 +1,76 @@
|
||||
#!/bin/bash
|
||||
# Check a patch for style errors.
|
||||
# Usage:
|
||||
# ./checkpatch.sh <patch>
|
||||
checkpatch="./checkpatch.pl --no-tree -f"
|
||||
usage="./checkpatch.sh <patch> <tree>"
|
||||
patch=$1
|
||||
tree=$2
|
||||
checkpatch="$tree/tools/checkpatch.pl --no-tree -f"
|
||||
ignore="ldpd\|babeld"
|
||||
cwd=${PWD##*/}
|
||||
dirty=0
|
||||
|
||||
# check running from frr/tools/
|
||||
if [[ $cwd != *"tools"* ]]; then
|
||||
echo "[!] script must be run from tools/ directory"
|
||||
exit 1
|
||||
if [[ -z "$1" || -z "$2" ]]; then
|
||||
echo "$usage"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# save working tree
|
||||
cd ..
|
||||
if git status --porcelain | egrep --silent '^(\?\?|.[DM])'; then
|
||||
if git -C $tree status --porcelain | egrep --silent '^(\?\?|.[DM])'; then
|
||||
echo "Detected dirty tree, caching state..."
|
||||
dirty=1
|
||||
git config gc.auto 0;
|
||||
td=$(git status -z | grep -z "^[ARM]D" | cut -z -d' ' -f2- | tr '\0' '\n')
|
||||
INDEX=`git write-tree`
|
||||
git add -f .
|
||||
WORKTREE=`git write-tree`
|
||||
git -C $tree config gc.auto 0;
|
||||
td=$(git -C $tree status -z | grep -z "^[ARM]D" | cut -z -d' ' -f2- | tr '\0' '\n')
|
||||
INDEX=`git -C $tree write-tree`
|
||||
git -C $tree add -f .
|
||||
WORKTREE=`git -C $tree write-tree`
|
||||
echo "Saved index to $INDEX"
|
||||
echo "Saved working tree to $WORKTREE"
|
||||
fi
|
||||
|
||||
# double check
|
||||
if git status --porcelain | egrep --silent '^(\?\?|.[DM])'; then
|
||||
if git -C $tree status --porcelain | egrep --silent '^(\?\?|.[DM])'; then
|
||||
echo "[!] git working directory must be clean."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
git reset --hard
|
||||
git apply $1 2> /dev/null
|
||||
cd tools
|
||||
mkdir -p f1 f2
|
||||
mod=$(git ls-files -m .. | grep ".*\.[ch]" | grep -v $ignore)
|
||||
cp $mod f1/
|
||||
git reset --hard
|
||||
cp $mod f2/
|
||||
for file in f1/*; do
|
||||
$checkpatch $file > "$file"_cp 2> /dev/null
|
||||
done
|
||||
for file in f2/*; do
|
||||
$checkpatch $file > "$file"_cp 2> /dev/null
|
||||
done
|
||||
for file in f1/*_cp; do
|
||||
if [ -a f2/$(basename $file) ]; then
|
||||
diff $file f2/$(basename $file) | grep -A3 "ERROR\|WARNING"
|
||||
else
|
||||
cat $file
|
||||
fi
|
||||
done
|
||||
rm -rf f1 f2
|
||||
cd ..
|
||||
git -C $tree reset --hard
|
||||
git -C $tree apply < $patch
|
||||
mkdir -p /tmp/f1 /tmp/f2
|
||||
mod=$(git -C $tree ls-files -m | grep ".*\.[ch]" | grep -v $ignore)
|
||||
if [ -z "$mod" ]; then
|
||||
echo "There doesn't seem to be any changes."
|
||||
else
|
||||
cp $tree/$mod /tmp/f1/
|
||||
git -C $tree reset --hard
|
||||
cp $tree/$mod /tmp/f2/
|
||||
echo "Running style checks..."
|
||||
for file in /tmp/f1/*; do
|
||||
echo "$checkpatch $file > $file _cp"
|
||||
$checkpatch $file > "$file"_cp 2> /dev/null
|
||||
done
|
||||
for file in /tmp/f2/*; do
|
||||
echo "$checkpatch $file > $file _cp"
|
||||
$checkpatch $file > "$file"_cp 2> /dev/null
|
||||
done
|
||||
echo "Done."
|
||||
for file in /tmp/f1/*_cp; do
|
||||
echo "Report for $(basename $file _cp)"
|
||||
echo "==============================================="
|
||||
if [ -a /tmp/f2/$(basename $file) ]; then
|
||||
diff $file /tmp/f2/$(basename $file) | grep -A3 "ERROR\|WARNING"
|
||||
else
|
||||
cat $file
|
||||
fi
|
||||
done
|
||||
rm -rf /tmp/f1 /tmp/f2
|
||||
fi
|
||||
|
||||
# restore working tree
|
||||
if [ $dirty -eq 1 ]; then
|
||||
git read-tree $WORKTREE;
|
||||
git checkout-index -af;
|
||||
git read-tree $INDEX;
|
||||
git -C $tree read-tree $WORKTREE;
|
||||
git -C $tree checkout-index -af;
|
||||
git -C $tree read-tree $INDEX;
|
||||
if [ -n "$td" ]; then
|
||||
rm $td
|
||||
fi
|
||||
git config --unset gc.auto;
|
||||
git -C $tree config --unset gc.auto;
|
||||
fi
|
||||
|
Loading…
Reference in New Issue
Block a user