|
29 | 29 | ################################################################################ |
30 | 30 |
|
31 | 31 | debug_print () { |
32 | | - # Send message to stderr if global variable GIT_MERGETOOL_VIMDIFF is set |
33 | | - # to "true" |
| 32 | + # Send message to stderr if global variable GIT_MERGETOOL_VIMDIFF_DEBUG |
| 33 | + # is set. |
34 | 34 |
|
35 | 35 | if test -n "$GIT_MERGETOOL_VIMDIFF_DEBUG" |
36 | 36 | then |
@@ -66,11 +66,6 @@ gen_cmd_aux () { |
66 | 66 | debug_print "LAYOUT : $LAYOUT" |
67 | 67 | debug_print "CMD : $CMD" |
68 | 68 |
|
69 | | - if test -z "$CMD" |
70 | | - then |
71 | | - CMD="echo" # vim "nop" operator |
72 | | - fi |
73 | | - |
74 | 69 | start=0 |
75 | 70 | end=${#LAYOUT} |
76 | 71 |
|
@@ -144,11 +139,10 @@ gen_cmd_aux () { |
144 | 139 |
|
145 | 140 | # Step 2: |
146 | 141 | # |
147 | | - # Search for all valid separators ("+", "/" or ",") which are *not* |
| 142 | + # Search for all valid separators ("/" or ",") which are *not* |
148 | 143 | # inside parenthesis. Save the index at which each of them makes the |
149 | 144 | # first appearance. |
150 | 145 |
|
151 | | - index_new_tab="" |
152 | 146 | index_horizontal_split="" |
153 | 147 | index_vertical_split="" |
154 | 148 |
|
@@ -182,14 +176,7 @@ gen_cmd_aux () { |
182 | 176 | then |
183 | 177 | current=$c |
184 | 178 |
|
185 | | - if test "$current" = "+" |
186 | | - then |
187 | | - if test -z "$index_new_tab" |
188 | | - then |
189 | | - index_new_tab=$i |
190 | | - fi |
191 | | - |
192 | | - elif test "$current" = "/" |
| 179 | + if test "$current" = "/" |
193 | 180 | then |
194 | 181 | if test -z "$index_horizontal_split" |
195 | 182 | then |
@@ -219,14 +206,7 @@ gen_cmd_aux () { |
219 | 206 |
|
220 | 207 | terminate="false" |
221 | 208 |
|
222 | | - if ! test -z "$index_new_tab" |
223 | | - then |
224 | | - before="-tabnew" |
225 | | - after="tabnext" |
226 | | - index=$index_new_tab |
227 | | - terminate="true" |
228 | | - |
229 | | - elif ! test -z "$index_horizontal_split" |
| 209 | + if ! test -z "$index_horizontal_split" |
230 | 210 | then |
231 | 211 | before="leftabove split" |
232 | 212 | after="wincmd j" |
@@ -333,25 +313,31 @@ gen_cmd () { |
333 | 313 |
|
334 | 314 | # Obtain the first part of vim "-c" option to obtain the desired layout |
335 | 315 |
|
336 | | - CMD=$(gen_cmd_aux "$LAYOUT") |
337 | | - |
338 | | - |
339 | | - # Adjust the just obtained script depending on whether more than one |
340 | | - # windows are visible or not |
| 316 | + CMD= |
| 317 | + oldIFS=$IFS |
| 318 | + IFS=+ |
| 319 | + for tab in $LAYOUT |
| 320 | + do |
| 321 | + if test -z "$CMD" |
| 322 | + then |
| 323 | + CMD="echo" # vim "nop" operator |
| 324 | + else |
| 325 | + CMD="$CMD | tabnew" |
| 326 | + fi |
341 | 327 |
|
342 | | - if echo "$LAYOUT" | grep ",\|/" >/dev/null |
343 | | - then |
344 | | - CMD="$CMD | tabdo windo diffthis" |
345 | | - else |
346 | | - CMD="$CMD | bufdo diffthis" |
347 | | - fi |
| 328 | + # If this is a single window diff with all the buffers |
| 329 | + if ! echo "$tab" | grep ",\|/" >/dev/null |
| 330 | + then |
| 331 | + CMD="$CMD | silent execute 'bufdo diffthis'" |
| 332 | + fi |
348 | 333 |
|
| 334 | + CMD=$(gen_cmd_aux "$tab" "$CMD") |
| 335 | + done |
| 336 | + IFS=$oldIFS |
349 | 337 |
|
350 | | - # Add an extra "-c" option to move to the first tab (notice that we |
351 | | - # can't simply append the command to the previous "-c" string as |
352 | | - # explained here: https://github.com/vim/vim/issues/9076 |
| 338 | + CMD="$CMD | execute 'tabdo windo diffthis'" |
353 | 339 |
|
354 | | - FINAL_CMD="-c \"$CMD\" -c \"tabfirst\"" |
| 340 | + FINAL_CMD="-c \"set hidden diffopt-=hiddenoff | $CMD | tabfirst\"" |
355 | 341 | } |
356 | 342 |
|
357 | 343 |
|
@@ -555,22 +541,22 @@ run_unit_tests () { |
555 | 541 | TEST_CASE_15=" (( (LOCAL , BASE , REMOTE) / MERGED)) +(BASE) , LOCAL+ BASE , REMOTE+ (((LOCAL / BASE / REMOTE)) , MERGED ) " |
556 | 542 | TEST_CASE_16="LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL / BASE / REMOTE),MERGED" |
557 | 543 |
|
558 | | - EXPECTED_CMD_01="-c \"echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
559 | | - EXPECTED_CMD_02="-c \"echo | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\"" |
560 | | - EXPECTED_CMD_03="-c \"echo | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 4b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\"" |
561 | | - EXPECTED_CMD_04="-c \"echo | 4b | bufdo diffthis\" -c \"tabfirst\"" |
562 | | - EXPECTED_CMD_05="-c \"echo | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b | tabdo windo diffthis\" -c \"tabfirst\"" |
563 | | - EXPECTED_CMD_06="-c \"echo | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
564 | | - EXPECTED_CMD_07="-c \"echo | leftabove vertical split | 4b | wincmd l | leftabove split | 1b | wincmd j | 3b | tabdo windo diffthis\" -c \"tabfirst\"" |
565 | | - EXPECTED_CMD_08="-c \"echo | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
566 | | - EXPECTED_CMD_09="-c \"echo | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\"" |
567 | | - EXPECTED_CMD_10="-c \"echo | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
568 | | - EXPECTED_CMD_11="-c \"echo | -tabnew | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnext | -tabnew | leftabove vertical split | 2b | wincmd l | 1b | tabnext | -tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnext | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
569 | | - EXPECTED_CMD_12="-c \"echo | leftabove vertical split | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 2b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
570 | | - EXPECTED_CMD_13="-c \"echo | leftabove vertical split | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 2b | wincmd l | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
571 | | - EXPECTED_CMD_14="-c \"echo | -tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnext | leftabove vertical split | 2b | wincmd l | 1b | tabdo windo diffthis\" -c \"tabfirst\"" |
572 | | - EXPECTED_CMD_15="-c \"echo | -tabnew | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnext | -tabnew | leftabove vertical split | 2b | wincmd l | 1b | tabnext | -tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnext | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
573 | | - EXPECTED_CMD_16="-c \"echo | -tabnew | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnext | -tabnew | leftabove vertical split | 2b | wincmd l | 1b | tabnext | -tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnext | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | tabdo windo diffthis\" -c \"tabfirst\"" |
| 544 | + EXPECTED_CMD_01="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 545 | + EXPECTED_CMD_02="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 1b | wincmd l | 3b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 546 | + EXPECTED_CMD_03="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 4b | wincmd l | 3b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 547 | + EXPECTED_CMD_04="-c \"set hidden diffopt-=hiddenoff | echo | silent execute 'bufdo diffthis' | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 548 | + EXPECTED_CMD_05="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 549 | + EXPECTED_CMD_06="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 550 | + EXPECTED_CMD_07="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 4b | wincmd l | leftabove split | 1b | wincmd j | 3b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 551 | + EXPECTED_CMD_08="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 552 | + EXPECTED_CMD_09="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 553 | + EXPECTED_CMD_10="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 554 | + EXPECTED_CMD_11="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnew | leftabove vertical split | 2b | wincmd l | 1b | tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnew | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 555 | + EXPECTED_CMD_12="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 2b | wincmd l | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 556 | + EXPECTED_CMD_13="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 2b | wincmd l | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 557 | + EXPECTED_CMD_14="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 2b | wincmd l | 3b | tabnew | leftabove vertical split | 2b | wincmd l | 1b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 558 | + EXPECTED_CMD_15="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnew | leftabove vertical split | 2b | wincmd l | 1b | tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnew | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
| 559 | + EXPECTED_CMD_16="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 2b | wincmd l | 3b | wincmd j | 4b | tabnew | leftabove vertical split | 2b | wincmd l | 1b | tabnew | leftabove vertical split | 2b | wincmd l | 3b | tabnew | leftabove vertical split | leftabove split | 1b | wincmd j | leftabove split | 2b | wincmd j | 3b | wincmd l | 4b | execute 'tabdo windo diffthis' | tabfirst\"" |
574 | 560 |
|
575 | 561 | EXPECTED_TARGET_01="MERGED" |
576 | 562 | EXPECTED_TARGET_02="LOCAL" |
@@ -635,9 +621,7 @@ run_unit_tests () { |
635 | 621 | cat >expect <<-\EOF |
636 | 622 | -f |
637 | 623 | -c |
638 | | - echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | quit | wincmd l | 2b | wincmd j | 3b | tabdo windo diffthis |
639 | | - -c |
640 | | - tabfirst |
| 624 | + set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | leftabove vertical split | quit | wincmd l | 2b | wincmd j | 3b | execute 'tabdo windo diffthis' | tabfirst |
641 | 625 | lo cal |
642 | 626 | ' ' |
643 | 627 | mer ged |
|
0 commit comments