summaryrefslogtreecommitdiff
path: root/sys/src/cmd/git/merge
diff options
context:
space:
mode:
Diffstat (limited to 'sys/src/cmd/git/merge')
-rwxr-xr-xsys/src/cmd/git/merge47
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 ''