]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/git/merge
git: better handling of absolute paths, regex metachars
[plan9front.git] / sys / src / cmd / git / merge
1 #!/bin/rc -e
2 rfork ne
3 . /sys/lib/git/common.rc
4
5 fn merge{
6         ourbr=$gitfs/object/$1/tree
7         basebr=$gitfs/object/$2/tree
8         theirbr=$gitfs/object/$3/tree
9
10         all=`$nl{{git/query -c $1 $2; git/query -c $2 $3} | sed 's/^..//' | sort | uniq}
11         for(f in $all){
12                 ours=$ourbr/$f
13                 base=$basebr/$f
14                 theirs=$theirbr/$f
15                 merge1 ./$f $theirs $base $ours
16         }
17 }
18
19 gitup
20
21 flagfmt=''; args='theirs'
22 eval `''{aux/getflags $*} || exec aux/usage
23
24 if(! ~ $#* 1)
25         exec aux/usage
26
27 theirs=`{git/query $1}
28 ours=`{git/query HEAD}
29 base=`{git/query $theirs ^ ' ' ^ $ours ^ '@'}
30
31 if(~ $base $theirs)
32         die 'nothing to merge, doofus'
33 if(! git/walk -q)
34         die 'dirty work tree, refusing to merge'
35 if(~ $base $ours){
36         >[1=2] echo 'fast forwarding...'
37         echo $theirs > .git/refs/`{git/branch}
38         git/revert .
39         exit ''
40 }
41 echo $ours >> .git/index9/merge-parents
42 echo $theirs >> .git/index9/merge-parents
43
44 merge $ours $base $theirs
45 >[1=2] echo 'merge complete: remember to commit'
46 exit ''