| /* |
| * 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" |
| |
| |
| } |