From 567db3014bb8a8610913bd02af9168a23980443b Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 27 Sep 2020 15:08:52 +0300 Subject: [PATCH] Replace DiffCommand with IndexDiff DiffCommand suffered from not taking smudge/clean filters into account --- .../spotless/maven/AbstractSpotlessMojo.java | 3 -- .../spotless/maven/GitRatchetMaven.java | 33 ++++++++----------- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/AbstractSpotlessMojo.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/AbstractSpotlessMojo.java index 9e6f5ca9cf..ef265b1126 100644 --- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/AbstractSpotlessMojo.java +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/AbstractSpotlessMojo.java @@ -45,7 +45,6 @@ import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.repository.RemoteRepository; -import org.eclipse.jgit.api.errors.GitAPIException; import com.diffplug.spotless.Formatter; import com.diffplug.spotless.LineEnding; @@ -190,8 +189,6 @@ private List collectFilesFromGit(FormatterFactory formatterFactory, String .instance().getDirtyFiles(baseDir, ratchetFrom); } catch (IOException e) { throw new MojoExecutionException("Unable to scan file tree rooted at " + baseDir, e); - } catch (GitAPIException e) { - throw new MojoExecutionException("Error getting diff against 'ratchetFrom' setting '" + ratchetFrom + "'", e); } List result = new ArrayList<>(); diff --git a/plugin-maven/src/main/java/com/diffplug/spotless/maven/GitRatchetMaven.java b/plugin-maven/src/main/java/com/diffplug/spotless/maven/GitRatchetMaven.java index db6330087f..03b9474deb 100644 --- a/plugin-maven/src/main/java/com/diffplug/spotless/maven/GitRatchetMaven.java +++ b/plugin-maven/src/main/java/com/diffplug/spotless/maven/GitRatchetMaven.java @@ -19,16 +19,14 @@ import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.List; +import java.util.Collection; import java.util.stream.Collectors; +import java.util.stream.Stream; -import org.eclipse.jgit.api.Git; -import org.eclipse.jgit.api.errors.GitAPIException; -import org.eclipse.jgit.diff.DiffEntry; +import org.eclipse.jgit.lib.IndexDiff; import org.eclipse.jgit.lib.ObjectId; -import org.eclipse.jgit.lib.ObjectReader; import org.eclipse.jgit.lib.Repository; -import org.eclipse.jgit.treewalk.CanonicalTreeParser; +import org.eclipse.jgit.treewalk.FileTreeIterator; import com.diffplug.spotless.extra.GitRatchet; @@ -58,26 +56,23 @@ static GitRatchetMaven instance() { return instance; } - Iterable getDirtyFiles(File baseDir, String ratchetFrom) - throws IOException, GitAPIException { + Iterable getDirtyFiles(File baseDir, String ratchetFrom) throws IOException { Repository repository = repositoryFor(baseDir); ObjectId sha = rootTreeShaOf(baseDir, ratchetFrom); - ObjectReader oldReader = repository.newObjectReader(); - CanonicalTreeParser oldTree = new CanonicalTreeParser(); - oldTree.reset(oldReader, sha); - - Git git = new Git(repository); - List diffs = git.diff() - .setShowNameAndStatusOnly(true) - .setOldTree(oldTree) - .call(); + IndexDiff indexDiff = new IndexDiff(repository, sha, new FileTreeIterator(repository)); + indexDiff.diff(); String workTreePath = repository.getWorkTree().getPath(); Path baseDirPath = Paths.get(baseDir.getPath()); - return diffs.stream() - .map(DiffEntry::getNewPath) + return Stream.of( + indexDiff.getAdded(), + indexDiff.getChanged(), + indexDiff.getConflicting(), + indexDiff.getModified(), + indexDiff.getUntracked()) + .flatMap(Collection::parallelStream) .map(path -> Paths.get(workTreePath, path)) .map(path -> baseDirPath.relativize(path).toString()) .collect(Collectors.toList());