blob: 8699702e191a0615fb2ec0adcfce648fb0cd5625 [file]
/*
* Copyright 2004-2005 the original author or authors.
*
* 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.
*/
/**
* Gant script which generates stats for a Grails project.
*
* @author Glen Smith
*
*/
includeTargets << grailsScript("_GrailsSettings")
target ('default': "Generates basic stats for a Grails project") {
// maps file path to
def pathToInfo = [
new Expando(name: "Controllers", filetype: ".groovy", path: "controllers"),
new Expando(name: "Domain Classes", filetype: ".groovy", path: "domain"),
new Expando(name: "Jobs", filetype: ".groovy", path: "jobs"),
new Expando(name: "Services", filetype: ".groovy", path: "services"),
new Expando(name: "Tag Libraries", filetype: ".groovy", path: "taglib"),
new Expando(name: "Groovy Helpers", filetype: ".groovy", path: "src.groovy"),
new Expando(name: "Java Helpers", filetype: ".java", path: "src.java"),
new Expando(name: "Unit Tests", filetype: ".groovy", path: "test.unit"),
new Expando(name: "Integration Tests", filetype: ".groovy", path: "test.integration"),
]
new File(basedir).eachFileRecurse { file ->
def match = pathToInfo.find { expando ->
file.path =~ expando.path &&
file.path.endsWith(expando.filetype)
}
if (match && file.isFile() ) {
if (file.path.toLowerCase() =~ /web-inf/ || file.path.toLowerCase() =~ /plugins/) {
// println "Skipping $file.path in WEB-INF or plugins dir"
} else {
match.filecount = match.filecount ? match.filecount+1 : 1
// strip whitespace
def loc = file.readLines().findAll { line -> !(line ==~ /^\s*$/) }.size()
match.loc = match.loc ? match.loc + loc : loc
}
}
}
def totalFiles = 0
def totalLOC = 0
println '''
+----------------------+-------+-------+
| Name | Files | LOC |
+----------------------+-------+-------+'''
pathToInfo.each { info ->
if (info.filecount) {
println " | " +
info.name.padRight(20," ") + " | " +
info.filecount.toString().padLeft(5, " ") + " | " +
info.loc.toString().padLeft(5," ") + " | "
totalFiles += info.filecount
totalLOC += info.loc
}
}
println " +----------------------+-------+-------+"
println " | Totals | " + totalFiles.toString().padLeft(5, " ") + " | " + totalLOC.toString().padLeft(5, " ") + " | "
println " +----------------------+-------+-------+\n"
}