diff --git a/src/main/java/pt/com/hugodias/gradle/gitversioner/VersionerPlugin.java b/src/main/java/pt/com/hugodias/gradle/gitversioner/VersionerPlugin.java index 43f7bb6..12ed773 100644 --- a/src/main/java/pt/com/hugodias/gradle/gitversioner/VersionerPlugin.java +++ b/src/main/java/pt/com/hugodias/gradle/gitversioner/VersionerPlugin.java @@ -17,7 +17,7 @@ public class VersionerPlugin implements Plugin { @Override public void apply(Project project) { - File gitFolder = new File(project.getRootDir() + "/.git"); + File gitFolder = findGitFolder(project.getRootDir()); Versioner versioner = Versioner.builder().gitFolder(gitFolder).build(); VersionerExtension extension = project.getExtensions().create("versioner", VersionerExtension.class, project, versioner); @@ -50,4 +50,12 @@ public void apply(Project project) { tagVersionTask.get().getVersion().set(innerProject.getVersion().toString()); }); } + + File findGitFolder(File folder) { + if(folder == null) { + throw new IllegalStateException("No .git directory found in path tree"); + } + File gitFolder = new File(folder, ".git"); + return gitFolder.exists() ? gitFolder : findGitFolder(folder.getParentFile()); + } } diff --git a/src/test/java/pt/com/hugodias/gradle/gitversioner/VersionerPluginTest.java b/src/test/java/pt/com/hugodias/gradle/gitversioner/VersionerPluginTest.java index 7f9712e..a715eb0 100644 --- a/src/test/java/pt/com/hugodias/gradle/gitversioner/VersionerPluginTest.java +++ b/src/test/java/pt/com/hugodias/gradle/gitversioner/VersionerPluginTest.java @@ -1,13 +1,14 @@ /* (C) 2022 Hugo Dias */ package pt.com.hugodias.gradle.gitversioner; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - import org.gradle.api.Project; import org.gradle.testfixtures.ProjectBuilder; import org.junit.jupiter.api.Test; +import java.io.File; + +import static org.junit.jupiter.api.Assertions.*; + class VersionerPluginTest { @Test @@ -20,4 +21,24 @@ void greetingTest() { assertNotNull(project.getTasks().getByName("printVersion")); assertNotNull(project.getTasks().getByName("tagVersion")); } + + @Test + void testFindGitFolderInCurrentDir() { + Project project = ProjectBuilder.builder().build(); + File gitDir = new File(project.getRootDir() + "/.git"); + assertTrue(gitDir.mkdirs()); + + assertEquals(gitDir, new VersionerPlugin().findGitFolder(project.getRootDir())); + } + + @Test + void testFindGitFolderInParentDir() { + Project project = ProjectBuilder.builder().build(); + File gitDir = new File(project.getRootDir() + "/.git"); + File testRootDir = new File(project.getRootDir() + "/sub1/sub2"); + assertTrue(gitDir.mkdirs()); + assertTrue(testRootDir.mkdirs()); + + assertEquals(gitDir, new VersionerPlugin().findGitFolder(testRootDir)); + } }