{"thread":{"id":"60036","subject":"[PATCH] mergetool: set diff flag for vimdiff","startedAt":"2023-07-28T08:23:32Z","lastAt":"2023-07-28T08:23:32Z","messageCount":1,"participants":["Jeongho Lee via GitGitGadget"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"479961","messageId":"pull.1559.git.1690532502648.gitgitgadget@gmail.com","threadId":"60036","inReplyTo":null,"subject":"[PATCH] mergetool: set diff flag for vimdiff","fromName":"Jeongho Lee via GitGitGadget","fromEmail":"gitgitgadget@gmail.com","sentAt":"2023-07-28T08:21:42Z","receivedAt":"2023-07-28T08:23:32Z","isPatch":true,"sender":{"key":"name:Jeongho Lee","avatar":null},"body":"From: Jeongho Lee <bivoje49@gmail.com>\n\nThe 'diff' flag is set when invoking vim with the '-d' option or as\n'vimdiff'. However, the flag is not set before processing the .vimrc\nfile when vim is invoked via `git mergetool` since some point. This\ncan cause issues if the user has configurations in their vimrc that\ndepend on the 'diff' flag.\n\nWhen using `git mergetool` for vimdiff, git generates commandline\nparameters using the gen_cmd function in the mergetool/vimdiff script.\nCommit 0041797449 removes the '-d' flag from the generated command.\nSimply adding the flag back would ruin the layout, as the '-d' option\nalso tries to generate window layouts apart from the custom layout\ncommands of git.\n\nThe 'diff' flag is eventually set when 'diffthis' in git's layout\ncommand is run. Unfortunately, these layout commands are specified with\n'-c', which gets executed after the vimrc file processing. We can use\nthe '--cmd' option instead to make them execute before the vimrc, a\nfeature provided since vim-6-0ah. However, constructing the layout\nbefore vimrc might change the behavior. So, I added '--cmd' only to turn\nthe 'diff' flag on.\n\nSigned-off-by: Jeongho Lee <bivoje49@gmail.com>\n---\n    mergetool: set diff flag for vimdiff\n\nPublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-1559%2Fbivoje%2Fvimdiff-flag-v1\nFetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1559/bivoje/vimdiff-flag-v1\nPull-Request: https://github.com/gitgitgadget/git/pull/1559\n\n mergetools/vimdiff | 36 +++++++++++++++++++-----------------\n 1 file changed, 19 insertions(+), 17 deletions(-)\n\ndiff --git a/mergetools/vimdiff b/mergetools/vimdiff\nindex 06937acbf54..cefe74f9604 100644\n--- a/mergetools/vimdiff\n+++ b/mergetools/vimdiff\n@@ -337,7 +337,7 @@ gen_cmd () {\n \n \tCMD=\"$CMD | execute 'tabdo windo diffthis'\"\n \n-\tFINAL_CMD=\"-c \\\"set hidden diffopt-=hiddenoff | $CMD | tabfirst\\\"\"\n+\tFINAL_CMD=\"--cmd 'set diff' -c \\\"set hidden diffopt-=hiddenoff | $CMD | tabfirst\\\"\"\n }\n \n \n@@ -541,22 +541,22 @@ run_unit_tests () {\n \tTEST_CASE_15=\"  ((  (LOCAL , BASE , REMOTE) / MERGED))   +(BASE)   , LOCAL+ BASE , REMOTE+ (((LOCAL / BASE / REMOTE)) ,    MERGED   )  \"\n \tTEST_CASE_16=\"LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL / BASE / REMOTE),MERGED\"\n \n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_CMD_02=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 1b | wincmd l | 3b | execute 'tabdo windo diffthis' | tabfirst\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_CMD_04=\"-c \\\"set hidden diffopt-=hiddenoff | echo | silent execute 'bufdo diffthis' | 4b | execute 'tabdo windo diffthis' | tabfirst\\\"\"\n-\tEXPECTED_CMD_05=\"-c \\\"set hidden diffopt-=hiddenoff | echo | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b | execute 'tabdo windo diffthis' | tabfirst\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n-\tEXPECTED_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\\\"\"\n+\tEXPECTED_CMD_01=\"--cmd 'set diff' -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\\\"\"\n+\tEXPECTED_CMD_02=\"--cmd 'set diff' -c \\\"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 1b | wincmd l | 3b | execute 'tabdo windo diffthis' | tabfirst\\\"\"\n+\tEXPECTED_CMD_03=\"--cmd 'set diff' -c \\\"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 1b | wincmd l | leftabove vertical split | 4b | wincmd l | 3b | execute 'tabdo windo diffthis' | tabfirst\\\"\"\n+\tEXPECTED_CMD_04=\"--cmd 'set diff' -c \\\"set hidden diffopt-=hiddenoff | echo | silent execute 'bufdo diffthis' | 4b | execute 'tabdo windo diffthis' | tabfirst\\\"\"\n+\tEXPECTED_CMD_05=\"--cmd 'set diff' -c \\\"set hidden diffopt-=hiddenoff | echo | leftabove split | 1b | wincmd j | leftabove split | 4b | wincmd j | 3b | execute 'tabdo windo diffthis' | tabfirst\\\"\"\n+\tEXPECTED_CMD_06=\"--cmd 'set diff' -c \\\"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | leftabove split | 1b | wincmd j | 3b | wincmd l | 4b | execute 'tabdo windo diffthis' | tabfirst\\\"\"\n+\tEXPECTED_CMD_07=\"--cmd 'set diff' -c \\\"set hidden diffopt-=hiddenoff | echo | leftabove vertical split | 4b | wincmd l | leftabove split | 1b | wincmd j | 3b | execute 'tabdo windo diffthis' | tabfirst\\\"\"\n+\tEXPECTED_CMD_08=\"--cmd 'set diff' -c \\\"set hidden diffopt-=hiddenoff | echo | leftabove split | leftabove vertical split | 1b | wincmd l | 3b | wincmd j | 4b | execute 'tabdo windo diffthis' | tabfirst\\\"\"\n+\tEXPECTED_CMD_09=\"--cmd 'set diff' -c \\\"set hidden diffopt-=hiddenoff | echo | leftabove split | 4b | wincmd j | leftabove vertical split | 1b | wincmd l | 3b | execute 'tabdo windo diffthis' | tabfirst\\\"\"\n+\tEXPECTED_CMD_10=\"--cmd 'set diff' -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\\\"\"\n+\tEXPECTED_CMD_11=\"--cmd 'set diff' -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\\\"\"\n+\tEXPECTED_CMD_12=\"--cmd 'set diff' -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\\\"\"\n+\tEXPECTED_CMD_13=\"--cmd 'set diff' -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\\\"\"\n+\tEXPECTED_CMD_14=\"--cmd 'set diff' -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\\\"\"\n+\tEXPECTED_CMD_15=\"--cmd 'set diff' -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\\\"\"\n+\tEXPECTED_CMD_16=\"--cmd 'set diff' -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\\\"\"\n \n \tEXPECTED_TARGET_01=\"MERGED\"\n \tEXPECTED_TARGET_02=\"LOCAL\"\n@@ -620,6 +620,8 @@ run_unit_tests () {\n \n \tcat >expect <<-\\EOF\n \t-f\n+\t--cmd\n+\tset diff\n \t-c\n \tset 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\n \tlo cal\n\nbase-commit: fb7d80edcae482f4fa5d4be0227dc3054734e5f3\n-- \ngitgitgadget\n"}]}