From fa236ada0a9304f51ee214bd651e68c6e25ca5e8 Mon Sep 17 00:00:00 2001
From: Florian Heck <florian.heck@hotmail.de>
Date: Fri, 28 Oct 2016 15:33:25 +0200
Subject: [PATCH] added ancestry check

---
 .../fim/seibt/gitwrapper/repo/Commit.java          | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/de/uni_passau/fim/seibt/gitwrapper/repo/Commit.java b/src/de/uni_passau/fim/seibt/gitwrapper/repo/Commit.java
index a26c072..7c2ef1f 100644
--- a/src/de/uni_passau/fim/seibt/gitwrapper/repo/Commit.java
+++ b/src/de/uni_passau/fim/seibt/gitwrapper/repo/Commit.java
@@ -3,6 +3,7 @@ package de.uni_passau.fim.seibt.gitwrapper.repo;
 import java.time.Instant;
 import java.time.OffsetDateTime;
 import java.time.ZoneId;
+import java.util.Optional;
 import java.util.logging.Logger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -245,4 +246,17 @@ public class Commit extends Reference {
             }
         });
     }
+
+    /**
+     * Checks if the given {@link Commit} is an ancestor of this commit.
+     *
+     * @param ancestor
+     *         the {@link Commit} to check
+     * @return optionally <code>true</code>, if the given commit is in the history before this commit,
+     * <code>false</code>, if not and an {@link Optional#EMPTY empty optional}, if an error occurred.
+     */
+    public Optional<Boolean> checkAncestry(Commit ancestor) {
+        return git.exec(repo.getDir(), " merge-base", "--is-ancestor", ancestor.getId(), id).map(execRes ->
+                execRes.exitCode == 0 ? Boolean.TRUE : execRes.exitCode == 1 ? Boolean.FALSE : null);
+    }
 }
-- 
GitLab