mergetools: vimdiff: rework tab logic

If we treat tabs especially, the logic becomes much simpler. Cc: Fernando Ramos <greenfoo@u92.eu> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Reviewed-by: Fernando Ramos <greenfoo@u92.eu> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Felipe Contreras committed Aug 10, 2022 at 10:46 UTC ffcc33f6a6923ade435a65d6cba751b3b95e6fd8
1 file changed +22 -28
mergetools/vimdiff
+22 -28
@@ -66,11 +66,6 @@ gen_cmd_aux () {
66 debug_print "LAYOUT : $LAYOUT"
67 debug_print "CMD : $CMD"
68
69 - if test -z "$CMD"
70 - then
71 - CMD="echo" # vim "nop" operator
72 - fi
73 -
69 start=0
70 end=${#LAYOUT}
71
@@ -144,11 +139,10 @@ gen_cmd_aux () {
139
140 # Step 2:
141 #
147 - # Search for all valid separators ("+", "/" or ",") which are *not*
142 + # Search for all valid separators ("/" or ",") which are *not*
143 # inside parenthesis. Save the index at which each of them makes the
144 # first appearance.
145
151 - index_new_tab=""
146 index_horizontal_split=""
147 index_vertical_split=""
148
@@ -182,14 +176,7 @@ gen_cmd_aux () {
176 then
177 current=$c
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" = "/"
180 then
181 if test -z "$index_horizontal_split"
182 then
@@ -219,14 +206,7 @@ gen_cmd_aux () {
206
207 terminate="false"
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"
210 then
211 before="leftabove split"
212 after="wincmd j"
@@ -333,7 +313,21 @@ gen_cmd () {
313
314 # Obtain the first part of vim "-c" option to obtain the desired layout
315
336 - CMD=$(gen_cmd_aux "$LAYOUT")
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
327 +
328 + CMD=$(gen_cmd_aux "$tab" "$CMD")
329 + done
330 + IFS=$oldIFS
331
332
333 # Adjust the just obtained script depending on whether more than one
@@ -565,12 +559,12 @@ run_unit_tests () {
559 EXPECTED_CMD_08="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b | tabdo windo diffthis\" -c \"tabfirst\""
560 EXPECTED_CMD_09="-c \"set hidden diffopt-=hiddenoff | echo | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b | tabdo windo diffthis\" -c \"tabfirst\""
561 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 | tabdo windo diffthis\" -c \"tabfirst\""
568 - EXPECTED_CMD_11="-c \"set hidden diffopt-=hiddenoff | 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\""
562 + 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 | tabdo windo diffthis\" -c \"tabfirst\""
563 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 | tabdo windo diffthis\" -c \"tabfirst\""
564 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 | tabdo windo diffthis\" -c \"tabfirst\""
571 - EXPECTED_CMD_14="-c \"set hidden diffopt-=hiddenoff | 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 \"set hidden diffopt-=hiddenoff | 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 \"set hidden diffopt-=hiddenoff | 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\""
565 + EXPECTED_CMD_14="-c \"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 2b | wincmd l | 3b | tabnew | leftabove vertical split | 2b | wincmd l | 1b | tabdo windo diffthis\" -c \"tabfirst\""
566 + 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 | tabdo windo diffthis\" -c \"tabfirst\""
567 + 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 | tabdo windo diffthis\" -c \"tabfirst\""
568
569 EXPECTED_TARGET_01="MERGED"
570 EXPECTED_TARGET_02="LOCAL"