X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-merge.sh;h=74f07610fa2042ef0f2cb12c051d3be9139a680b;hb=8e1618f9612a78ea09b2a926797c781fe06027c9;hp=d352a3cf65e45e0da0a8ee1989e9acb522e132b5;hpb=36d277c72d90d32f99616072b64a2652248f5264;p=git.git diff --git a/git-merge.sh b/git-merge.sh index d352a3cf..74f07610 100755 --- a/git-merge.sh +++ b/git-merge.sh @@ -3,15 +3,13 @@ # Copyright (c) 2005 Junio C Hamano # + +USAGE='[-n] [--no-commit] [-s ]... +' . git-sh-setup LF=' ' -usage () { - die "git-merge [-n] [--no-commit] [-s ]... +" -} - all_strategies='recursive octopus resolve stupid ours' default_strategies='recursive' use_strategies= @@ -97,11 +95,14 @@ head=$(git-rev-parse --verify "$1"^0) || usage shift # All the rest are remote heads +remoteheads= for remote do - git-rev-parse --verify "$remote"^0 >/dev/null || + remotehead=$(git-rev-parse --verify "$remote"^0) || die "$remote - not something we can merge" + remoteheads="${remoteheads}$remotehead " done +set x $remoteheads ; shift case "$#" in 1) @@ -208,6 +209,7 @@ case "$use_strategies" in esac result_tree= best_cnt=-1 best_strategy= wt_strategy= +merge_was_ok= for strategy in $use_strategies do test "$wt_strategy" = '' || { @@ -227,6 +229,7 @@ do exit=$? if test "$no_commit" = t && test "$exit" = 0 then + merge_was_ok=t exit=1 ;# pretend it left conflicts. fi @@ -273,7 +276,8 @@ fi case "$best_strategy" in '') restorestate - die "No merge strategy handled the merge." + echo >&2 "No merge strategy handled the merge." + exit 2 ;; "$wt_strategy") # We already have its result in the working tree. @@ -289,6 +293,25 @@ for remote do echo $remote done >"$GIT_DIR/MERGE_HEAD" -echo $merge_msg >"$GIT_DIR/MERGE_MSG" +echo "$merge_msg" >"$GIT_DIR/MERGE_MSG" -die "Automatic merge failed/prevented; fix up by hand" +if test "$merge_was_ok" = t +then + echo >&2 \ + "Automatic merge went well; stopped before committing as requested" + exit 0 +else + { + echo ' +Conflicts: +' + git ls-files --unmerged | + sed -e 's/^[^ ]* / /' | + uniq + } >>"$GIT_DIR/MERGE_MSG" + if test -d "$GIT_DIR/rr-cache" + then + git-rerere + fi + die "Automatic merge failed; fix up by hand" +fi