forked from pragmukko/pragmukko
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlicenseAppender.scala
72 lines (57 loc) · 1.92 KB
/
licenseAppender.scala
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
/*
* Copyright 2015-2016 Pragmukko Project [http://github.org/pragmukko]
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* [http://www.apache.org/licenses/LICENSE-2.0]
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
import java.io.{PrintWriter, File}
import scala.io.Source
type MyCloseable = {def close():Unit}
def readLicense(file:File) = {
Source.fromFile(file).getLines().takeWhile(l => l.startsWith("/") || l.startsWith("*")).toList
}
implicit def toFile(name:String) : File = new File(name)
def arm[T, A <: MyCloseable](cls:A)(fnc: A => T) = {
try {
fnc(cls)
} finally {
cls.close()
}
}
def prependLicence(file:File, license:List[String]) : Unit = {
print(file.getPath + "....")
val content = arm(Source.fromFile(file)) { s => s.getLines().toList }
if (content.take(license.length) == license) {
print("skip"); println()
return
}
arm(new PrintWriter(file)) {
writer =>
(license ++ content).foreach(writer.println(_))
print("ok"); println()
}
}
def fileTypes(f:File) =
f.getName.endsWith(".scala") ||
// f.getName.endsWith(".js") ||
f.getName.endsWith(".sbt")
val licenseLines = readLicense("licenseAppender.scala")
if (licenseLines.length == 0) {
println("Missing license")
System.exit(0)
}
println(licenseLines.mkString(System.lineSeparator()))
def overTree(dir:File) : Unit = {
val files = dir.listFiles().toList
files.filter(f => f.isFile && fileTypes(f)).foreach(prependLicence(_, licenseLines))
files.filter(f => f.isDirectory).foreach(overTree(_))
}
overTree(".")