You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.7 KiB
96 lines
2.7 KiB
#!/bin/sh |
|
|
|
copyright='Daniel Scharrer' |
|
|
|
die() { |
|
printf '%s\n' "$1" |
|
exit 1 |
|
} |
|
|
|
if [ -z "$1" ] || [ ! -d "$1" ] |
|
then repo="$(git rev-parse --show-toplevel)" |
|
else repo="$1" ; shift |
|
fi |
|
[ -d "$repo/.git" ] || die "$1 is not a git repository" |
|
|
|
if [ -z "$1" ] |
|
then last_tag="$(git --git-dir="$repo/.git" rev-list --tags --max-count=1)" |
|
else last_tag="$1" |
|
fi |
|
[ -z "$last_tag" ] && die "Could not determine last tag" |
|
last_tag_name="$(git --git-dir="$repo/.git" describe --tags "$last_tag")" |
|
printf 'Updating files modified since %s\n' "$last_tag_name" |
|
|
|
files="$(git --git-dir="$repo/.git" diff --name-only "$last_tag" HEAD | tr '\n' ' ')" |
|
eval "set -- LICENSE COPYING $files" |
|
|
|
for file ; do |
|
path="$repo/$file" |
|
[ -f "$path" ] || continue # File was deleted |
|
|
|
case "$file" in |
|
*.yml|.*) |
|
# Never try to update the copyright year for these files |
|
continue ;; |
|
esac |
|
|
|
c="$(grep -P "(^|[^a-zA-Z0-9_])Copyright( \\([cC]\\))? (\\d{4}\\-)?\\d{4} $copyright" "$path")" |
|
|
|
if [ -z "$c" ] ; then |
|
case "$file" in |
|
cmake/*.cpp|*CMakeLists.txt|*.md|*.1|*.in|LICENSE.*) |
|
# These files don't have to contain copyright information |
|
;; |
|
*.*|scripts/*) |
|
c="$(grep -P "(^|[^a-zA-Z0-9_])Copyright( \([cC]\))?[ \:].*public domain" "$path")" |
|
[ -z "$c" ] && printf 'No copyright info found in %s, skipping\n' "$file" ;; |
|
esac |
|
continue |
|
fi |
|
|
|
if [ "$(printf '%s\n' "$c" | wc -l)" -gt 1 ] ; then |
|
printf 'Multiple copyright lines found in %s, skipping\n' "$file" |
|
continue |
|
fi |
|
|
|
s='\(^.*Copyright\( ([cC])\)\? \([0-9]\{4\}\-\)\?\)\([0-9]\{4\}\)\( '"$copyright"'.*$\)' |
|
old_year="$(printf '%s\n' "$c" | sed "s/$s/\\4/")" |
|
if [ -z "$old_year" ] || printf '%s\n' "$old_year" | grep -P '[^0-9]' > /dev/null ; then |
|
printf 'Could not determine new copyright year for %s, skipping\n' "$file" |
|
continue |
|
fi |
|
|
|
case "$file" in |
|
COPYING|LICENSE) |
|
new_year="$(git --git-dir="$repo/.git" log -1 --format=%cd --date=short)" ;; |
|
*) |
|
new_year="$(git --git-dir="$repo/.git" log -1 --format=%cd --date=short -- "$file")" |
|
esac |
|
new_year="${new_year%%-*}" |
|
if [ -z "$new_year" ] || printf '%s\n' "$new_year" | grep -P '[^0-9]' > /dev/null ; then |
|
printf 'Could not determine new copyright year for %s, skipping\n' "$file" |
|
continue |
|
fi |
|
|
|
[ "$new_year" = "$old_year" ] && continue |
|
|
|
if [ ! "$new_year" -gt "$old_year" ] ; then |
|
printf 'Copyright downgrade in %s: %s→%s, skipping\n' "$file" "$old_year" "$new_year" |
|
continue |
|
fi |
|
|
|
first_year="$(printf '%s\n' "$c" | sed "s/$s/\\3/")" |
|
if [ -z "$first_year" ] ; then |
|
replacement="$old_year-$new_year" |
|
old="$old_year" |
|
new="$old_year-$new_year" |
|
else |
|
replacement="$new_year" |
|
old="$first_year$old_year" |
|
new="$first_year$new_year" |
|
fi |
|
|
|
printf '%s: %s → %s\n' "$file" "$old" "$new" |
|
sed -i "s/$s/\\1$replacement\\5/" "$path" |
|
|
|
done
|
|
|