From 4e05da599866df692bad6b44e8f01b5845a823bb Mon Sep 17 00:00:00 2001 From: Caio Oliveira Date: Fri, 12 Sep 2025 20:23:01 -0300 Subject: [PATCH 1/3] [license] remove printf usage Signed-off-by: Caio Oliveira --- .ci/license-header.sh | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/.ci/license-header.sh b/.ci/license-header.sh index 587a552233..0cbfaa789a 100755 --- a/.ci/license-header.sh +++ b/.ci/license-header.sh @@ -47,8 +47,8 @@ check_header() { COMMENT_TYPE="$1" FILE="$2" - 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") + HEADER_LINE1=$(echo "$HEADER_LINE1_TEMPLATE" | sed "s|{COMMENT_TEMPLATE}|$COMMENT_TYPE|g") + HEADER_LINE2=$(echo "$HEADER_LINE2_TEMPLATE" | sed "s|{COMMENT_TEMPLATE}|$COMMENT_TYPE|g") FOUND=0 while IFS= read -r line || [ -n "$line" ]; do @@ -121,9 +121,8 @@ for TYPE in "SRC" "OTHER"; do echo " '$DESC' files is:" echo echo "=== BEGIN ===" - printf '%s\n%s\n' \ - "$(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 "$HEADER_LINE1_TEMPLATE" | sed "s|{COMMENT_TEMPLATE}|$COMMENT_TYPE|g" + echo "$HEADER_LINE2_TEMPLATE" | sed "s|{COMMENT_TEMPLATE}|$COMMENT_TYPE|g" echo "=== END ===" done @@ -157,28 +156,33 @@ if [ "$FIX" = "true" ]; then ;; 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") + LINE1=$(echo "$HEADER_LINE1_TEMPLATE" | sed "s|{COMMENT_TEMPLATE}|$COMMENT_TYPE|g") + LINE2=$(echo "$HEADER_LINE2_TEMPLATE" | sed "s|{COMMENT_TEMPLATE}|$COMMENT_TYPE|g") TMP="$TMP_DIR/$BASENAME.tmp" UPDATED=0 cp -p $file $TMP - printf '' > $TMP + echo "" > $TMP while IFS= read -r line || [ -n "$line" ]; do if [ "$UPDATED" -eq 0 ] && echo "$line" | grep "$COPYRIGHT_OWNER" >/dev/null 2>&1; then - printf '%s\n%s\n' "$LINE1" "$LINE2" >> "$TMP" + { + echo "$LINE1" + echo "$LINE2" + } >> "$TMP" IFS= read -r _ || true UPDATED=1 else - printf '%s\n' "$line" >> "$TMP" + echo "$line" >> "$TMP" fi done < "$file" if [ "$UPDATED" -eq 0 ]; then { - printf '%s\n%s\n\n' "$LINE1" "$LINE2" + echo "$LINE1" + echo "$LINE2" + echo cat "$TMP" } > "$file" else From 972279d823399a35599b3b6d5336225c5dbe115a Mon Sep 17 00:00:00 2001 From: Caio Oliveira Date: Fri, 12 Sep 2025 20:23:01 -0300 Subject: [PATCH 2/3] [license] reduce usage of while and improve template usage Signed-off-by: Caio Oliveira --- .ci/license-header.sh | 65 +++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 39 deletions(-) diff --git a/.ci/license-header.sh b/.ci/license-header.sh index 587a552233..10df1efb15 100755 --- a/.ci/license-header.sh +++ b/.ci/license-header.sh @@ -29,9 +29,6 @@ if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then exit 0 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="" OTHER_FILES="" @@ -43,30 +40,10 @@ if git diff --quiet "$BASE"..HEAD; then fi FILES=$(git diff --name-only "$BASE") -check_header() { +echo_header() { COMMENT_TYPE="$1" - FILE="$2" - - 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 + echo "$COMMENT_TYPE SPDX-FileCopyrightText: Copyright $COPYRIGHT_YEAR $COPYRIGHT_OWNER" + echo "$COMMENT_TYPE SPDX-License-Identifier: $COPYRIGHT_LICENSE" } for file in $FILES; do @@ -84,7 +61,20 @@ for file in $FILES; do 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 if [ -z "$SRC_FILES" ] && [ -z "$OTHER_FILES" ]; then @@ -121,9 +111,7 @@ for TYPE in "SRC" "OTHER"; do echo " '$DESC' files is:" echo echo "=== BEGIN ===" - printf '%s\n%s\n' \ - "$(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_header "$COMMENT_TYPE" echo "=== END ===" done @@ -157,28 +145,27 @@ if [ "$FIX" = "true" ]; then ;; 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" UPDATED=0 + cp -p "$file" "$TMP" + > "$TMP" - cp -p $file $TMP - printf '' > $TMP - + # this logic is bit hacky but sed don't work well with $VARIABLES + # it's this or complete remove this logic and keep only the old way while IFS= read -r line || [ -n "$line" ]; do 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 UPDATED=1 else - printf '%s\n' "$line" >> "$TMP" + echo "$line" >> "$TMP" fi done < "$file" if [ "$UPDATED" -eq 0 ]; then { - printf '%s\n%s\n\n' "$LINE1" "$LINE2" + echo_header "$COMMENT_TYPE" + echo cat "$TMP" } > "$file" else From 2f0c9eb9ba8a188fe94fa4568ab2e660631cf576 Mon Sep 17 00:00:00 2001 From: Caio Oliveira Date: Sun, 14 Sep 2025 20:42:49 -0300 Subject: [PATCH 3/3] [license] keep hacky way under UPDATE Signed-off-by: Caio Oliveira --- .ci/license-header.sh | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/.ci/license-header.sh b/.ci/license-header.sh index 10df1efb15..d2e339b8f3 100755 --- a/.ci/license-header.sh +++ b/.ci/license-header.sh @@ -14,8 +14,9 @@ if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then echo "This script checks and optionally fixes license headers in source, CMake and shell script files." echo echo "Environment Variables:" - echo " FIX=true Automatically add the correct license headers to offending files." - echo " COMMIT=true If FIX=true, commit the changes automatically." + echo " FIX=true | Automatically add the correct license headers to offending files." + echo " UPDATE=true | Automatically update current license headers of offending files." + echo " COMMIT=true | If FIX=true, commit the changes automatically." echo echo "Usage Examples:" echo " # Just check headers (will fail if headers are missing)" @@ -24,8 +25,18 @@ if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then echo " # Fix headers only" echo " FIX=true .ci/license-header.sh" echo + echo " # Update headers only" + echo " # if COPYRIGHT_OWNER is '$COPYRIGHT_OWNER'" + echo " # or else will have 'FIX=true' behavior)" + echo " UPDATE=true .ci/license-header.sh" + echo echo " # Fix headers and commit changes" echo " FIX=true COMMIT=true .ci/license-header.sh" + echo + echo " # Update headers and commit changes" + echo " # if COPYRIGHT_OWNER is '$COPYRIGHT_OWNER'" + echo " # or else will have 'FIX=true' behavior)" + echo " UPDATE=true COMMIT=true .ci/license-header.sh" exit 0 fi @@ -126,7 +137,7 @@ cat << EOF EOF TMP_DIR=$(mktemp -d /tmp/license-header.XXXXXX) || exit 1 -if [ "$FIX" = "true" ]; then +if [ "$FIX" = "true" ] || [ "$UPDATE" = "true" ]; then echo echo "license-header.sh: FIX set to true, fixing headers..." @@ -152,15 +163,17 @@ if [ "$FIX" = "true" ]; then # this logic is bit hacky but sed don't work well with $VARIABLES # it's this or complete remove this logic and keep only the old way - while IFS= read -r line || [ -n "$line" ]; do - if [ "$UPDATED" -eq 0 ] && echo "$line" | grep "$COPYRIGHT_OWNER" >/dev/null 2>&1; then - echo_header "$COMMENT_TYPE" >> "$TMP" - IFS= read -r _ || true - UPDATED=1 - else - echo "$line" >> "$TMP" - fi - done < "$file" + if [ "$UPDATE" = "true" ]; then + while IFS= read -r line || [ -n "$line" ]; do + if [ "$UPDATED" -eq 0 ] && echo "$line" | grep "$COPYRIGHT_OWNER" >/dev/null 2>&1; then + echo_header "$COMMENT_TYPE" >> "$TMP" + IFS= read -r _ || true + UPDATED=1 + else + echo "$line" >> "$TMP" + fi + done < "$file" + fi if [ "$UPDATED" -eq 0 ]; then {