difftool --no-index: error out on --dir-diff (and don't crash)
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Wed, 8 May 2019 21:52:41 +0000 (14:52 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 9 May 2019 07:29:27 +0000 (16:29 +0900)
In `--no-index` mode, we now no longer require a worktree nor a
repository. But some code paths in `difftool` expect those to be
present.

The most notable such code path is the `--dir-diff` one: we use the
existing checkout machinery to copy the files, and that machinery looks
up replacement refs, looks at alternate ODBs, wants to use the worktree
path, etc.

Rather than running into segmentation faults, let's die with an
informative error message.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/difftool.c
index 4fff1e83f91747fb005b7faf022c4a1d504534cf..5704a76088df878eab6a4f5d0a7785989279e712 100644 (file)
@@ -735,7 +735,8 @@ int cmd_difftool(int argc, const char **argv, const char *prefix)
                setup_work_tree();
                setenv(GIT_DIR_ENVIRONMENT, absolute_path(get_git_dir()), 1);
                setenv(GIT_WORK_TREE_ENVIRONMENT, absolute_path(get_git_work_tree()), 1);
-       }
+       } else if (dir_diff)
+               die(_("--dir-diff is incompatible with --no-index"));
 
        if (use_gui_tool && diff_gui_tool && *diff_gui_tool)
                setenv("GIT_DIFF_TOOL", diff_gui_tool, 1);