diff options
-rwxr-xr-x | git-mergetool.sh | 180 |
1 files changed, 93 insertions, 87 deletions
diff --git a/git-mergetool.sh b/git-mergetool.sh index 300ce7f675..b2cd0a497b 100755 --- a/git-mergetool.sh +++ b/git-mergetool.sh @@ -366,51 +366,6 @@ merge_file () { return 0 } -prompt=$(git config --bool mergetool.prompt) -guessed_merge_tool=false - -while test $# != 0 -do - case "$1" in - --tool-help=*) - TOOL_MODE=${1#--tool-help=} - show_tool_help - ;; - --tool-help) - show_tool_help - ;; - -t|--tool*) - case "$#,$1" in - *,*=*) - merge_tool=$(expr "z$1" : 'z-[^=]*=\(.*\)') - ;; - 1,*) - usage ;; - *) - merge_tool="$2" - shift ;; - esac - ;; - -y|--no-prompt) - prompt=false - ;; - --prompt) - prompt=true - ;; - --) - shift - break - ;; - -*) - usage - ;; - *) - break - ;; - esac - shift -done - prompt_after_failed_merge () { while true do @@ -427,57 +382,108 @@ prompt_after_failed_merge () { done } -git_dir_init -require_work_tree +main () { + prompt=$(git config --bool mergetool.prompt) + guessed_merge_tool=false + + while test $# != 0 + do + case "$1" in + --tool-help=*) + TOOL_MODE=${1#--tool-help=} + show_tool_help + ;; + --tool-help) + show_tool_help + ;; + -t|--tool*) + case "$#,$1" in + *,*=*) + merge_tool=$(expr "z$1" : 'z-[^=]*=\(.*\)') + ;; + 1,*) + usage ;; + *) + merge_tool="$2" + shift ;; + esac + ;; + -y|--no-prompt) + prompt=false + ;; + --prompt) + prompt=true + ;; + --) + shift + break + ;; + -*) + usage + ;; + *) + break + ;; + esac + shift + done + + git_dir_init + require_work_tree -if test -z "$merge_tool" -then - # Check if a merge tool has been configured - merge_tool=$(get_configured_merge_tool) - # Try to guess an appropriate merge tool if no tool has been set. if test -z "$merge_tool" then - merge_tool=$(guess_merge_tool) || exit - guessed_merge_tool=true + # Check if a merge tool has been configured + merge_tool=$(get_configured_merge_tool) + # Try to guess an appropriate merge tool if no tool has been set. + if test -z "$merge_tool" + then + merge_tool=$(guess_merge_tool) || exit + guessed_merge_tool=true + fi fi -fi -merge_keep_backup="$(git config --bool mergetool.keepBackup || echo true)" -merge_keep_temporaries="$(git config --bool mergetool.keepTemporaries || echo false)" - -files= + merge_keep_backup="$(git config --bool mergetool.keepBackup || echo true)" + merge_keep_temporaries="$(git config --bool mergetool.keepTemporaries || echo false)" -if test $# -eq 0 -then - cd_to_toplevel + files= - if test -e "$GIT_DIR/MERGE_RR" + if test $# -eq 0 then - files=$(git rerere remaining) + cd_to_toplevel + + if test -e "$GIT_DIR/MERGE_RR" + then + files=$(git rerere remaining) + else + files=$(git ls-files -u | + sed -e 's/^[^ ]* //' | sort -u) + fi else - files=$(git ls-files -u | sed -e 's/^[^ ]* //' | sort -u) + files=$(git ls-files -u -- "$@" | + sed -e 's/^[^ ]* //' | sort -u) fi -else - files=$(git ls-files -u -- "$@" | sed -e 's/^[^ ]* //' | sort -u) -fi - -if test -z "$files" -then - echo "No files need merging" - exit 0 -fi - -printf "Merging:\n" -printf "%s\n" "$files" - -rc=0 -for i in $files -do - printf "\n" - if ! merge_file "$i" + + if test -z "$files" then - rc=1 - prompt_after_failed_merge || exit 1 + echo "No files need merging" + exit 0 fi -done -exit $rc + printf "Merging:\n" + printf "%s\n" "$files" + + rc=0 + for i in $files + do + printf "\n" + if ! merge_file "$i" + then + rc=1 + prompt_after_failed_merge || exit 1 + fi + done + + exit $rc +} + +main "$@" |