#!/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