How to write git log --stat command in JGit

拥有回忆 提交于 2019-12-01 03:04:04

问题


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?


回答1:


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/



来源:https://stackoverflow.com/questions/40795781/how-to-write-git-log-stat-command-in-jgit

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!