PostCommitCommand.java

  1. package org.docascode.api;

  2. import org.docascode.api.core.errors.DocAsCodeException;
  3. import org.docascode.api.core.DocAsCodeRepository;
  4. import org.eclipse.jgit.api.Git;
  5. import org.eclipse.jgit.api.errors.GitAPIException;
  6. import org.eclipse.jgit.lib.Constants;
  7. import org.eclipse.jgit.lib.ObjectId;
  8. import org.eclipse.jgit.revwalk.RevCommit;
  9. import org.eclipse.jgit.revwalk.RevWalk;

  10. import java.io.IOException;

  11. public class PostCommitCommand extends DocAsCodeCommand<RevCommit> {
  12.     PostCommitCommand(DocAsCodeRepository repo) {
  13.         super(repo);
  14.     }

  15.     @Override
  16.     public RevCommit call() throws DocAsCodeException {
  17.         RevCommit result;
  18.         RevCommit previousCommit;
  19.         ObjectId headId;
  20.         try (RevWalk rw = new RevWalk(getRepository().git())){
  21.             headId = getRepository().git().resolve(Constants.HEAD + "^{commit}");
  22.             previousCommit = rw.parseCommit(headId);
  23.         } catch (IOException e) {
  24.             throw new DocAsCodeException("Unable to process post-commit.", e);
  25.         }
  26.         if (this.getRepository().git().isLocked()) {
  27.             try (Git git = Git.open(getRepository().getWorkTree()) ){
  28.                 getRepository().git().unlock();
  29.                 git.add().addFilepattern(".docascode/markdown").call();

  30.                 result = git.commit()
  31.                         .setAmend(true)
  32.                         .setNoVerify(true)
  33.                         .setMessage(previousCommit.getFullMessage())
  34.                         .call();
  35.                 return result;
  36.             } catch (GitAPIException | IOException e) {
  37.                 throw new DocAsCodeException("Unable to process post-commit.", e);
  38.             } finally {
  39.                 this.getRepository().git().unlock();
  40.             }
  41.         } else {
  42.             return previousCommit;
  43.         }
  44.     }
  45. }