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|/crates/cpu/tests/expected/*.txt)
 | 
						|
            # 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 |