List of usage examples for org.eclipse.jgit.diff DiffFormatter toFileHeader
public FileHeader toFileHeader(DiffEntry ent) throws IOException, CorruptObjectException, MissingObjectException
This method does not use the OutputStream associated with this DiffFormatter instance.
From source file:com.GitAnalytics.CommitInfo.java
private CommitInfo(DiffFormatter df, RevWalk rw, RevCommit commit, List<String> tags) throws Exception { System.out.print("Processing Commit: " + I + "\r"); I++;// w w w. j a v a 2 s . c o m mCommit = commit; mTags = tags; mAuthor = mCommit.getAuthorIdent(); mLinesChanged = new int[3]; RevTree parent = null; try { parent = rw.parseCommit(commit.getParent(0).getId()).getTree(); } catch (Exception e) { } //int filesChanged = diffs.size(); mLinesChanged[0] = mLinesChanged[1] = mLinesChanged[2] = 0; for (DiffEntry diff : df.scan(parent, commit.getTree())) { for (Edit edit : df.toFileHeader(diff).toEditList()) { int del = edit.getEndA() - edit.getBeginA(); int add = edit.getEndB() - edit.getBeginB(); if (edit.getType() == Type.REPLACE) { mLinesChanged[1] += Math.abs(add - del); } mLinesChanged[2] += add; mLinesChanged[0] += del; } } }
From source file:com.github.checkstyle.regression.git.DiffParser.java
License:Open Source License
/** * Converts a {@link DiffEntry} to {@link GitChange} for the further use. * @param diffEntry the {@link DiffEntry} instance to be converted * @param formatter the diff formatter to provide the line changes information * @return the {@link GitChange} instance converted from the given {@link DiffEntry} * @throws IOException JGit library exception *//*from www .j a va2 s . c o m*/ private static GitChange convertDiffEntryToGitChange(DiffEntry diffEntry, DiffFormatter formatter) throws IOException { final List<Integer> addedLines = formatter.toFileHeader(diffEntry).toEditList().stream() .filter(edit -> edit.getBeginB() < edit.getEndB()) .flatMapToInt(edit -> Arrays.stream(new IntRange(edit.getBeginB(), edit.getEndB() - 1).toArray())) .boxed().collect(Collectors.toList()); final List<Integer> deletedLines = formatter.toFileHeader(diffEntry).toEditList().stream() .filter(edit -> edit.getBeginA() < edit.getEndA()) .flatMapToInt(edit -> Arrays.stream(new IntRange(edit.getBeginA(), edit.getEndA() - 1).toArray())) .boxed().collect(Collectors.toList()); return ImmutableGitChange.builder().path(diffEntry.getNewPath()).addAllAddedLines(addedLines) .addAllDeletedLines(deletedLines).build(); }
From source file:com.google.gerrit.server.patch.PatchListLoader.java
License:Apache License
private FileHeader toFileHeader(PatchListKey key, final DiffFormatter diffFormatter, final DiffEntry diffEntry) throws IOException { Future<FileHeader> result = diffExecutor.submit(new Callable<FileHeader>() { @Override/*from w w w. java 2 s.co m*/ public FileHeader call() throws IOException { return diffFormatter.toFileHeader(diffEntry); } }); try { return result.get(timeoutMillis, TimeUnit.MILLISECONDS); } catch (InterruptedException | TimeoutException e) { log.warn(timeoutMillis + " ms timeout reached for Diff loader" + " in project " + project + " on commit " + key.getNewId().name() + " on path " + diffEntry.getNewPath() + " comparing " + diffEntry.getOldId().name() + ".." + diffEntry.getNewId().name()); result.cancel(true); return toFileHeaderWithoutMyersDiff(diffFormatter, diffEntry); } catch (ExecutionException e) { // If there was an error computing the result, carry it // up to the caller so the cache knows this key is invalid. Throwables.propagateIfInstanceOf(e.getCause(), IOException.class); throw new IOException(e.getMessage(), e.getCause()); } }
From source file:com.google.gerrit.server.patch.PatchListLoader.java
License:Apache License
private FileHeader toFileHeaderWithoutMyersDiff(DiffFormatter diffFormatter, DiffEntry diffEntry) throws IOException { HistogramDiff histogramDiff = new HistogramDiff(); histogramDiff.setFallbackAlgorithm(null); diffFormatter.setDiffAlgorithm(histogramDiff); return diffFormatter.toFileHeader(diffEntry); }
From source file:org.gitistics.visitor.commit.TreeWalkVisitorStandard.java
License:Open Source License
private EditList handleEdits(DiffFormatter formatter, RevCommit commit, DiffEntry entry) { try {// ww w. j av a2s . c o m formatter.setContext(0); FileHeader h = formatter.toFileHeader(entry); return h.toEditList(); } catch (Exception e) { throw new RuntimeException(e); } }
From source file:org.oneandone.gitter.gitio.GitDirectory.java
License:Apache License
private int diffSize(String newCommit) throws IOException { int size = 0; try {//from w w w .j av a2s . co m ObjectReader reader = repository.newObjectReader(); CanonicalTreeParser oldTreeIter = new CanonicalTreeParser(); ObjectId oldTree = repository.resolve(newCommit + "~1^{tree}"); // equals newCommit.getTree() // TODO the first commit has no precedessor .. we have no diff :-( if (oldTree == null) { log.error("No precedessor object for " + newCommit + " returning default zero (which is not correct)"); return 0; } Objects.requireNonNull(oldTree, "oldTree is null for " + newCommit); oldTreeIter.reset(reader, oldTree); CanonicalTreeParser newTreeIter = new CanonicalTreeParser(); ObjectId newTree = repository.resolve(newCommit + "^{tree}"); // equals oldCommit.getTree() Objects.requireNonNull(newTree, "newTree is null for " + newCommit); newTreeIter.reset(reader, newTree); ByteArrayOutputStream baos = new ByteArrayOutputStream(); DiffFormatter df = new DiffFormatter(baos); df.setRepository(repository); List<DiffEntry> entries = df.scan(oldTreeIter, newTreeIter); for (DiffEntry entry : entries) { FileHeader fileHeader = df.toFileHeader(entry); log.debug("Fileheader for {} -> {}", fileHeader.getPath(DiffEntry.Side.OLD), fileHeader.getPath(DiffEntry.Side.NEW)); log.debug(" length in bytes is {}", fileHeader.getBuffer().length); size += fileHeader.getBuffer().length; size += fileHeader.getBuffer().length; baos.reset(); } //System.out.println("baos"+baos.toString()); } catch (RevisionSyntaxException | IncorrectObjectTypeException ex) { throw new IOException(ex); } return size; }
From source file:org.uberfire.java.nio.fs.jgit.util.commands.DiffBranches.java
License:Apache License
private FileHeader getFileHeader(final DiffFormatter formatter, final DiffEntry elem) { try {/*from w ww . ja v a 2s.c o m*/ return formatter.toFileHeader(elem); } catch (IOException e) { throw new GitException("A problem occurred when trying to obtain diffs between files", e); } }
From source file:playRepository.GitRepository.java
License:Apache License
/** * Finds authors who last modified or removed lines from the given edit * list./*from www .j a va2 s. c o m*/ * * @param repository * @param diff an edit list * @param start the oldest commit to be considered * @return * @throws GitAPIException * @throws IOException */ private static Set<User> getAuthorsFromDiffEntry(Repository repository, DiffEntry diff, RevCommit start) throws GitAPIException, IOException { DiffFormatter diffFormatter = new DiffFormatter(NullOutputStream.INSTANCE); try { diffFormatter.setRepository(repository); EditList edits = diffFormatter.toFileHeader(diff).toEditList(); BlameResult blameResult = new Git(repository).blame().setFilePath(diff.getOldPath()) .setFollowFileRenames(true).setStartCommit(start).call(); return getAuthorsFromBlameResult(edits, blameResult); } finally { diffFormatter.release(); } }