#!/usr/bin/env bash # # Portions based on cg-merge Copyright (c) Petr Baudis, 2005 # Copyright (c) 2005, Intel Corporation, James Ketrenos . ${COGITO_LIB:-/usr/lib/cogito/}cg-Xlib function die() { ret=$1 shift echo $@ >&2 exit $ret } ([ "$1" ] && [ "$2" ]) || die 1 "usage: git-merge-heads parent-sha1 child-sha1" git-read-tree HEAD || die 8 "Failed to read tree" parent=$1 child=$2 base=$(git-merge-base $1 $2) || die 2 "Failed to obtain common base for trees" git-read-tree -m $base $parent $child || die 3 "Failed to merge trees" if ! git-merge-cache -o ${COGITO_LIB:-/usr/lib/cogito/}cg-Xmergefile -a; then git-resolve-conflicts || die 4 "Failed to resolve conflicts" fi tree=$(git-write-tree) || die 5 "Failed to write merged tree." echo "Merge succeeded as tree $tree." while true; do read -p "Do you wish to commit this tree? [y]n :" reply <&1 case $reply in n) break ;; y|*) echo "Type your COMMIT message followed by CTRL-D:" commit=$(git-commit-tree $tree -p $parent -p $child) || die 6 "Commit failed." echo "Commit succeeded as commit $commit." echo "Moving HEAD to $commit" echo $commit > .git/HEAD break ;; esac done git-read-tree -m HEAD while true; do read -p "Do you wish to update the files on disk to reflect repository? [y]n :" reply <&1 case $reply in n) break ;; y|*) git-read-tree -m HEAD || die 9 "Failed to read tree." git-checkout-cache -q -u -f -a || die 7 "Checkout failed." break ;; esac done