[license] reduce usage of while and improve template usage

Signed-off-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
This commit is contained in:
Caio Oliveira 2025-09-12 20:23:01 -03:00
parent 3f90405749
commit 972279d823
Signed by: DraVee
GPG key ID: 362DA3DC1901E080

View file

@ -29,9 +29,6 @@ if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
exit 0 exit 0
fi fi
HEADER_LINE1_TEMPLATE="{COMMENT_TEMPLATE} SPDX-FileCopyrightText: Copyright $COPYRIGHT_YEAR $COPYRIGHT_OWNER"
HEADER_LINE2_TEMPLATE="{COMMENT_TEMPLATE} SPDX-License-Identifier: $COPYRIGHT_LICENSE"
SRC_FILES="" SRC_FILES=""
OTHER_FILES="" OTHER_FILES=""
@ -43,30 +40,10 @@ if git diff --quiet "$BASE"..HEAD; then
fi fi
FILES=$(git diff --name-only "$BASE") FILES=$(git diff --name-only "$BASE")
check_header() { echo_header() {
COMMENT_TYPE="$1" COMMENT_TYPE="$1"
FILE="$2" echo "$COMMENT_TYPE SPDX-FileCopyrightText: Copyright $COPYRIGHT_YEAR $COPYRIGHT_OWNER"
echo "$COMMENT_TYPE SPDX-License-Identifier: $COPYRIGHT_LICENSE"
HEADER_LINE1=$(printf '%s\n' "$HEADER_LINE1_TEMPLATE" | sed "s|{COMMENT_TEMPLATE}|$COMMENT_TYPE|g")
HEADER_LINE2=$(printf '%s\n' "$HEADER_LINE2_TEMPLATE" | sed "s|{COMMENT_TEMPLATE}|$COMMENT_TYPE|g")
FOUND=0
while IFS= read -r line || [ -n "$line" ]; do
if [ "$line" = "$HEADER_LINE1" ]; then
IFS= read -r next_line || next_line=""
if [ "$next_line" = "$HEADER_LINE2" ]; then
FOUND=1
break
fi
fi
done < "$FILE"
if [ "$FOUND" -eq 0 ]; then
case "$COMMENT_TYPE" in
"//") SRC_FILES="$SRC_FILES $FILE" ;;
"#") OTHER_FILES="$OTHER_FILES $FILE" ;;
esac
fi
} }
for file in $FILES; do for file in $FILES; do
@ -84,7 +61,20 @@ for file in $FILES; do
esac ;; esac ;;
esac esac
check_header "$COMMENT_TYPE" "$file" HEADER=$(echo_header "$COMMENT_TYPE")
HEAD_LINES=$(head -n5 "$file")
CORRECT_COPYRIGHT=$(echo "$HEAD_LINES" | awk \
-v line1="$(echo "$HEADER" | sed -n '1p')" \
-v line2="$(echo "$HEADER" | sed -n '2p')" \
'($0==line1){getline; if($0==line2){f=1}else{f=0}} END{print (f?f:0)}')
if [ "$CORRECT_COPYRIGHT" != "1" ]; then
case "$COMMENT_TYPE" in
"//") SRC_FILES="$SRC_FILES $file" ;;
"#") OTHER_FILES="$OTHER_FILES $file" ;;
esac
fi
done done
if [ -z "$SRC_FILES" ] && [ -z "$OTHER_FILES" ]; then if [ -z "$SRC_FILES" ] && [ -z "$OTHER_FILES" ]; then
@ -121,9 +111,7 @@ for TYPE in "SRC" "OTHER"; do
echo " '$DESC' files is:" echo " '$DESC' files is:"
echo echo
echo "=== BEGIN ===" echo "=== BEGIN ==="
printf '%s\n%s\n' \ echo_header "$COMMENT_TYPE"
"$(printf '%s\n' "$HEADER_LINE1_TEMPLATE" | sed "s|{COMMENT_TEMPLATE}|$COMMENT_TYPE|g")" \
"$(printf '%s\n' "$HEADER_LINE2_TEMPLATE" | sed "s|{COMMENT_TEMPLATE}|$COMMENT_TYPE|g")"
echo "=== END ===" echo "=== END ==="
done done
@ -157,28 +145,27 @@ if [ "$FIX" = "true" ]; then
;; ;;
esac esac
LINE1=$(printf '%s\n' "$HEADER_LINE1_TEMPLATE" | sed "s|{COMMENT_TEMPLATE}|$COMMENT_TYPE|g")
LINE2=$(printf '%s\n' "$HEADER_LINE2_TEMPLATE" | sed "s|{COMMENT_TEMPLATE}|$COMMENT_TYPE|g")
TMP="$TMP_DIR/$BASENAME.tmp" TMP="$TMP_DIR/$BASENAME.tmp"
UPDATED=0 UPDATED=0
cp -p "$file" "$TMP"
> "$TMP"
cp -p $file $TMP # this logic is bit hacky but sed don't work well with $VARIABLES
printf '' > $TMP # it's this or complete remove this logic and keep only the old way
while IFS= read -r line || [ -n "$line" ]; do while IFS= read -r line || [ -n "$line" ]; do
if [ "$UPDATED" -eq 0 ] && echo "$line" | grep "$COPYRIGHT_OWNER" >/dev/null 2>&1; then if [ "$UPDATED" -eq 0 ] && echo "$line" | grep "$COPYRIGHT_OWNER" >/dev/null 2>&1; then
printf '%s\n%s\n' "$LINE1" "$LINE2" >> "$TMP" echo_header "$COMMENT_TYPE" >> "$TMP"
IFS= read -r _ || true IFS= read -r _ || true
UPDATED=1 UPDATED=1
else else
printf '%s\n' "$line" >> "$TMP" echo "$line" >> "$TMP"
fi fi
done < "$file" done < "$file"
if [ "$UPDATED" -eq 0 ]; then if [ "$UPDATED" -eq 0 ]; then
{ {
printf '%s\n%s\n\n' "$LINE1" "$LINE2" echo_header "$COMMENT_TYPE"
echo
cat "$TMP" cat "$TMP"
} > "$file" } > "$file"
else else