Maytham Fahmi
Maytham Fahmi

Reputation: 33397

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?

Upvotes: 5

Views: 1915

Answers (1)

Rüdiger Herrmann
Rüdiger Herrmann

Reputation: 20985

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 set up, use its iterator or its next() method to traverse the history.

Putting that together would look like this:

try (RevWalk revWalk = new RevWalk(repository)) {
  for (Ref ref : repository.getAllRefs().values()) {
    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: http://www.codeaffine.com/2016/06/16/jgit-diff/

Upvotes: 6

Related Questions