私は最近若いチームの開発実践の向上を手助けし始め、すべてのコミットの前にチェックスタイルを実行するようにしました。残念ながら、それらのコードはエラーで散らばっており、それを実装するスケーラブルな方法は、たびにファイルの小さな部分に対してcheckstyleを実行することだけです。VCSが変更されたファイルに対してのみcheckstyleを実行する方法はありますか?
戦略的には、VCSで修正されたファイルだけにチェックスタイルを実行したかったのです。これを実現するためにグラデーションスクリプトを書いたが、うまくいかないようだ。誰にでもこれを実現させるためのヒントがありますか?
apply plugin: 'checkstyle'
def getChangedFiles = { ->
try {
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'git', 'diff', '--name-only'
standardOutput = stdout
}
return stdout.toString().trim().split("\n")
}
catch (ignored) {
return null;
}
}
task checkstyle(type: Checkstyle) {
configFile file("${project.rootDir}/quality/checkstyle/uncommon-checkstyle.xml")
configProperties = [
'checkstyle.cache.file': rootProject.file('build/checkstyle.cache'),
'checkstyleSuppressionsPath': file("${project.rootDir}/quality/checkstyle/suppressions.xml").absolutePath
]
source 'src'
String[] split = getChangedFiles()
for (int i=0; i<split.length; i++){
include split[i]
println split[i]
}
exclude '**/build/**' // Exclude everything inside build folders.
exclude '**/test/**' // Exclude tests
exclude '**/androidTest/**' // Exclude android test files.
ignoreFailures = false // Don't allow the build to continue if there are warnings.
classpath = files()
}
checkstyle {
toolVersion '6.19' // set Checkstyle version here
}
印刷コマンドは、ファイルの右のセットがgetChangedFiles(によって返される表示されます)と私が含まれているファイルが同様に正確であることを確認するためにチェックしましたが、Checkstyleは、それ自体がその上で実行していないようです。