add script for checking copyright headers
This commit is contained in:
parent
51ce7b079e
commit
053391b010
74
scripts/check-copyright.sh
Executable file
74
scripts/check-copyright.sh
Executable file
|
@ -0,0 +1,74 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||||
|
# See Notices.txt for copyright information
|
||||||
|
set -e
|
||||||
|
|
||||||
|
function fail()
|
||||||
|
{
|
||||||
|
local error="$1"
|
||||||
|
echo "error: $error" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function fail_file()
|
||||||
|
{
|
||||||
|
local file="$1" line="$2" error="$3"
|
||||||
|
fail "$file:$((line + 1)): $error"
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_file()
|
||||||
|
{
|
||||||
|
local file="$1" regexes=("${@:2}")
|
||||||
|
local lines
|
||||||
|
mapfile -t lines < "$file"
|
||||||
|
local line
|
||||||
|
for line in "${!regexes[@]}"; do
|
||||||
|
eval '[[ "${lines[i]}" =~ '"${regexes[i]}"' ]]' ||
|
||||||
|
fail_file "$file" "$line" "doesn't match regex: ${regexes[i]}"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
POUND_HEADER=('^"# SPDX-License-Identifier: LGPL-3.0-or-later"$' '^"# See Notices.txt for copyright information"$')
|
||||||
|
SLASH_HEADER=('^"// SPDX-License-Identifier: LGPL-3.0-or-later"$' '^"// See Notices.txt for copyright information"$')
|
||||||
|
MD_HEADER=('^"<!--"$' '^"SPDX-License-Identifier: LGPL-3.0-or-later"$' '^"See Notices.txt for copyright information"$')
|
||||||
|
JSON_HEADER=('^"{"$' '^" \"license_header\": ["$' '^" \"SPDX-License-Identifier: LGPL-3.0-or-later\","$' '^" \"See Notices.txt for copyright information\""')
|
||||||
|
|
||||||
|
function main()
|
||||||
|
{
|
||||||
|
local IFS=$'\n'
|
||||||
|
[[ -z "$(git status --porcelain)" ]] || fail "git repo is dirty"
|
||||||
|
local file
|
||||||
|
for file in $(git ls-tree --name-only --full-tree -r HEAD); do
|
||||||
|
case "/$file" in
|
||||||
|
/Cargo.lock)
|
||||||
|
# generated file
|
||||||
|
;;
|
||||||
|
*/LICENSE.md|*/Notices.txt)
|
||||||
|
# copyright file
|
||||||
|
;;
|
||||||
|
/crates/fayalite/tests/ui/*.stderr)
|
||||||
|
# file that can't contain copyright header
|
||||||
|
;;
|
||||||
|
/.forgejo/workflows/*.yml|*/.gitignore|*.toml)
|
||||||
|
check_file "$file" "${POUND_HEADER[@]}"
|
||||||
|
;;
|
||||||
|
*.md)
|
||||||
|
check_file "$file" "${MD_HEADER[@]}"
|
||||||
|
;;
|
||||||
|
*.sh)
|
||||||
|
check_file "$file" '^'\''#!'\' "${POUND_HEADER[@]}"
|
||||||
|
;;
|
||||||
|
*.rs)
|
||||||
|
check_file "$file" "${SLASH_HEADER[@]}"
|
||||||
|
;;
|
||||||
|
*.json)
|
||||||
|
check_file "$file" "${JSON_HEADER[@]}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
fail_file "$file" 0 "unimplemented file kind -- you need to add it to $0"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
Loading…
Reference in a new issue