@@ -20,6 +20,7 @@ import (
20
20
"bytes"
21
21
"flag"
22
22
"fmt"
23
+ "html/template"
23
24
"io/ioutil"
24
25
"log"
25
26
"os"
@@ -44,9 +45,10 @@ Flags:
44
45
`
45
46
46
47
var (
47
- holder = flag .String ("c" , "Google LLC" , "copyright holder" )
48
- license = flag .String ("l" , "apache" , "license type: apache, bsd, mit" )
49
- year = flag .Int ("y" , time .Now ().Year (), "year" )
48
+ holder = flag .String ("c" , "Google LLC" , "copyright holder" )
49
+ license = flag .String ("l" , "apache" , "license type: apache, bsd, mit" )
50
+ licensef = flag .String ("f" , "" , "license file" )
51
+ year = flag .Int ("y" , time .Now ().Year (), "year" )
50
52
)
51
53
52
54
func main () {
@@ -65,6 +67,26 @@ func main() {
65
67
Holder : * holder ,
66
68
}
67
69
70
+ var t * template.Template
71
+ if * licensef != "" {
72
+ d , err := ioutil .ReadFile (* licensef )
73
+ if err != nil {
74
+ log .Printf ("template error: %s" , err )
75
+ os .Exit (1 )
76
+ }
77
+ t , err = template .New ("" ).Parse (string (d ))
78
+ if err != nil {
79
+ log .Printf ("template error: %s" , err )
80
+ os .Exit (1 )
81
+ }
82
+ } else {
83
+ t = licenseTemplate [* license ]
84
+ if t == nil {
85
+ log .Printf ("unknown license: %s" , * license )
86
+ os .Exit (1 )
87
+ }
88
+ }
89
+
68
90
// process at most 1000 files in parallel
69
91
ch := make (chan * file , 1000 )
70
92
done := make (chan struct {})
@@ -73,7 +95,7 @@ func main() {
73
95
for f := range ch {
74
96
wg .Add (1 )
75
97
go func (f * file ) {
76
- err := addLicense (f .path , f .mode , * license , data )
98
+ err := addLicense (f .path , f .mode , t , data )
77
99
if err != nil {
78
100
log .Printf ("%s: %v" , f .path , err )
79
101
}
@@ -110,30 +132,30 @@ func walk(ch chan<- *file, start string) {
110
132
})
111
133
}
112
134
113
- func addLicense (path string , fmode os.FileMode , typ string , data * copyrightData ) error {
135
+ func addLicense (path string , fmode os.FileMode , tmpl * template. Template , data * copyrightData ) error {
114
136
var lic []byte
115
137
var err error
116
138
switch filepath .Ext (path ) {
117
139
default :
118
140
return nil
119
141
case ".c" , ".h" :
120
- lic , err = prefix (typ , data , "/*" , " * " , " */" )
142
+ lic , err = prefix (tmpl , data , "/*" , " * " , " */" )
121
143
case ".js" , ".jsx" , ".tsx" , ".css" , ".tf" :
122
- lic , err = prefix (typ , data , "/**" , " * " , " */" )
144
+ lic , err = prefix (tmpl , data , "/**" , " * " , " */" )
123
145
case ".cc" , ".cpp" , ".cs" , ".go" , ".hh" , ".hpp" , ".java" , ".m" , ".mm" , ".proto" , ".rs" , ".scala" , ".swift" , ".dart" :
124
- lic , err = prefix (typ , data , "" , "// " , "" )
146
+ lic , err = prefix (tmpl , data , "" , "// " , "" )
125
147
case ".py" , ".sh" , ".yaml" , ".yml" :
126
- lic , err = prefix (typ , data , "" , "# " , "" )
148
+ lic , err = prefix (tmpl , data , "" , "# " , "" )
127
149
case ".el" , ".lisp" :
128
- lic , err = prefix (typ , data , "" , ";; " , "" )
150
+ lic , err = prefix (tmpl , data , "" , ";; " , "" )
129
151
case ".erl" :
130
- lic , err = prefix (typ , data , "" , "% " , "" )
152
+ lic , err = prefix (tmpl , data , "" , "% " , "" )
131
153
case ".hs" , ".sql" :
132
- lic , err = prefix (typ , data , "" , "-- " , "" )
154
+ lic , err = prefix (tmpl , data , "" , "-- " , "" )
133
155
case ".html" , ".xml" :
134
- lic , err = prefix (typ , data , "<!--" , " " , "-->" )
156
+ lic , err = prefix (tmpl , data , "<!--" , " " , "-->" )
135
157
case ".php" :
136
- lic , err = prefix (typ , data , "<?php" , "// " , "?>" )
158
+ lic , err = prefix (tmpl , data , "<?php" , "// " , "?>" )
137
159
}
138
160
if err != nil || lic == nil {
139
161
return err
0 commit comments