Compare commits

..

10 Commits

Author SHA1 Message Date
Aleksandr Vodyanov
c4e9aca130 Merge pull request '[DO-467] fixed extensions' (#5) from feature/DO-467--add-check-license into master
Some checks failed
linter / lint (1.x, ubuntu-latest) (push) Has been cancelled
tests / test (1.16.x, ubuntu-latest) (push) Has been cancelled
tests / test (1.x, ubuntu-latest, true) (push) Has been cancelled
Reviewed-on: https://git.avroid.tech/Tools/Addlicense/pulls/5
2024-05-22 17:23:40 +03:00
Aleksandr Vodyanov
9e5a53975f Merge branch 'master' into feature/DO-467--add-check-license 2024-05-22 17:23:21 +03:00
aleksandr.vodyanov
58108532f9 fixed extensions 2024-05-22 12:46:57 +03:00
Aleksandr Vodyanov
346c3a9fa5 Merge pull request '[DO-467] add new extensions for check' (#4) from feature/DO-467--add-check-license into master
Reviewed-on: https://git.avroid.tech/Tools/Addlicense/pulls/4
2024-05-21 18:35:23 +03:00
aleksandr.vodyanov
354e6707bb fix indents 2024-05-17 16:51:02 +03:00
aleksandr.vodyanov
683554886b up 2024-05-17 16:49:45 +03:00
aleksandr.vodyanov
73cc0f78f5 up 2024-05-17 15:12:04 +03:00
aleksandr.vodyanov
973d52fa7c up 2024-05-16 18:57:04 +03:00
aleksandr.vodyanov
fa159a0c77 up 2024-05-14 12:31:47 +03:00
aleksandr.vodyanov
33190ea6c3 up 2024-05-14 12:29:00 +03:00

57
main.go
View File

@@ -1,5 +1,5 @@
// This program ensures source code files have copyright license headers.
// See usage with "addlicense -h".
// See usage with "addlicense -h".
package main
@@ -37,9 +37,9 @@ Flags:
`
var (
skipExtensionFlags stringSlice
ignorePatterns stringSlice
spdx spdxFlag
skipExtensionFlags stringSlice
ignorePatterns stringSlice
spdx spdxFlag
holder = flag.String("c", "Avroid, Ltd.", "copyright holder")
license = flag.String("l", "commercial", "license type: commercial, apache, bsd, mit, mpl")
@@ -156,10 +156,19 @@ func main() {
log.Printf("%s: %v", f.path, err)
return err
}
hasCorrectAvroidLicense, err := fileHasCorrectAvroidLicense(f.path, data)
if err != nil {
log.Printf("%s: %v", f.path, err)
return err
}
if !hasLicense {
fmt.Printf("%s\n", f.path)
fmt.Printf("%s: missing license header\n", f.path)
return errors.New("missing license header")
}
if !hasCorrectAvroidLicense {
fmt.Printf("%s: incorrect year in license header\n", f.path)
return errors.New("incorrect year in license header")
}
} else {
modified, err := addLicense(f.path, f.mode, t, data)
if err != nil {
@@ -267,6 +276,17 @@ func fileHasLicense(path string) (bool, error) {
return hasLicense(b) || isGenerated(b), nil
}
// fileHasLicense reports whether the file at path contains a correct Avroid license header.
func fileHasCorrectAvroidLicense(path string, data licenseData) (bool, error) {
b, err := ioutil.ReadFile(path)
if err != nil {
return false, err
}
// If generated, we count it as if it has a license.
return hasCorrectAvroidLicense(b, data), nil
}
// licenseHeader populates the provided license template with data, and returns
// licenseHeader populates the provided license template with data, and returns
// it with the proper prefix for the file type specified by path. The file does
// not need to actually exist, only its name is used to determine the prefix.
@@ -282,7 +302,7 @@ func licenseHeader(path string, tmpl *template.Template, data licenseData) ([]by
lic, err = executeTemplate(tmpl, data, "/**", " * ", " */")
case ".cc", ".cpp", ".cs", ".go", ".hcl", ".hh", ".hpp", ".m", ".mm", ".proto", ".rs", ".swift", ".dart", ".groovy", ".v", ".sv":
lic, err = executeTemplate(tmpl, data, "", "// ", "")
case ".py", ".sh", ".yaml", ".yml", ".dockerfile", "dockerfile", ".rb", "gemfile", ".tcl", ".tf", ".bzl", ".pl", ".pp", "build", ".build", ".toml":
case ".py", ".sh", ".yaml", ".yml", ".dockerfile", ".rb", "gemfile", ".tcl", ".tf", ".bzl", ".pl", ".pp", "build", ".build", ".toml":
lic, err = executeTemplate(tmpl, data, "", "# ", "")
case ".el", ".lisp":
lic, err = executeTemplate(tmpl, data, "", ";; ", "")
@@ -300,15 +320,18 @@ func licenseHeader(path string, tmpl *template.Template, data licenseData) ([]by
lic, err = executeTemplate(tmpl, data, "(**", " ", "*)")
case ".ts":
lic, err = executeTemplate(tmpl, data, "/**", " * ", " */")
if err != nil {
if err != nil {
lic, err = executeTemplate(tmpl, data, "<!--", " ", "-->")
}
}
default:
// handle various cmake files
if base == "cmakelists.txt" || strings.HasSuffix(base, ".cmake.in") || strings.HasSuffix(base, ".cmake") {
lic, err = executeTemplate(tmpl, data, "", "# ", "")
}
if base == "Jenkinsfile" || strings.HasSuffix(base, ".groovy" {
if base == "jenkinsfile" || strings.HasSuffix(base, ".groovy") {
lic, err = executeTemplate(tmpl, data, "", "// ", "")
}
if base == "dockerfile" || strings.HasSuffix(base, ".dockerfile") {
lic, err = executeTemplate(tmpl, data, "", "// ", "")
}
}
@@ -365,11 +388,23 @@ func isGenerated(b []byte) bool {
}
func hasLicense(b []byte) bool {
n := 1000
if len(b) < 1000 {
n := 500
if len(b) < 500 {
n = len(b)
}
return bytes.Contains(bytes.ToLower(b[:n]), []byte("copyright")) ||
bytes.Contains(bytes.ToLower(b[:n]), []byte("mozilla public")) ||
bytes.Contains(bytes.ToLower(b[:n]), []byte("spdx-license-identifier"))
}
func hasCorrectAvroidLicense(b []byte, data licenseData) bool {
n := 500
if len(b) < 500 {
n = len(b)
}
if bytes.Contains(bytes.ToLower(b[:n]), []byte("avroid, ltd. written permission")) {
return bytes.Contains(bytes.ToLower(b[:n]), []byte(fmt.Sprintf("copyright (c) avroid, ltd., %s", data.Year)))
}
return true
}