#!/usr/bin/env bash ## Update the copyright headers with the current year ## ## Copyright (C) 2022 Sylvain Benner & Contributors ## ## Author: Arif Er ## URL: https://github.com/syl20bnr/spacemacs ## ## This file is not part of GNU Emacs. ## ## License: GPLv3 ## Search for files recursively in BASEDIR for copyright headers. Skip all the ## files with the current year already in the copyright header. Otherwise, ## replace the most recent copyright header entry with the current year. If ## there are files with only a single year in the copyright header, extend the ## header to the current year. SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" BASEDIR=$(dirname $(dirname $(dirname $SCRIPTPATH))) # Path to .emacs.d/ BLACKLIST=( "core/libs/*" ".cache/*" ".git/*" "assets/*" "*cache*/*" ".*" "persist/*" "private/*" "elpa/*" ) ASSETS=( "*.jpg" "*.png" "*.json" "*.gpg" ) EXCLUDES=() for EXCLUDE in "${BLACKLIST[@]}"; do EXCLUDES+=(! -path "'$BASEDIR/$EXCLUDE'") done IGNORES=() for IGNORE in "${ASSETS[@]}"; do IGNORES+=(! -name "'$IGNORE'") done YEAR=$(date '+%Y') SKIP="^[#;]\{2\} Copyright ([Cc]) \([[:digit:]]\{4\}-\)\?${YEAR} .*$" SINGLE_RX="^\([#;]\{2\} Copyright ([Cc])\) \([[:digit:]]\{4\}\) \(.*\)$" SINGLE_RULE="s/${SINGLE_RX}/\1 \2-${YEAR} \3/" DOUBLE_RX="^\([#;]\{2\} Copyright ([Cc]) [[:digit:]]\{4\}\)-\([[:digit:]]\{4\}\) \(.*\)$" DOUBLE_RULE="0,/${DOUBLE_RX}/ s/${DOUBLE_RX}/\1-${YEAR} \3/" while read FILE; do if grep -qe "${SKIP}" $FILE; then continue fi if grep -qe "$DOUBLE_RX" $FILE; then # No in-place replacement because there are files with multiple headers tac $FILE | sed "${DOUBLE_RULE}" | tac > /tmp/em-copyright cat /tmp/em-copyright > $FILE echo "$FILE has been updated. - DOUBLE" continue fi if grep -qe "$SINGLE_RX" $FILE; then sed -i "${SINGLE_RULE}" $FILE echo "$FILE has been updated. - SINGLE" continue fi done <<< $(eval find "$BASEDIR/" -type f ${EXCLUDES[@]} ${IGNORES[@]})