]> git.ipfire.org Git - thirdparty/git.git/blobdiff - mergetools/vimdiff
mergetool(vimdiff): allow paths to contain spaces again
[thirdparty/git.git] / mergetools / vimdiff
index 461a89b6f987972c6447a1e6d8df074aedddf814..f7e7f2702857d0908b4ca278acf2474d77942b74 100644 (file)
@@ -414,8 +414,8 @@ merge_cmd () {
 
        if $base_present
        then
-               eval "$merge_tool_path" \
-                       -f "$FINAL_CMD" "$LOCAL" "$BASE" "$REMOTE" "$MERGED"
+               eval '"$merge_tool_path"' \
+                       -f "$FINAL_CMD" '"$LOCAL"' '"$BASE"' '"$REMOTE"' '"$MERGED"'
        else
                # If there is no BASE (example: a merge conflict in a new file
                # with the same name created in both braches which didn't exist
@@ -424,8 +424,8 @@ merge_cmd () {
                FINAL_CMD=$(echo "$FINAL_CMD" | \
                        sed -e 's:2b:quit:g' -e 's:3b:2b:g' -e 's:4b:3b:g')
 
-               eval "$merge_tool_path" \
-                       -f "$FINAL_CMD" "$LOCAL" "$REMOTE" "$MERGED"
+               eval '"$merge_tool_path"' \
+                       -f "$FINAL_CMD" '"$LOCAL"' '"$REMOTE"' '"$MERGED"'
        fi
 
        ret="$?"
@@ -614,6 +614,37 @@ run_unit_tests () {
                fi
        done
 
+       # verify that `merge_cmd` handles paths with spaces
+       record_parameters () {
+               >actual
+               for arg
+               do
+                       echo "$arg" >>actual
+               done
+       }
+
+       base_present=false
+       LOCAL='lo cal'
+       BASE='ba se'
+       REMOTE="' '"
+       MERGED='mer ged'
+       merge_tool_path=record_parameters
+
+       merge_cmd vimdiff || at_least_one_ko=true
+
+       cat >expect <<-\EOF
+       -f
+       -c
+       echo | split | vertical split | 1b | wincmd l | vertical split | quit | wincmd l | 2b | wincmd j | 3b | tabdo windo diffthis
+       -c
+       tabfirst
+       lo cal
+       ' '
+       mer ged
+       EOF
+
+       diff -u expect actual || at_least_one_ko=true
+
        if test "$at_least_one_ko" = "true"
        then
                return 255