about summary refs log tree commit diff stats
path: root/templates/awk/scripts
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-04-01 12:56:56 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-04-01 12:56:56 +0200
commit4fec87e212697a3f58245eb71a054357aa9f0898 (patch)
tree1992ad88fcebdf90c6bd76d04728c085fb5fbe21 /templates/awk/scripts
parentrefactor(templates/unmaintained): Move out of the templates dir (diff)
downloadflake-templates-4fec87e212697a3f58245eb71a054357aa9f0898.tar.gz
flake-templates-4fec87e212697a3f58245eb71a054357aa9f0898.zip
refactor(templates): Instantiate all symlinks
Symlinks are copied verbatim, when nix initializes a template, thus
symlinking common files does not work.
Diffstat (limited to '')
-rwxr-xr-x[l---------]templates/awk/scripts/renew_copyright_header.sh87
1 files changed, 86 insertions, 1 deletions
diff --git a/templates/awk/scripts/renew_copyright_header.sh b/templates/awk/scripts/renew_copyright_header.sh
index f286da9..edb0a65 120000..100755
--- a/templates/awk/scripts/renew_copyright_header.sh
+++ b/templates/awk/scripts/renew_copyright_header.sh
@@ -1 +1,86 @@
-../../../common/renew_copyright_header.sh
\ No newline at end of file
+#! /usr/bin/env sh
+
+# NOTE: This is the line length of the .licensure.yml header template **plus** the extra
+# line after the template comment.
+TEMPLATE_LINE_LENGTH=20
+
+PROJECT_ROOT="$(git rev-parse --show-toplevel)"
+
+remove() {
+    extension="$1"
+    file="$2"
+
+    # We need to differentiate, when removing the old copyright header, as some
+    # formatters do weird things to the file
+    case "$extension" in
+    # normal '#' comments (these are $TEMPLATE_LINE_LENGTH lines long)
+    "Makefile" | "toml" | "envrc" | "yml" | "gitignore" | "awk")
+        sed --in-place "1,${TEMPLATE_LINE_LENGTH}d" "$file"
+        ;;
+    # normal '/* ... */' like comments (these are $TEMPLATE_LINE_LENGTH + 2 lines long)
+    "c" | "h" | "md" | "rs")
+        length="$((TEMPLATE_LINE_LENGTH + 2))"
+        sed --in-place "1,${length}d;" "$file"
+        ;;
+    # alejandra (the nix formatter) removes the blank line after the comment,
+    # thus only $TEMPLATE_LINE_LENGTH - 1 lines
+    "nix")
+        length="$((TEMPLATE_LINE_LENGTH - 1))"
+        sed --in-place "1,${length}d;" "$file"
+        ;;
+    # Shell needs a shebang on the first line, only after the first line can we
+    # remove the $TEMPLATE_LINE_LENGTH lines
+    "sh")
+        sed --in-place "2,${TEMPLATE_LINE_LENGTH}d;" "$file"
+        licensure --in-place "$file"
+
+        TEMPLATE_LINE_LENGTH_NEW="$(($(yq --raw-output '.licenses | map(.template) | join("")' "$PROJECT_ROOT/.licensure.yml" | wc -l) + $(yq '.comments | last | .commenter.trailing_lines' "$PROJECT_ROOT/.licensure.yml")))"
+
+        # delete the current shebang
+        to="$((TEMPLATE_LINE_LENGTH_NEW + 1))"
+        sed --in-place "${TEMPLATE_LINE_LENGTH_NEW},${to}d;" "$file"
+
+        # add a new one
+        sed --in-place "1i#! /usr/bin/env sh" "$file"
+        ;;
+    *)
+        echo "File '$file' with extension '$extension' is not know yet, please add it!"
+        ;;
+    esac
+}
+
+list() {
+    echo "$extension -> $file"
+}
+
+if [ -f "$1" ]; then
+    file="$(realpath "$1")"
+    filename="$(basename -- "$file")"
+    extension="${filename##*.}"
+    filename="${filename%.*}"
+
+    if [ -n "$DRY_RUN" ]; then
+        list "$extension" "$file"
+    else
+        remove "$extension" "$file"
+    fi
+else
+    fd --type file --hidden . | while read -r file; do
+        if grep --quiet 'SPDX-License-Identifier: GPL-3.0-or-later' "$file"; then
+            filename="$(basename -- "$file")"
+            extension="${filename##*.}"
+            filename="${filename%.*}"
+
+            if [ -n "$DRY_RUN" ]; then
+                list "$extension" "$file"
+            else
+                remove "$extension" "$file"
+            fi
+        fi
+    done
+
+    if [ -z "$DRY_RUN" ]; then
+        licensure --in-place --project
+        nix fmt
+    fi
+fi