shithub: git9

ref: f5805c3552dd00a6018f8440c1a4c8aa6755fd03
dir: /merge/

View raw version
#!/bin/rc -e

rfork ne

fn merge{
	ourbr=$1/tree
	basebr=$2/tree
	theirbr=$3/tree

	all=`{walk -f $ourbr $basebr $theirbr | \
		 sed 's@^('$ourbr'|'$basebr'|'$theirbr')/*@@g' | sort | uniq}
	for(f in $all){
		if(! test -f $ourbr/$f)
			ours=/dev/null
		if(! test -f $basebr/$f)
			base=/dev/null
		if(! test -f $theirbr/$f)
			theirs=/dev/null
		if(! ape/diff3 -m $ourbr/$f $basebr/$f $theirbr/$f > $f)
			echo merge needed: $f
	}
}

fn usage{
	echo usage: $0 theirs >[1=2]
	exit usage
}

if(! ~ $#* 1)
	usage
if(! cd `{git/conf -r}){
	echo 'not in git repository'
	exit 'badrepo'
}
git/fs
theirs=`{git/query $1}
ours=`{git/query HEAD}
base=`{git/query $theirs ^ ' ' ^ $ours ^ '@'}

merge /mnt/git/object/$ours /mnt/git/object/$base /mnt/git/object/$theirs
echo $ours $theirs > .git/index9/merge-parents