5

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?

0

1 Answer 1

6

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/

Sign up to request clarification or add additional context in comments.

3 Comments

Not sure what 'total lines added, deleted in repo' means. You can, of course, calculate the number of lines added/removed between two commits. The link to the article in the answer, in particular the list of Edits should get you there.
What have you tried? Did you follow the links in the answer? They should contain everything you need.
getAllRefs().values() is deprecated now. use getRefDatabase().getRefs() instead.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.