gtramontina/ghooks.gradle

Hooks are installed during project configuration, not when installGitHooks is executed

Opened this issue · 0 comments

Hi,

If you use the plugin, but disable the installGitHooks task, the hooks still get executed, for example the following build.gradle would still (try to) install the git hooks:

plugins {
    id "com.gtramontina.ghooks.gradle" version "1.1.0"
}

installGitHooks.onlyIf { false }

This seems to be mostly related to https://github.com/gtramontina/ghooks.gradle/blob/master/src/main/kotlin/com/gtramontina/ghooks/GHooks.kt#L38 not having any doLast or similar action blocks.

It also seems like the tests (e.g. https://github.com/gtramontina/ghooks.gradle/blob/master/src/test/kotlin/com/gtramontina/ghooks/Standard%20Scenarios.kt#L40) don't actually trigger a Gradle build, but just load the project. Without being able to fully test it, this should probably look something like:

       project.pluginManager.apply(GHooks::class.java)
       val result = GradleRunner.create()
            .withArguments("installGitHooks")
            .withProjectDir(project.rootDir)
            .withPluginClasspath()
            .build()

        result.output shouldMatch ".*something went wrong.*".toRegexGI()
        result.output shouldMatch ".*that this is a git repository.*".toRegexGI()

This also currently means that the build succeeds if creating the symlink fails - since the installGitHooks tasks does nothing, it can't fail (and Gradle seems to ignore exceptions that happened during task configuration).

For example, running gradle assemble on this project shows no installGitHooks task is ever called:

11:37:11: Executing task 'assemble'...

Starting Gradle Daemon...
Gradle Daemon started in 1 s 370 ms

Something went wrong while installing your Git hooks.
Please make sure you have `git` installed and that this is a Git repository.
Once these conditions are satisfied, this plugin will ensure the hooks get installed.

java.util.concurrent.CompletionException: java.io.FileNotFoundException: File does not exist: ...\IdeaProjects\ghooks.gradle\.git\hooks
	at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:314)
	at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:319)
	at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:718)
	at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1705)
	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1692)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
Caused by: java.io.FileNotFoundException: File does not exist: ...\IdeaProjects\ghooks.gradle\.git\hooks
	at org.apache.commons.io.FileUtils.forceDelete(FileUtils.java:2396)
	at com.gtramontina.ghooks.GHooks.deleteIfExists(GHooks.kt:65)
	at com.gtramontina.ghooks.GHooks.symLinkTo(GHooks.kt:58)
	at com.gtramontina.ghooks.GHooks.access$symLinkTo(GHooks.kt:13)
	at com.gtramontina.ghooks.GHooks$apply$1$4.accept(GHooks.kt:51)
	at com.gtramontina.ghooks.GHooks$apply$1$4.accept(GHooks.kt:13)
	at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:714)
	... 8 more
> Task :compileKotlin UP-TO-DATE
> Task :compileJava NO-SOURCE
> Task :pluginDescriptors UP-TO-DATE
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE
> Task :inspectClassesForKotlinIC UP-TO-DATE
> Task :jar UP-TO-DATE
> Task :publishPluginJar UP-TO-DATE
> Task :javadoc NO-SOURCE
> Task :publishPluginJavaDocsJar UP-TO-DATE
> Task :assemble UP-TO-DATE

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.6.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 5s
7 actionable tasks: 7 up-to-date
11:37:19: Task execution finished 'assemble'.