Add initial support for many promisor remotes
[gitweb.git] / builtin / difftool.c
index 4fff1e83f91747fb005b7faf022c4a1d504534cf..16eb8b70ea33eb00516d7ab035a90df9728d5296 100644 (file)
@@ -24,7 +24,6 @@
 #include "object-store.h"
 #include "dir.h"
 
-static char *diff_gui_tool;
 static int trust_exit_code;
 
 static const char *const builtin_difftool_usage[] = {
@@ -34,11 +33,6 @@ static const char *const builtin_difftool_usage[] = {
 
 static int difftool_config(const char *var, const char *value, void *cb)
 {
-       if (!strcmp(var, "diff.guitool")) {
-               diff_gui_tool = xstrdup(value);
-               return 0;
-       }
-
        if (!strcmp(var, "difftool.trustexitcode")) {
                trust_exit_code = git_config_bool(var, value);
                return 0;
@@ -65,14 +59,12 @@ static int parse_index_info(char *p, int *mode1, int *mode2,
        *mode2 = (int)strtol(p + 1, &p, 8);
        if (*p != ' ')
                return error("expected ' ', got '%c'", *p);
-       if (get_oid_hex(++p, oid1))
-               return error("expected object ID, got '%s'", p + 1);
-       p += GIT_SHA1_HEXSZ;
+       if (parse_oid_hex(++p, oid1, (const char **)&p))
+               return error("expected object ID, got '%s'", p);
        if (*p != ' ')
                return error("expected ' ', got '%c'", *p);
-       if (get_oid_hex(++p, oid2))
-               return error("expected object ID, got '%s'", p + 1);
-       p += GIT_SHA1_HEXSZ;
+       if (parse_oid_hex(++p, oid2, (const char **)&p))
+               return error("expected object ID, got '%s'", p);
        if (*p != ' ')
                return error("expected ' ', got '%c'", *p);
        *status = *++p;
@@ -735,10 +727,14 @@ 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 + !!difftool_cmd + !!extcmd > 1)
+               die(_("--gui, --tool and --extcmd are mutually exclusive"));
 
-       if (use_gui_tool && diff_gui_tool && *diff_gui_tool)
-               setenv("GIT_DIFF_TOOL", diff_gui_tool, 1);
+       if (use_gui_tool)
+               setenv("GIT_MERGETOOL_GUI", "true", 1);
        else if (difftool_cmd) {
                if (*difftool_cmd)
                        setenv("GIT_DIFF_TOOL", difftool_cmd, 1);