Skip to content

Commit 6ef2a00

Browse files
committed
Add recursive search for .git directory [patch]
1 parent 20d746e commit 6ef2a00

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

src/main/java/pt/com/hugodias/gradle/gitversioner/VersionerPlugin.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class VersionerPlugin implements Plugin<Project> {
1717

1818
@Override
1919
public void apply(Project project) {
20-
File gitFolder = new File(project.getRootDir() + "/.git");
20+
File gitFolder = findGitFolder(project.getRootDir());
2121
Versioner versioner = Versioner.builder().gitFolder(gitFolder).build();
2222
VersionerExtension extension =
2323
project.getExtensions().create("versioner", VersionerExtension.class, project, versioner);
@@ -50,4 +50,12 @@ public void apply(Project project) {
5050
tagVersionTask.get().getVersion().set(innerProject.getVersion().toString());
5151
});
5252
}
53+
54+
File findGitFolder(File folder) {
55+
if(folder == null) {
56+
throw new IllegalStateException("No .git directory found in path tree");
57+
}
58+
File gitFolder = new File(folder, ".git");
59+
return gitFolder.exists() ? gitFolder : findGitFolder(folder.getParentFile());
60+
}
5361
}

src/test/java/pt/com/hugodias/gradle/gitversioner/VersionerPluginTest.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
/* (C) 2022 Hugo Dias */
22
package pt.com.hugodias.gradle.gitversioner;
33

4-
import static org.junit.jupiter.api.Assertions.assertNotNull;
5-
import static org.junit.jupiter.api.Assertions.assertTrue;
6-
74
import org.gradle.api.Project;
85
import org.gradle.testfixtures.ProjectBuilder;
96
import org.junit.jupiter.api.Test;
107

8+
import java.io.File;
9+
10+
import static org.junit.jupiter.api.Assertions.*;
11+
1112
class VersionerPluginTest {
1213

1314
@Test
@@ -20,4 +21,24 @@ void greetingTest() {
2021
assertNotNull(project.getTasks().getByName("printVersion"));
2122
assertNotNull(project.getTasks().getByName("tagVersion"));
2223
}
24+
25+
@Test
26+
void testFindGitFolderInCurrentDir() {
27+
Project project = ProjectBuilder.builder().build();
28+
File gitDir = new File(project.getRootDir() + "/.git");
29+
assertTrue(gitDir.mkdirs());
30+
31+
assertEquals(gitDir, new VersionerPlugin().findGitFolder(project.getRootDir()));
32+
}
33+
34+
@Test
35+
void testFindGitFolderInParentDir() {
36+
Project project = ProjectBuilder.builder().build();
37+
File gitDir = new File(project.getRootDir() + "/.git");
38+
File testRootDir = new File(project.getRootDir() + "/sub1/sub2");
39+
assertTrue(gitDir.mkdirs());
40+
assertTrue(testRootDir.mkdirs());
41+
42+
assertEquals(gitDir, new VersionerPlugin().findGitFolder(testRootDir));
43+
}
2344
}

0 commit comments

Comments
 (0)