Skip to content

Commit eb71dd7

Browse files
Add Git object information marker to all source files (#1081)
* Add Git object information marker to all source files * Update to capture file mode from Git * Switch to storing raw int for fileMode --------- Co-authored-by: Tim te Beek <tim@moderne.io>
1 parent 2de54ae commit eb71dd7

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

src/main/java/org/openrewrite/maven/MavenMojoProjectParser.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.jspecify.annotations.Nullable;
3737
import org.openrewrite.ExecutionContext;
3838
import org.openrewrite.ParseExceptionResult;
39+
import org.openrewrite.PathUtils;
3940
import org.openrewrite.SourceFile;
4041
import org.openrewrite.internal.StringUtils;
4142
import org.openrewrite.java.JavaParser;
@@ -45,9 +46,13 @@
4546
import org.openrewrite.java.marker.JavaVersion;
4647
import org.openrewrite.jgit.api.Git;
4748
import org.openrewrite.jgit.lib.FileMode;
49+
import org.openrewrite.jgit.lib.ObjectId;
50+
import org.openrewrite.jgit.revwalk.RevCommit;
51+
import org.openrewrite.jgit.revwalk.RevWalk;
4852
import org.openrewrite.jgit.treewalk.FileTreeIterator;
4953
import org.openrewrite.jgit.treewalk.TreeWalk;
5054
import org.openrewrite.jgit.treewalk.WorkingTreeIterator;
55+
import org.openrewrite.jgit.treewalk.filter.PathFilter;
5156
import org.openrewrite.jgit.treewalk.filter.PathFilterGroup;
5257
import org.openrewrite.kotlin.KotlinParser;
5358
import org.openrewrite.marker.*;
@@ -226,6 +231,7 @@ public Stream<SourceFile> listSourceFiles(MavenProject mavenProject, Xml.@Nullab
226231
sourceFiles = Stream.concat(sourceFiles, nonProjectResources);
227232

228233
return sourceFiles.map(addProvenance(projectProvenance))
234+
.map(addGitTreeEntryInformation())
229235
.map(this::logParseErrors);
230236
}
231237

@@ -830,6 +836,36 @@ private <T extends SourceFile> UnaryOperator<T> addProvenance(List<Marker> prove
830836
};
831837
}
832838

839+
private <T extends SourceFile> UnaryOperator<T> addGitTreeEntryInformation() {
840+
return s -> {
841+
if (repository == null) {
842+
return s;
843+
}
844+
845+
try {
846+
ObjectId head = repository.resolve("HEAD");
847+
if (head == null) {
848+
return s;
849+
}
850+
851+
try (RevWalk revWalk = new RevWalk(repository);
852+
TreeWalk treeWalk = new TreeWalk(repository)) {
853+
RevCommit commit = revWalk.parseCommit(head);
854+
treeWalk.addTree(commit.getTree());
855+
treeWalk.setRecursive(true);
856+
treeWalk.setFilter(PathFilter.create(PathUtils.separatorsToUnix(s.getSourcePath().toString())));
857+
858+
if (treeWalk.next()) {
859+
return s.withMarkers(s.getMarkers().add(new GitTreeEntry(randomId(), treeWalk.getObjectId(0).name(), treeWalk.getRawMode(0))));
860+
}
861+
return s;
862+
}
863+
} catch (IOException e) {
864+
throw new UncheckedIOException(e);
865+
}
866+
};
867+
}
868+
833869
private static Collection<Path> listJavaSources(MavenProject mavenProject, List<String> compileSourceRoots) throws MojoExecutionException {
834870
Set<Path> javaSources = new LinkedHashSet<>();
835871
for (String compileSourceRoot : compileSourceRoots) {

0 commit comments

Comments
 (0)