From c78fdb75bb2003b39df5916a837a68cc21411534 Mon Sep 17 00:00:00 2001 From: Kevin Sapper Date: Tue, 2 Apr 2024 09:39:01 +0200 Subject: [PATCH] Skip execution if no git repository found instead of throwing an error This is necessary when running maven from the working directory of submodule of a multi-maven module project which otherwise fails. --- .../github/pepperkit/githooks/GitHooksManager.java | 13 ++++++++----- .../io/github/pepperkit/githooks/InitHooksMojo.java | 6 ++++++ .../pepperkit/githooks/InitHooksMojoTest.java | 10 ++++++++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/github/pepperkit/githooks/GitHooksManager.java b/src/main/java/io/github/pepperkit/githooks/GitHooksManager.java index e5286f8..2048e9a 100644 --- a/src/main/java/io/github/pepperkit/githooks/GitHooksManager.java +++ b/src/main/java/io/github/pepperkit/githooks/GitHooksManager.java @@ -90,17 +90,20 @@ void checkProvidedHookNamesCorrectness(Map hooks) { } } + /** + * Determines if current working directory is the root directory of a git repository. + * @return true if it is a git repository, else false + */ + public boolean isGitRepository() { + return Files.exists(GIT_PATH); + } + /** * Checks that git hooks directory exists, and creates it if it doesn't. * @throws IllegalStateException if git repository was not initialized * or there's an error on creating git hooks directory */ void checkGitHooksDirAndCreateIfMissing() { - if (!Files.exists(GIT_PATH)) { - throw new IllegalStateException("It seems that it's not a git repository. " + - "Plugin goals should be executed from the root of the project."); - } - if (!Files.exists(GIT_HOOKS_PATH)) { try { Files.createDirectories(GIT_HOOKS_PATH); diff --git a/src/main/java/io/github/pepperkit/githooks/InitHooksMojo.java b/src/main/java/io/github/pepperkit/githooks/InitHooksMojo.java index 4043913..263ca9d 100644 --- a/src/main/java/io/github/pepperkit/githooks/InitHooksMojo.java +++ b/src/main/java/io/github/pepperkit/githooks/InitHooksMojo.java @@ -43,6 +43,12 @@ public void setHooks(String hooks) { @Override public void execute() throws MojoExecutionException { + if (!gitHooksManager.isGitRepository()) { + getLog().info("No git repository found. " + + "Plugin goals will only be executed from the root of the project."); + return; + } + List existingHookFiles = gitHooksManager.getExistingHookFiles(); if (hooks == null) { existingHookFiles.forEach(File::delete); diff --git a/src/test/java/io/github/pepperkit/githooks/InitHooksMojoTest.java b/src/test/java/io/github/pepperkit/githooks/InitHooksMojoTest.java index fab79a0..896d685 100644 --- a/src/test/java/io/github/pepperkit/githooks/InitHooksMojoTest.java +++ b/src/test/java/io/github/pepperkit/githooks/InitHooksMojoTest.java @@ -6,9 +6,7 @@ */ package io.github.pepperkit.githooks; -import java.io.File; import java.io.IOException; -import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -32,6 +30,14 @@ void beforeEach() { gitHooksManagerMock = mock(GitHooksManager.class); initHooksMojo = new InitHooksMojo(); initHooksMojo.gitHooksManager = gitHooksManagerMock; + when(gitHooksManagerMock.isGitRepository()).thenReturn(true); + } + + @Test + void executesNothingIfNotAGitRepository() throws MojoExecutionException { + when(gitHooksManagerMock.isGitRepository()).thenReturn(false); + initHooksMojo.execute(); + verify(gitHooksManagerMock, times(0)).getExistingHookFiles(); } @Test