81 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | |
| #
 | |
| # Copyright (c) 2005 Linus Torvalds
 | |
| #
 | |
| # Resolve two trees, 'stupid merge'.
 | |
| 
 | |
| # The first parameters up to -- are merge bases; the rest are heads.
 | |
| bases= head= remotes= sep_seen=
 | |
| for arg
 | |
| do
 | |
| 	case ",$sep_seen,$head,$arg," in
 | |
| 	*,--,)
 | |
| 		sep_seen=yes
 | |
| 		;;
 | |
| 	,yes,,*)
 | |
| 		head=$arg
 | |
| 		;;
 | |
| 	,yes,*)
 | |
| 		remotes="$remotes$arg "
 | |
| 		;;
 | |
| 	*)
 | |
| 		bases="$bases$arg "
 | |
| 		;;
 | |
| 	esac
 | |
| done
 | |
| 
 | |
| # Give up if we are given two or more remotes -- not handling octopus.
 | |
| case "$remotes" in
 | |
| ?*' '?*)
 | |
| 	exit 2 ;;
 | |
| esac
 | |
| 
 | |
| # Find an optimum merge base if there are more than one candidates.
 | |
| case "$bases" in
 | |
| ?*' '?*)
 | |
| 	echo "Trying to find the optimum merge base."
 | |
| 	G=.tmp-index$$
 | |
| 	best=
 | |
| 	best_cnt=-1
 | |
| 	for c in $bases
 | |
| 	do
 | |
| 		rm -f $G
 | |
| 		GIT_INDEX_FILE=$G git read-tree -m $c $head $remotes \
 | |
| 			 2>/dev/null ||	continue
 | |
| 		# Count the paths that are unmerged.
 | |
| 		cnt=`GIT_INDEX_FILE=$G git ls-files --unmerged | wc -l`
 | |
| 		if test $best_cnt -le 0 -o $cnt -le $best_cnt
 | |
| 		then
 | |
| 			best=$c
 | |
| 			best_cnt=$cnt
 | |
| 			if test "$best_cnt" -eq 0
 | |
| 			then
 | |
| 				# Cannot do any better than all trivial merge.
 | |
| 				break
 | |
| 			fi
 | |
| 		fi
 | |
| 	done
 | |
| 	rm -f $G
 | |
| 	common="$best"
 | |
| 	;;
 | |
| *)
 | |
| 	common="$bases"
 | |
| 	;;
 | |
| esac
 | |
| 
 | |
| git update-index --refresh 2>/dev/null
 | |
| git read-tree -u -m $common $head $remotes || exit 2
 | |
| echo "Trying simple merge."
 | |
| if result_tree=$(git write-tree  2>/dev/null)
 | |
| then
 | |
| 	exit 0
 | |
| else
 | |
| 	echo "Simple merge failed, trying Automatic merge."
 | |
| 	if git-merge-index -o git-merge-one-file -a
 | |
| 	then
 | |
| 		exit 0
 | |
| 	else
 | |
| 		exit 1
 | |
| 	fi
 | |
| fi
 |