aboutsummaryrefslogtreecommitdiff
path: root/libexec/find-base-commits.sh
diff options
context:
space:
mode:
Diffstat (limited to 'libexec/find-base-commits.sh')
-rwxr-xr-xlibexec/find-base-commits.sh40
1 files changed, 40 insertions, 0 deletions
diff --git a/libexec/find-base-commits.sh b/libexec/find-base-commits.sh
new file mode 100755
index 0000000..3e16227
--- /dev/null
+++ b/libexec/find-base-commits.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+extend_bases () {
+ shas="$1"
+ new="$2"
+ for sha in $shas ; do
+ [ "$sha" = "$new" ] && continue
+ ${DELI_GIT_IS_ANCESTOR_CMD:-git merge-base --is-ancestor} "$sha" "$new"
+ res=$?
+ case $res in
+ 0) ;;
+ 1) echo "$sha" ;;
+ *) echo "$0: ancestor finding failed" >&2
+ exit 1 ;;
+ esac
+ done
+ old=no
+ for sha in $shas ; do
+ [ "$sha" = "$new" ] && continue
+ ${DELI_GIT_IS_ANCESTOR_CMD:-git merge-base --is-ancestor} "$new" "$sha"
+ res=$?
+ case $res in
+ 0) old=yes ; break ;;
+ 1) ;;
+ *) echo "$0: ancestor finding failed" >&2
+ exit 1 ;;
+ esac
+ done
+ [ $old = no ] && echo "$new"
+}
+
+bases=""
+
+while read sha ; do
+ bases=$( extend_bases "$bases" "$sha" )
+done
+
+for sha in $bases ; do
+ echo "$sha"
+done