From 541722a25434e4d2871d781ae3c79e59e00ea349 Mon Sep 17 00:00:00 2001 From: Marc-Antoine Ruel Date: Sun, 24 May 2020 12:51:43 -0400 Subject: [PATCH] Skip generated files Ensure it skips for both check only mode and modification mode. Fixes #39 --- main.go | 26 +++++++++++++++++++++----- testdata/expected/file_generated.go | 7 +++++++ testdata/initial/file_generated.go | 7 +++++++ 3 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 testdata/expected/file_generated.go create mode 100644 testdata/initial/file_generated.go diff --git a/main.go b/main.go index 295aeb1..4555a04 100644 --- a/main.go +++ b/main.go @@ -26,6 +26,7 @@ import ( "log" "os" "path/filepath" + "regexp" "strings" "time" @@ -110,12 +111,12 @@ func main() { return nil } // Check if file has a license - isMissingLicenseHeader, err := fileHasLicense(f.path) + hasLicense, err := fileHasLicense(f.path) if err != nil { log.Printf("%s: %v", f.path, err) return err } - if isMissingLicenseHeader { + if !hasLicense { fmt.Printf("%s\n", f.path) return errors.New("missing license header") } @@ -165,6 +166,9 @@ func walk(ch chan<- *file, start string) { }) } +// addLicense add a license to the file if missing. +// +// It returns true if the file was updated. func addLicense(path string, fmode os.FileMode, tmpl *template.Template, data *copyrightData) (bool, error) { var lic []byte var err error @@ -174,7 +178,10 @@ func addLicense(path string, fmode os.FileMode, tmpl *template.Template, data *c } b, err := ioutil.ReadFile(path) - if err != nil || hasLicense(b) { + if err != nil { + return false, err + } + if hasLicense(b) || isGenerated(b) { return false, err } @@ -193,10 +200,11 @@ func addLicense(path string, fmode os.FileMode, tmpl *template.Template, data *c // fileHasLicense reports whether the file at path contains a license header. func fileHasLicense(path string) (bool, error) { b, err := ioutil.ReadFile(path) - if err != nil || hasLicense(b) { + if err != nil { return false, err } - return true, nil + // If generated, we count it as if it has a license. + return hasLicense(b) || isGenerated(b), nil } func licenseHeader(path string, tmpl *template.Template, data *copyrightData) ([]byte, error) { @@ -262,6 +270,14 @@ func hashBang(b []byte) []byte { return nil } +var reGenerated = regexp.MustCompile(`(?m)^.{1,2} Code generated .* DO NOT EDIT\.$`) + +// isGenerated returns true if it contains a string that implies the file was +// generated. +func isGenerated(b []byte) bool { + return reGenerated.Match(b) +} + func hasLicense(b []byte) bool { n := 1000 if len(b) < 1000 { diff --git a/testdata/expected/file_generated.go b/testdata/expected/file_generated.go new file mode 100644 index 0000000..b6fe1b3 --- /dev/null +++ b/testdata/expected/file_generated.go @@ -0,0 +1,7 @@ +// Code generated by "stringer -type foo"; DO NOT EDIT. + +package main + +func (f Foo) String() string { + return "foo" +} diff --git a/testdata/initial/file_generated.go b/testdata/initial/file_generated.go new file mode 100644 index 0000000..b6fe1b3 --- /dev/null +++ b/testdata/initial/file_generated.go @@ -0,0 +1,7 @@ +// Code generated by "stringer -type foo"; DO NOT EDIT. + +package main + +func (f Foo) String() string { + return "foo" +}