PostCommitCommand.java
- package org.docascode.api;
- import org.docascode.api.core.errors.DocAsCodeException;
- import org.docascode.api.core.DocAsCodeRepository;
- import org.eclipse.jgit.api.Git;
- import org.eclipse.jgit.api.errors.GitAPIException;
- import org.eclipse.jgit.lib.Constants;
- import org.eclipse.jgit.lib.ObjectId;
- import org.eclipse.jgit.revwalk.RevCommit;
- import org.eclipse.jgit.revwalk.RevWalk;
- import java.io.IOException;
- public class PostCommitCommand extends DocAsCodeCommand<RevCommit> {
- PostCommitCommand(DocAsCodeRepository repo) {
- super(repo);
- }
- @Override
- public RevCommit call() throws DocAsCodeException {
- RevCommit result;
- RevCommit previousCommit;
- ObjectId headId;
- try (RevWalk rw = new RevWalk(getRepository().git())){
- headId = getRepository().git().resolve(Constants.HEAD + "^{commit}");
- previousCommit = rw.parseCommit(headId);
- } catch (IOException e) {
- throw new DocAsCodeException("Unable to process post-commit.", e);
- }
- if (this.getRepository().git().isLocked()) {
- try (Git git = Git.open(getRepository().getWorkTree()) ){
- getRepository().git().unlock();
- git.add().addFilepattern(".docascode/markdown").call();
- result = git.commit()
- .setAmend(true)
- .setNoVerify(true)
- .setMessage(previousCommit.getFullMessage())
- .call();
- return result;
- } catch (GitAPIException | IOException e) {
- throw new DocAsCodeException("Unable to process post-commit.", e);
- } finally {
- this.getRepository().git().unlock();
- }
- } else {
- return previousCommit;
- }
- }
- }