Git fork
at reftables-rust 64 lines 1.2 kB view raw
1#!/bin/sh 2# 3# Copyright (c) 2005 Linus Torvalds 4# Copyright (c) 2005 Junio C Hamano 5# 6# Resolve two trees, using enhanced multi-base read-tree. 7 8. git-sh-setup 9 10# Abort if index does not match HEAD 11if ! git diff-index --quiet --cached HEAD -- 12then 13 gettextln "Error: Your local changes to the following files would be overwritten by merge" 14 git diff-index --cached --name-only HEAD -- | sed -e 's/^/ /' 15 exit 2 16fi 17 18# The first parameters up to -- are merge bases; the rest are heads. 19bases= head= remotes= sep_seen= 20for arg 21do 22 case ",$sep_seen,$head,$arg," in 23 *,--,) 24 sep_seen=yes 25 ;; 26 ,yes,,*) 27 head=$arg 28 ;; 29 ,yes,*) 30 remotes="$remotes$arg " 31 ;; 32 *) 33 bases="$bases$arg " 34 ;; 35 esac 36done 37 38# Give up if we are given two or more remotes -- not handling octopus. 39case "$remotes" in 40?*' '?*) 41 exit 2 ;; 42esac 43 44# Give up if this is a baseless merge. 45if test '' = "$bases" 46then 47 exit 2 48fi 49 50git update-index -q --refresh 51git read-tree -u -m --aggressive $bases $head $remotes || exit 2 52echo "Trying simple merge." 53if result_tree=$(git write-tree 2>/dev/null) 54then 55 exit 0 56else 57 echo "Simple merge failed, trying Automatic merge." 58 if git merge-index -o git-merge-one-file -a 59 then 60 exit 0 61 else 62 exit 1 63 fi 64fi