diff options
author | Matthias Sohn <matthias.sohn@sap.com> | 2021-03-20 11:15:20 +0100 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2021-03-23 11:01:52 +0100 |
commit | f43cb3605c078d0932365c49163f5a8b799fe117 (patch) | |
tree | c3e54630555fe062f70adcb29d489ab7b8ea2c8e | |
parent | fd3edc7bfc65f9bdfe785c92c72790261881dd40 (diff) | |
download | jgit-f43cb3605c078d0932365c49163f5a8b799fe117.tar.gz jgit-f43cb3605c078d0932365c49163f5a8b799fe117.zip |
Ensure post-commit hook is called after index lock was released
Otherwise a post-commit hook cannot modify the index.
Bug: 566934
Change-Id: I0093dccd93b2064f243544b516bdce198afdb18b
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
3 files changed, 19 insertions, 6 deletions
diff --git a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties index 9695e5742b..d4bcd9a42b 100644 --- a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties +++ b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties @@ -529,6 +529,7 @@ peeledRefIsRequired=Peeled ref is required. peerDidNotSupplyACompleteObjectGraph=peer did not supply a complete object graph personIdentEmailNonNull=E-mail address of PersonIdent must not be null. personIdentNameNonNull=Name of PersonIdent must not be null. +postCommitHookFailed=Execution of post-commit hook failed: {0}. prefixRemote=remote: problemWithResolvingPushRefSpecsLocally=Problem with resolving push ref specs locally: {0} progressMonUploading=Uploading {0} diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java index 31f6a31c75..51d5d382cb 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java @@ -67,6 +67,8 @@ import org.eclipse.jgit.treewalk.FileTreeIterator; import org.eclipse.jgit.treewalk.TreeWalk; import org.eclipse.jgit.treewalk.TreeWalk.OperationType; import org.eclipse.jgit.util.ChangeIdUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * A class used to execute a {@code Commit} command. It has setters for all @@ -78,6 +80,9 @@ import org.eclipse.jgit.util.ChangeIdUtil; * >Git documentation about Commit</a> */ public class CommitCommand extends GitCommand<RevCommit> { + private static final Logger log = LoggerFactory + .getLogger(CommitCommand.class); + private PersonIdent author; private PersonIdent committer; @@ -212,6 +217,7 @@ public class CommitCommand extends GitCommand<RevCommit> { .setCommitMessage(message).call(); } + RevCommit revCommit; // lock the index DirCache index = repo.lockDirCache(); try (ObjectInserter odi = repo.newObjectInserter()) { @@ -267,7 +273,7 @@ public class CommitCommand extends GitCommand<RevCommit> { ObjectId commitId = odi.insert(commit); odi.flush(); - RevCommit revCommit = rw.parseCommit(commitId); + revCommit = rw.parseCommit(commitId); RefUpdate ru = repo.updateRef(Constants.HEAD); ru.setNewObjectId(commitId); if (!useDefaultReflogMessage) { @@ -302,11 +308,7 @@ public class CommitCommand extends GitCommand<RevCommit> { repo.writeMergeCommitMsg(null); repo.writeRevertHead(null); } - Hooks.postCommit(repo, - hookOutRedirect.get(PostCommitHook.NAME), - hookErrRedirect.get(PostCommitHook.NAME)).call(); - - return revCommit; + break; } case REJECTED: case LOCK_FAILURE: @@ -320,6 +322,15 @@ public class CommitCommand extends GitCommand<RevCommit> { } finally { index.unlock(); } + try { + Hooks.postCommit(repo, hookOutRedirect.get(PostCommitHook.NAME), + hookErrRedirect.get(PostCommitHook.NAME)).call(); + } catch (Exception e) { + log.error(MessageFormat.format( + JGitText.get().postCommitHookFailed, e.getMessage()), + e); + } + return revCommit; } catch (UnmergedPathException e) { throw new UnmergedPathsException(e); } catch (IOException e) { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java index 95265feb4e..fe8c2d218e 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java @@ -557,6 +557,7 @@ public class JGitText extends TranslationBundle { /***/ public String peerDidNotSupplyACompleteObjectGraph; /***/ public String personIdentEmailNonNull; /***/ public String personIdentNameNonNull; + /***/ public String postCommitHookFailed; /***/ public String prefixRemote; /***/ public String problemWithResolvingPushRefSpecsLocally; /***/ public String progressMonUploading; |