maytham-ɯɐɥʇʎɐɯ maytham-ɯɐɥʇʎɐɯ - 10 months ago 63
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 Source

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

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: