private FileHeader getFileHeader(final DiffFormatter formatter, final DiffEntry elem) { try { return formatter.toFileHeader(elem); } catch (IOException e) { throw new GitException("A problem occurred when trying to obtain diffs between files", e); } }
try( DiffFormatter diffFormatter = new DiffFormatter( DisabledOutputStream.INSTANCE ) ) { diffFormatter.setRepository( git.getRepository() ); List<DiffEntry> diffEntries = diffFormatter.scan( oldTreeIterator, newTreeIterator ); FileHeader fileHeader = diffFormatter.toFileHeader( diffEntries.get( 0 ) ); return fileHeader.toEditList(); }
public static void main(String[] args) throws Exception { Repository repository = new FileRepositoryBuilder() .setGitDir(new File("c:/temp/jgit-test/.git")).build(); // Here we get the head commit and it's first parent. // Adjust to your needs to locate the proper commits. RevCommit headCommit = getHeadCommit(repository); RevCommit diffWith = headCommit.getParent(0); FileOutputStream stdout = new FileOutputStream(FileDescriptor.out); try (DiffFormatter diffFormatter = new DiffFormatter(stdout)) { diffFormatter.setRepository(repository); for (DiffEntry entry : diffFormatter.scan(diffWith, headCommit)) { diffFormatter.format(diffFormatter.toFileHeader(entry)); } } } private static RevCommit getHeadCommit(Repository repository) throws Exception { try (Git git = new Git(repository)) { Iterable<RevCommit> history = git.log().setMaxCount(1).call(); return history.iterator().next(); } }
// Create two commits to be compared File file = new File( git.getRepository().getWorkTree(), "file.txt" ); writeFile( file, "line1\n" ); RevCommit oldCommit = commitChanges(); writeFile( file, "line1\nline2\n" ); RevCommit newCommit = commitChanges(); // Obtain tree iterators to traverse the tree of the old/new commit ObjectReader reader = git.getRepository().newObjectReader(); CanonicalTreeParser oldTreeIter = new CanonicalTreeParser(); oldTreeIter.reset( reader, oldCommit.getTree() ); CanonicalTreeParser newTreeIter = new CanonicalTreeParser(); newTreeIter.reset( reader, newCommit.getTree() ); // Use a DiffFormatter to compare new and old tree and return a list of changes DiffFormatter diffFormatter = new DiffFormatter( DisabledOutputStream.INSTANCE ); diffFormatter.setRepository( git.getRepository() ); diffFormatter.setContext( 0 ); List<DiffEntry> entries = diffFormatter.scan( newTreeIter, oldTreeIter ); // Print the contents of the DiffEntries for( DiffEntry entry : entries ) { System.out.println( entry ); FileHeader fileHeader = diffFormatter.toFileHeader( entry ); List<? extends HunkHeader> hunks = fileHeader.getHunks(); for( HunkHeader hunk : hunks ) { System.out.println( hunk ); } }
int linesAdded = 0; int linesDeleted = 0; int filesChanged = 0; try { repo = new FileRepository(new File("repo/.git")); RevWalk rw = new RevWalk(repo); RevCommit commit = rw.parseCommit(repo.resolve("486817d67b")); // Any ref will work here (HEAD, a sha1, tag, branch) RevCommit parent = rw.parseCommit(commit.getParent(0).getId()); DiffFormatter df = new DiffFormatter(DisabledOutputStream.INSTANCE); df.setRepository(repo); df.setDiffComparator(RawTextComparator.DEFAULT); df.setDetectRenames(true); List<DiffEntry> diffs; diffs = df.scan(parent.getTree(), commit.getTree()); filesChanged = diffs.size(); for (DiffEntry diff : diffs) { for (Edit edit : df.toFileHeader(diff).toEditList()) { linesDeleted += edit.getEndA() - edit.getBeginA(); linesAdded += edit.getEndB() - edit.getBeginB(); } } } catch (IOException e1) { throw new RuntimeException(e1); }
FileHeader fileHeader = diffFormatter.toFileHeader(entry); List<? extends HunkHeader> hunks = fileHeader.getHunks(); for (HunkHeader hunk : hunks) {
int deletedLines = 0; for (DiffEntry entry : diffs) { FileHeader header = diffFormatter.toFileHeader(entry); List<? extends HunkHeader> hunks = header.getHunks(); for (HunkHeader hunkHeader : hunks) {