custom license from file
This commit is contained in:
committed by
Jacob McCann
parent
486fb589fd
commit
c63d25f5fc
50
main.go
50
main.go
@@ -20,6 +20,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"html/template"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
@@ -44,9 +45,10 @@ Flags:
|
|||||||
`
|
`
|
||||||
|
|
||||||
var (
|
var (
|
||||||
holder = flag.String("c", "Google LLC", "copyright holder")
|
holder = flag.String("c", "Google LLC", "copyright holder")
|
||||||
license = flag.String("l", "apache", "license type: apache, bsd, mit")
|
license = flag.String("l", "apache", "license type: apache, bsd, mit")
|
||||||
year = flag.Int("y", time.Now().Year(), "year")
|
licensef = flag.String("f", "", "license file")
|
||||||
|
year = flag.Int("y", time.Now().Year(), "year")
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -65,6 +67,26 @@ func main() {
|
|||||||
Holder: *holder,
|
Holder: *holder,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var t *template.Template
|
||||||
|
if *licensef != "" {
|
||||||
|
d, err := ioutil.ReadFile(*licensef)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("template error: %s", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
t, err = template.New("").Parse(string(d))
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("template error: %s", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
t = licenseTemplate[*license]
|
||||||
|
if t == nil {
|
||||||
|
log.Printf("unknown license: %s", *license)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// process at most 1000 files in parallel
|
// process at most 1000 files in parallel
|
||||||
ch := make(chan *file, 1000)
|
ch := make(chan *file, 1000)
|
||||||
done := make(chan struct{})
|
done := make(chan struct{})
|
||||||
@@ -73,7 +95,7 @@ func main() {
|
|||||||
for f := range ch {
|
for f := range ch {
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func(f *file) {
|
go func(f *file) {
|
||||||
err := addLicense(f.path, f.mode, *license, data)
|
err := addLicense(f.path, f.mode, t, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("%s: %v", f.path, err)
|
log.Printf("%s: %v", f.path, err)
|
||||||
}
|
}
|
||||||
@@ -110,30 +132,30 @@ func walk(ch chan<- *file, start string) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func addLicense(path string, fmode os.FileMode, typ string, data *copyrightData) error {
|
func addLicense(path string, fmode os.FileMode, tmpl *template.Template, data *copyrightData) error {
|
||||||
var lic []byte
|
var lic []byte
|
||||||
var err error
|
var err error
|
||||||
switch filepath.Ext(path) {
|
switch filepath.Ext(path) {
|
||||||
default:
|
default:
|
||||||
return nil
|
return nil
|
||||||
case ".c", ".h":
|
case ".c", ".h":
|
||||||
lic, err = prefix(typ, data, "/*", " * ", " */")
|
lic, err = prefix(tmpl, data, "/*", " * ", " */")
|
||||||
case ".js", ".jsx", ".tsx", ".css", ".tf":
|
case ".js", ".jsx", ".tsx", ".css", ".tf":
|
||||||
lic, err = prefix(typ, data, "/**", " * ", " */")
|
lic, err = prefix(tmpl, data, "/**", " * ", " */")
|
||||||
case ".cc", ".cpp", ".cs", ".go", ".hh", ".hpp", ".java", ".m", ".mm", ".proto", ".rs", ".scala", ".swift", ".dart":
|
case ".cc", ".cpp", ".cs", ".go", ".hh", ".hpp", ".java", ".m", ".mm", ".proto", ".rs", ".scala", ".swift", ".dart":
|
||||||
lic, err = prefix(typ, data, "", "// ", "")
|
lic, err = prefix(tmpl, data, "", "// ", "")
|
||||||
case ".py", ".sh", ".yaml", ".yml":
|
case ".py", ".sh", ".yaml", ".yml":
|
||||||
lic, err = prefix(typ, data, "", "# ", "")
|
lic, err = prefix(tmpl, data, "", "# ", "")
|
||||||
case ".el", ".lisp":
|
case ".el", ".lisp":
|
||||||
lic, err = prefix(typ, data, "", ";; ", "")
|
lic, err = prefix(tmpl, data, "", ";; ", "")
|
||||||
case ".erl":
|
case ".erl":
|
||||||
lic, err = prefix(typ, data, "", "% ", "")
|
lic, err = prefix(tmpl, data, "", "% ", "")
|
||||||
case ".hs", ".sql":
|
case ".hs", ".sql":
|
||||||
lic, err = prefix(typ, data, "", "-- ", "")
|
lic, err = prefix(tmpl, data, "", "-- ", "")
|
||||||
case ".html", ".xml":
|
case ".html", ".xml":
|
||||||
lic, err = prefix(typ, data, "<!--", " ", "-->")
|
lic, err = prefix(tmpl, data, "<!--", " ", "-->")
|
||||||
case ".php":
|
case ".php":
|
||||||
lic, err = prefix(typ, data, "<?php", "// ", "?>")
|
lic, err = prefix(tmpl, data, "<?php", "// ", "?>")
|
||||||
}
|
}
|
||||||
if err != nil || lic == nil {
|
if err != nil || lic == nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
9
tmpl.go
9
tmpl.go
@@ -36,14 +36,9 @@ type copyrightData struct {
|
|||||||
Holder string
|
Holder string
|
||||||
}
|
}
|
||||||
|
|
||||||
// prefix will execute a license template l with data d
|
// prefix will execute a license template t with data d
|
||||||
// and prefix the result with top, middle and bottom.
|
// and prefix the result with top, middle and bottom.
|
||||||
func prefix(l string, d *copyrightData, top, mid, bot string) ([]byte, error) {
|
func prefix(t *template.Template, d *copyrightData, top, mid, bot string) ([]byte, error) {
|
||||||
t := licenseTemplate[l]
|
|
||||||
if t == nil {
|
|
||||||
return nil, fmt.Errorf("unknown license: %s", l)
|
|
||||||
}
|
|
||||||
|
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
if err := t.Execute(&buf, d); err != nil {
|
if err := t.Execute(&buf, d); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
Reference in New Issue
Block a user