maytham-ɯɐɥʇʎɐɯ maytham-ɯɐɥʇʎɐɯ - 10 days ago 8
Java Question

How to write git log --stat command in JGit

I have following git command:

git log --stat=1000 --all > gitstat.log


Is it possible to achieve this in JGit?

If yes, what is the equivalent way to write this in JGit?

Answer

To access the history of a repository, JGit provides the RevWalk. Its markStart() method is used to specify at which commits the history should start. All refs in a repository can be obtained with Repository::getAllRefs().

Once a RevWalk instance is properly set up, use its iterator or its next() method to traverse the history.

Putting that together would look like this:

Collection<Ref> allRefs = repository.getAllRefs().values();
RevWalk revWalk = new RevWalk( repository );
for( Ref ref : allRefs ) {
  revWalk.markStart( revWalk.parseCommit( ref.getObjectId() );
}
for( RevCommit commit : revWalk ) {
  // print commit metadata and diff
}
revWalk.close();

Note that the RevWalk instance that calls parseCommit() must be the same as the one that calls markStart(). Otherwise, the RevWalk will yield funny results.

Once you have a commit (and through this, access to its parent) you can use the DiffFormatter to obtain a list of Diffs and Edits that tell how many files and lines per file were changed.

You may want to look at this post to get started: How to show changes between commits with JGit

And here for an article that covers JGit's diff APIs in depth: http://www.codeaffine.com/2016/06/16/jgit-diff/

Comments