Using JGit, I want to get a list of changes to commit files, as possible with git log --full-history -p -1 <hash-id> .
Is it possible? If so, how do you do it?
I know how to get each commit and see the commit message:
//Load repo FileRepositoryBuilder builder = new FileRepositoryBuilder(); Repository repo = builder.setGitDir(new File("/path/to/repo/.git")).setMustExist(true).build(); Git git = new Git(repo); //get commits Iterable<RevCommit> log = git.log().call(); for (RevCommit commit : log) { //Shows the hashid System.out.println("LogCommit: " + commit); //Shows only commit message String logMessage = commit.getFullMessage(); System.out.println("LogMessage: " + logMessage); } git.close();
What allows me to get changes in files?
For example, I write:
git log --full-history -p -1 8309c1262e1b7ffce8fc86efc1ae5777a4a96777
Answer
commit 8309c1262e1b7ffce8fc86efc1ae5777a4a96777 Author: <redacted> Date: Thu Aug 4 12:15:23 2016 -0400 Fixed typo in commit diff --git a/Product/Production/Common/CONNECTCoreLib/src/main/java/gov/hhs/fha/nhinc/messaging/server/BaseService.java b/Product/Production/Common/CONNECTCoreLib/src/main/java/gov/hhs/fha/nhinc/messaging/server/BaseService.java index fa55e7e..4f3c155 100644 --- a/Product/Production/Common/CONNECTCoreLib/src/main/java/gov/hhs/fha/nhinc/messaging/server/BaseService.java +++ b/Product/Production/Common/CONNECTCoreLib/src/main/java/gov/hhs/fha/nhinc/messaging/server/BaseService.java @@ -56,6 +57,7 @@ public abstract class BaseService { protected AssertionType getAssertion(WebServiceContext context, AssertionType assertionIn) { AssertionType assertion; - WSAHeaderHelper wsaHlpr = new WSAHeaderHelper(); + WSAHeaderHelper wsaHelper = new WSAHeaderHelper(); if (assertionIn == null) { assertion = SAML2AssertionExtractor.getInstance().extractSamlAssertion(context);
I want to have something like the following. Change is a class:
//Load repo FileRepositoryBuilder builder = new FileRepositoryBuilder(); Repository repo = builder.setGitDir(new File("/path/to/repo/.git")).setMustExist(true).build(); Git git = new Git(repo); //get commits Iterable<RevCommit> log = git.log().call(); for (RevCommit commit : log) { //Shows the hashid System.out.println("LogCommit: " + commit); //Shows only commit message String logMessage = commit.getFullMessage(); System.out.println("LogMessage: " + logMessage); List<Change> changes = commit.getChanges(); for(Change change: changes): System.out.println("File: " + change.getFile()); System.out.println("Change: " + change.getChange()); System.out.println("ChangeType: " + change.getChangeType()); } git.close();
The result will look something like this:
LogCommit: 8309c1262e1b7ffce8fc86efc1ae5777a4a96777 LogMessage: Fixed typo in commit File: Product/Production/Common/CONNECTCoreLib/src/main/java/gov/hhs/fha/nhinc/messaging/server/BaseService.java Change: WSAHeaderHelper wsaHlpr = new WSAHeaderHelper(); ChangeType: D File: Product/Production/Common/CONNECTCoreLib/src/main/java/gov/hhs/fha/nhinc/messaging/server/BaseService.java Change: WSAHeaderHelper wsaHelper = new WSAHeaderHelper(); ChangeType: A
source share