Could not write hooks if .git/hooks directory does not exists
When the folder .git/hooks does not exist, then the plugin will fail to install the git hook. By default the directory is non-existent
Actual behavior: The plugin fails to write the git hook into the directory. Expected behavior: The plugin should resolve it automatically and create the directory if it doesn't exist.
pom.xml
<plugin>
<groupId>com.rudikershaw.gitbuildhook</groupId>
<artifactId>git-build-hook-maven-plugin</artifactId>
<version>3.5.0</version>
<configuration>
<installHooks>
<pre-commit>scripts/pre-commit.sh</pre-commit>
</installHooks>
</configuration>
<executions>
<execution>
<id>install-git-hooks</id>
<phase>validate</phase>
<goals>
<goal>install</goal>
</goals>
</execution>
</executions>
</plugin>
Logs output in CI/CD
$ ./mvnw verify -s ci_settings.xml --no-transfer-progress
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.acme.example:backend >-----------------------
[INFO] Building backend 0.1.0-SNAPSHOT
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- git-build-hook:3.5.0:install (install-git-hooks) @ backend ---
[WARNING] Could not move file into .git/hooks directory
java.nio.file.NoSuchFileException: /builds/acme/example/backend/.git/hooks/pre-commit
at sun.nio.fs.UnixException.translateToIOException (UnixException.java:92)
at sun.nio.fs.UnixException.rethrowAsIOException (UnixException.java:106)
at sun.nio.fs.UnixException.rethrowAsIOException (UnixException.java:111)
at sun.nio.fs.UnixFileSystem.copyFile (UnixFileSystem.java:668)
at sun.nio.fs.UnixFileSystem.copy (UnixFileSystem.java:1060)
at sun.nio.fs.UnixFileSystemProvider.copy (UnixFileSystemProvider.java:300)
at java.nio.file.Files.copy (Files.java:1304)
at com.rudikershaw.gitbuildhook.InstallMojo.copyFromFile (InstallMojo.java:91)
at com.rudikershaw.gitbuildhook.InstallMojo.installGitHook (InstallMojo.java:76)
at com.rudikershaw.gitbuildhook.InstallMojo.execute (InstallMojo.java:58)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:103)
at java.lang.reflect.Method.invoke (Method.java:580)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
Logs output on Windows
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.acme.example:backend >-----------------------
[INFO] Building backend 0.1.0-SNAPSHOT
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- git-build-hook:3.5.0:install (install-git-hooks) @ backend ---
[WARNING] Could not move file into .git/hooks directory
java.nio.file.NoSuchFileException: scripts\pre-commit.sh -> C:\Users\foouser\acme\example\backend\.git\hooks\pre-commit
at sun.nio.fs.WindowsException.translateToIOException (WindowsException.java:85)
at sun.nio.fs.WindowsException.rethrowAsIOException (WindowsException.java:103)
at sun.nio.fs.WindowsFileCopy.copy (WindowsFileCopy.java:220)
at sun.nio.fs.WindowsFileSystemProvider.copy (WindowsFileSystemProvider.java:282)
at java.nio.file.Files.copy (Files.java:1304)
at com.rudikershaw.gitbuildhook.InstallMojo.copyFromFile (InstallMojo.java:91)
at com.rudikershaw.gitbuildhook.InstallMojo.installGitHook (InstallMojo.java:76)
at com.rudikershaw.gitbuildhook.InstallMojo.execute (InstallMojo.java:58)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:103)
at java.lang.reflect.Method.invoke (Method.java:580)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
at org.codehaus.classworlds.Launcher.main (Launcher.java:41)
Hi there, thanks for your contribution.
I assume then, this is an issue for when SourceTree creates a git repository? I would be very surprised if git itself would create a repository without the hooks directory.
Thanks also for the pull request, I'll review that shortly.
When running git clone with --bare option, the hooks directory is not created. This seems to be the default behavior in CI pipelines, namely in GitLab
Didn't mean to close this issue. I'll re-open it and close it once 3.5.1 has been released.
Looking forward for this fix. Any ETA for v3.5.1?
I have released a 3.6.0 which contains this change. Apologies to all for the delay. I will close this issue.