mercurial precommit无限循环

时间:2014-12-17 12:14:40

标签: loops gradle mercurial infinite

好的就是问题,我正在使用Gradle在Java中开发一个应用程序 我有一个Gradle任务,如果它不存在,则在每个文件的顶部添加许可证。

我想添加一个预先挂起的钩子,这样当我提交文件时,Gradle任务会运行并根据需要在文件之上更改许可证。请记住,Gradle licenseFormat可能不会同时更改任何内容或超过10个文件,因此我无法知道哪些文件已更改以将其添加为手动提交。

我试过这个钩子:

[hooks]
pre-commit.licenseFormat=C:/Users/pc/Dropbox/{REPOSITORIES}/{PETULANT}/format.bat

它只是调用一个运行Gradle命令的批处理文件,但是,正如我所怀疑的那样,因为某些文件被更改,而这些文件不在当前提交中,所以提交被卡住了,它似乎陷入无限循环调用批处理文件一次又一次,每次都会触发命令 在下一次运行命令时,不应该更改任何内容,但是当第一次运行更改的文件超过几个时,我认为提交会激活批处理文件两次以上。

所以问题是,在第一次运行批处理文件并将更改的文件添加到当前或新提交后,如何停止提交挂钩?

感谢。

1 个答案:

答案 0 :(得分:0)

批处理文件只是命令:



gradlew licenseFormat




正如我所说,它运行一个gradle任务,它将在所需文件的基础上添加许可证注释,换句话说,它首先检查文件的标题并将其与应该存在的那个进行比较,如果它们是同样的,那么文件将不会被触及但如果它们不相同,它会删除标题并将许可文本作为注释添加到头顶,如果你想要更多的部门看看实际任务是这样的:



buildscript{
	repositories{
		mavenCentral()
		jcenter()
		maven { url = "http://files.minecraftforge.net/maven" }
		maven { url = "https://oss.sonatype.org/content/repositories/snapshots" }
	}
	dependencies{
		classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
		classpath 'org.ajoberstar:gradle-git:0.10.1'
		classpath 'nl.javadude.gradle.plugins:license-gradle-plugin:0.11.0'
	}
}

apply plugin: 'license'

license{
	ext.name = project.name
	ext.organization = project.organization
	ext.url = project.url
	ext.year = project.inceptionYear
	exclude '**/*.info'
	exclude '**/*.json'
	exclude '**/*.ma'
	exclude '**/*.mb'
	exclude '**/*.png'
	header new File(projectDir, 'HEADER.txt')
	sourceSets = project.sourceSets
	ignoreFailures = false
	strictCheck = true
	mapping { java = 'SLASHSTAR_STYLE'}
}