Junio C Hamano | 91063bb | 2005-09-08 13:47:12 -0700 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | # |
| 3 | # Copyright (c) 2005 Linus Torvalds |
Junio C Hamano | 2276aa6 | 2005-09-10 17:56:19 -0700 | [diff] [blame] | 4 | # Copyright (c) 2005 Junio C Hamano |
Junio C Hamano | 91063bb | 2005-09-08 13:47:12 -0700 | [diff] [blame] | 5 | # |
Pavel Roskin | 3dff537 | 2007-02-03 23:49:16 -0500 | [diff] [blame] | 6 | # Resolve two trees, using enhanced multi-base read-tree. |
Junio C Hamano | 91063bb | 2005-09-08 13:47:12 -0700 | [diff] [blame] | 7 | |
| 8 | # The first parameters up to -- are merge bases; the rest are heads. |
| 9 | bases= head= remotes= sep_seen= |
| 10 | for arg |
| 11 | do |
| 12 | case ",$sep_seen,$head,$arg," in |
| 13 | *,--,) |
| 14 | sep_seen=yes |
| 15 | ;; |
| 16 | ,yes,,*) |
| 17 | head=$arg |
| 18 | ;; |
| 19 | ,yes,*) |
| 20 | remotes="$remotes$arg " |
| 21 | ;; |
| 22 | *) |
| 23 | bases="$bases$arg " |
| 24 | ;; |
| 25 | esac |
| 26 | done |
| 27 | |
Tom Clarke | 7d3c82a | 2007-08-30 23:12:44 +0200 | [diff] [blame] | 28 | # Give up if we are given two or more remotes -- not handling octopus. |
Junio C Hamano | 91063bb | 2005-09-08 13:47:12 -0700 | [diff] [blame] | 29 | case "$remotes" in |
| 30 | ?*' '?*) |
| 31 | exit 2 ;; |
| 32 | esac |
| 33 | |
Fredrik Kuivinen | 88f8f0a | 2005-10-03 08:13:09 +0200 | [diff] [blame] | 34 | # Give up if this is a baseless merge. |
| 35 | if test '' = "$bases" |
| 36 | then |
| 37 | exit 2 |
| 38 | fi |
| 39 | |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 40 | git update-index --refresh 2>/dev/null |
| 41 | git read-tree -u -m --aggressive $bases $head $remotes || exit 2 |
Junio C Hamano | 91063bb | 2005-09-08 13:47:12 -0700 | [diff] [blame] | 42 | echo "Trying simple merge." |
Junio C Hamano | 5be6007 | 2007-07-02 22:52:14 -0700 | [diff] [blame] | 43 | if result_tree=$(git write-tree 2>/dev/null) |
Junio C Hamano | 91063bb | 2005-09-08 13:47:12 -0700 | [diff] [blame] | 44 | then |
| 45 | exit 0 |
| 46 | else |
| 47 | echo "Simple merge failed, trying Automatic merge." |
| 48 | if git-merge-index -o git-merge-one-file -a |
| 49 | then |
| 50 | exit 0 |
| 51 | else |
| 52 | exit 1 |
| 53 | fi |
| 54 | fi |