File: check-source

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (153 lines) | stat: -rwxr-xr-x 5,066 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/bin/bash
#
# This source file is part of the Swift.org open source project
#
# Copyright (c) 2021-2024 Apple Inc. and the Swift project authors
# Licensed under Apache License v2.0 with Runtime Library Exception
#
# See https://swift.org/LICENSE.txt for license information
# See https://swift.org/CONTRIBUTORS.txt for Swift project authors
#

# This script performs code checks such as verifying that source files
# use the correct license header. Its contents are largely copied from
# https://github.com/apple/swift-nio/blob/main/scripts/soundness.sh

set -eu
here="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

function replace_acceptable_years() {
    # this needs to replace all acceptable forms with 'YEARS'
    sed -e 's/20[12][78901234]-20[12][8901234]/YEARS/' -e 's/20[12][8901234]/YEARS/'
}

printf "=> Checking for unacceptable language… "
# This greps for unacceptable terminology. The square bracket[s] are so that
# "git grep" doesn't find the lines that greps :).
unacceptable_terms=(
    -e blacklis[t]
    -e whitelis[t]
    -e slav[e]
)
# Ignore the NonInclusiveLanguageChecker source and tests
if git grep --color=never -i "${unacceptable_terms[@]}" -- :/**/^NonInclusiveLanguageChecker*.swift > /dev/null; then
    printf "\033[0;31mUnacceptable language found.\033[0m\n"
    git grep -i "${unacceptable_terms[@]}"
    exit 1
fi
printf "\033[0;32mokay.\033[0m\n"

printf "=> Checking license headers… "
tmp=$(mktemp /tmp/.docc-check-source_XXXXXX)

for language in swift-or-c bash md-or-tutorial html docker; do
  declare -a matching_files
  declare -a exceptions
  declare -a reader
  expections=( )
  matching_files=( -name '*' )
  reader=head
  case "$language" in
      swift-or-c)
        exceptions=( -name Package.swift -o -path "./Tests/SwiftDocCTests/Test Bundles/*" -o -path "./Tests/SwiftDocCUtilitiesTests/Test Bundles/*")
        matching_files=( -name '*.swift' -o -name '*.c' -o -name '*.h' )
        cat > "$tmp" <<"EOF"
/*
 This source file is part of the Swift.org open source project

 Copyright (c) YEARS Apple Inc. and the Swift project authors
 Licensed under Apache License v2.0 with Runtime Library Exception

 See https://swift.org/LICENSE.txt for license information
 See https://swift.org/CONTRIBUTORS.txt for Swift project authors
*/
EOF
        ;;
      bash)
        matching_files=( -name '*.sh' )
        cat > "$tmp" <<"EOF"
#!/bin/bash
#
# This source file is part of the Swift.org open source project
#
# Copyright (c) YEARS Apple Inc. and the Swift project authors
# Licensed under Apache License v2.0 with Runtime Library Exception
#
# See https://swift.org/LICENSE.txt for license information
# See https://swift.org/CONTRIBUTORS.txt for Swift project authors
#
EOF
      ;;
      md-or-tutorial)
        exceptions=( -path "./.github/*.md")
        matching_files=( -name '*.md' -o -name '*.tutorial' )
        reader=tail
        cat > "$tmp" <<"EOF"
<!-- Copyright (c) YEARS Apple Inc and the Swift Project authors. All Rights Reserved. -->
EOF
      ;;
      html)
        exceptions=( -path "*/.docc-build/*" )
        matching_files=( -name '*.html' )
        cat > "$tmp" <<"EOF"
<!--
  This source file is part of the Swift.org open source project

  Copyright (c) YEARS Apple Inc. and the Swift project authors
  Licensed under Apache License v2.0 with Runtime Library Exception

  See https://swift.org/LICENSE.txt for license information
  See https://swift.org/CONTRIBUTORS.txt for Swift project authors
-->
EOF
      ;;
      docker)
        matching_files=( -name 'Dockerfile' )
        cat > "$tmp" <<"EOF"
# This source file is part of the Swift.org open source project
#
# Copyright (c) YEARS Apple Inc. and the Swift project authors
# Licensed under Apache License v2.0 with Runtime Library Exception
#
# See https://swift.org/LICENSE.txt for license information
# See https://swift.org/CONTRIBUTORS.txt for Swift project authors
EOF
      ;;
    *)
      echo >&2 "ERROR: unknown language '$language'"
      ;;
  esac

  # Determine which SHA command to use; not all platforms support shasum, but they
  # likely either support shasum or sha256sum.
  SHA_CMD=""
  if [ -x "$(command -v shasum)" ]; then
    SHA_CMD="shasum"
  elif [ -x "$(command -v sha256sum)" ]; then
    SHA_CMD="sha256sum"
  else
    echo >&2 "No sha command found; install shasum or sha256sum or submit a PR that supports another platform"
  fi

  expected_lines=$(cat "$tmp" | wc -l)
  expected_sha=$(cat "$tmp" | "$SHA_CMD")

  (
    cd "$here/.."
    find . \
      \( \! -path './.build/*' -a \
      \! -name '.' -a \
      \( "${matching_files[@]}" \) -a \
      \( \! \( "${exceptions[@]}" \) \) \) | while read line; do
      if [[ "$(cat "$line" | replace_acceptable_years | $reader -n $expected_lines | $SHA_CMD)" != "$expected_sha" ]]; then
        printf "\033[0;31mmissing headers in file '$line'!\033[0m\n"
        diff -u <(cat "$line" | replace_acceptable_years | $reader -n $expected_lines) "$tmp"
        exit 1
      fi
    done
  )
done

printf "\033[0;32mokay.\033[0m\n"
rm "$tmp"