forked from libre-chip/cpu
		
	
		
			
				
	
	
		
			70 lines
		
	
	
		
			No EOL
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			No EOL
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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"$')
 | |
| 
 | |
| 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/cpu/tests/expected/*.vcd)
 | |
|             # 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[@]}"
 | |
|             ;;
 | |
|         *)
 | |
|             fail_file "$file" 0 "unimplemented file kind -- you need to add it to $0"
 | |
|             ;;
 | |
|         esac
 | |
|     done
 | |
| }
 | |
| 
 | |
| main |