@Signature public Memory diff(ArrayMemory settings) throws GitAPIException { DiffCommand command = getWrappedObject().diff(); if (settings != null) { command.setCached(settings.valueOfIndex("cached").toBoolean()); Memory contextLines = settings.valueOfIndex("contextLines"); if (contextLines.isNotNull()) { command.setContextLines(contextLines.toInteger()); } Memory destPrefix = settings.valueOfIndex("destPrefix"); if (destPrefix.isNotNull()) { command.setDestinationPrefix(destPrefix.toString()); } Memory sourcePrefix = settings.valueOfIndex("sourcePrefix"); if (sourcePrefix.isNotNull()) { command.setSourcePrefix(sourcePrefix.toString()); } command.setShowNameAndStatusOnly(settings.valueOfIndex("showNameAndStatusOnly").toBoolean()); Memory pathFilter = settings.valueOfIndex("pathFilter"); if (pathFilter.isNotNull()) { command.setPathFilter(PathFilter.create(pathFilter.toString())); } } List<DiffEntry> call = command.call(); return GitUtils.valueOfDiffEntries(call); }
.setNewTree(newTreeIter) .setOldTree(oldTreeIter) .setShowNameAndStatusOnly(true) .call();
@CheckForNull @Override public Set<Path> branchChangedFiles(String targetBranchName, Path rootBaseDir) { try (Repository repo = buildRepo(rootBaseDir)) { Ref targetRef = resolveTargetRef(targetBranchName, repo); if (targetRef == null) { return null; } try (Git git = newGit(repo)) { return git.diff().setShowNameAndStatusOnly(true) .setOldTree(prepareTreeParser(repo, targetRef)) .setNewTree(prepareNewTree(repo)) .call().stream() .filter(diffEntry -> diffEntry.getChangeType() == DiffEntry.ChangeType.ADD || diffEntry.getChangeType() == DiffEntry.ChangeType.MODIFY) .map(diffEntry -> repo.getWorkTree().toPath().resolve(diffEntry.getNewPath())) .collect(Collectors.toSet()); } } catch (IOException | GitAPIException e) { LOG.warn(e.getMessage(), e); } return null; }
public static List<DiffEntry> getDiff( final Repository repo, final ObjectId oldRef, final ObjectId newRef ) { if ( oldRef == null || newRef == null || repo == null ) { return emptyList(); } try { ObjectReader reader = repo.newObjectReader(); CanonicalTreeParser oldTreeIter = new CanonicalTreeParser(); oldTreeIter.reset( reader, oldRef ); CanonicalTreeParser newTreeIter = new CanonicalTreeParser(); newTreeIter.reset( reader, newRef ); return new Git( repo ).diff().setNewTree( newTreeIter ).setOldTree( oldTreeIter ).setShowNameAndStatusOnly( true ).call(); } catch ( final Exception ex ) { throw new RuntimeException( ex ); } }
protected static List<String> getPathsWithDiff(Repository repository, ObjectId previousCommit, ObjectId currentCommit) throws GitAPIException, IOException { Git git = Git.wrap(repository); try (ObjectReader reader = repository.newObjectReader()) { final RevWalk walk = new RevWalk(repository); final RevCommit prevRevCommit = walk.parseCommit(previousCommit); final ObjectId prevTreeId = prevRevCommit.getTree().getId(); final CanonicalTreeParser previousVersionTreeIter = new CanonicalTreeParser(null, reader, prevTreeId); final RevCommit currRevCommit = walk.parseCommit(currentCommit); final ObjectId currTreeId = currRevCommit.getTree().getId(); final CanonicalTreeParser currVersionTreeIter = new CanonicalTreeParser(null, reader, currTreeId); logger.info("Trying git diff {} with {}", prevRevCommit.toString(), currRevCommit.toString()) ; final List<DiffEntry> diff = git.diff() .setNewTree(currVersionTreeIter) .setOldTree(previousVersionTreeIter) .setShowNameAndStatusOnly(true) .call(); return diff.stream() /* Would be ideal if we could do this, but rename modifications could also include changes .filter(diffe -> diffe.getChangeType().equals(DiffEntry.ChangeType.MODIFY)) */ .map(x -> "/" + x.getNewPath()) .peek(diffe -> logger.debug("Diff {}", diffe)) .collect(Collectors.toList()); } catch (IncorrectObjectTypeException e) { //TODO What does this actually mean? -ffarrell 2017-09-11 throw e; } }
.setNewTree(newTreeIter) .setOldTree(oldTreeIter) .setShowNameAndStatusOnly(true) .call(); if (detectRenames) {
@Override public List<DiffEntry> diff(Git git, RevCommit commit1, RevCommit commit2, boolean showNameAndStatusOnly) throws GitAPIException, IOException { ObjectReader reader = git.getRepository().newObjectReader(); CanonicalTreeParser ctp1 = new CanonicalTreeParser(); CanonicalTreeParser ctp2 = new CanonicalTreeParser(); if (commit1.getTree() == null) { commit1 = new RevWalk(git.getRepository()).parseCommit(commit1); } if (commit2.getTree() == null) { commit2 = new RevWalk(git.getRepository()).parseCommit(commit2); } ctp1.reset(reader, commit1.getTree()); ctp2.reset(reader, commit2.getTree()); return git.diff() .setShowNameAndStatusOnly(showNameAndStatusOnly) .setOldTree(ctp1) .setNewTree(ctp2) .call(); }
@Override public List<DiffEntry> diff(Git git, RevCommit commit1, RevCommit commit2, boolean showNameAndStatusOnly) throws GitAPIException, IOException { ObjectReader reader = git.getRepository().newObjectReader(); CanonicalTreeParser ctp1 = new CanonicalTreeParser(); CanonicalTreeParser ctp2 = new CanonicalTreeParser(); if (commit1.getTree() == null) { commit1 = new RevWalk(git.getRepository()).parseCommit(commit1); } if (commit2.getTree() == null) { commit2 = new RevWalk(git.getRepository()).parseCommit(commit2); } ctp1.reset(reader, commit1.getTree()); ctp2.reset(reader, commit2.getTree()); return git.diff() .setShowNameAndStatusOnly(showNameAndStatusOnly) .setOldTree(ctp1) .setNewTree(ctp2) .call(); }
if (path != null) dc.setPathFilter(PathFilter.create(path)); dc.setShowNameAndStatusOnly(true); for (DiffEntry diff : dc.call()) { if (diff.getChangeType() == ChangeType.ADD || diff.getChangeType() == ChangeType.COPY) {
.setNewTree(newTreeIter) .setOldTree(oldTreeIter) .setShowNameAndStatusOnly(true) .call();