diff options
Diffstat (limited to 'sys/src/cmd/git/merge')
-rwxr-xr-x | sys/src/cmd/git/merge | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/sys/src/cmd/git/merge b/sys/src/cmd/git/merge new file mode 100755 index 000000000..5517a3924 --- /dev/null +++ b/sys/src/cmd/git/merge @@ -0,0 +1,47 @@ +#!/bin/rc -e +rfork ne +. /sys/lib/git/common.rc + +fn merge{ + ourbr=/mnt/git/object/$1/tree + basebr=/mnt/git/object/$2/tree + theirbr=/mnt/git/object/$3/tree + + all=`$nl{{git/query -c $1 $2; git/query -c $2 $3} | sed 's/^..//' | \ + subst -g '^('$ourbr'|'$basebr'|'$theirbr')/*' | sort | uniq} + for(f in $all){ + ours=$ourbr/$f + base=$basebr/$f + theirs=$theirbr/$f + merge1 $f $theirs $base $ours + } +} + +gitup + +flagfmt=''; args='theirs' +eval `''{aux/getflags $*} || exec aux/usage + +if(! ~ $#* 1) + exec aux/usage + +theirs=`{git/query $1} +ours=`{git/query HEAD} +base=`{git/query $theirs ^ ' ' ^ $ours ^ '@'} + +if(~ $base $theirs) + die 'nothing to merge, doofus' +if(! git/walk -q) + die 'dirty work tree, refusing to merge' +if(~ $base $ours){ + >[1=2] echo 'fast forwarding...' + echo $theirs > .git/refs/`{git/branch} + git/revert . + exit '' +} +echo $ours >> .git/index9/merge-parents +echo $theirs >> .git/index9/merge-parents + +merge $ours $base $theirs +>[1=2] echo 'merge complete: remember to commit' +exit '' |