Code

diff: do not use configuration magic at the core-level
authorJunio C Hamano <junkio@cox.net>
Sat, 8 Jul 2006 08:05:16 +0000 (01:05 -0700)
committerJunio C Hamano <junkio@cox.net>
Sat, 8 Jul 2006 10:11:01 +0000 (03:11 -0700)
The Porcelainish has become so much usable as the UI that there
is not much reason people should be using the core programs by
hand anymore.  At this point we are better off making the
behaviour of the core programs predictable by keeping them
unaffected by the configuration variables.  Otherwise they will
become very hard to use as reliable building blocks.

For example, "git-commit -a" internally uses git-diff-files to
figure out the set of paths that need to be updated in the
index, and we should never allow diff.renames that happens to be
in the configuration to interfere (or slow down the process).

The UI level configuration such as showing renamed diff and
coloring are still honored by the Porcelainish ("git log" family
and "git diff"), but not by the core anymore.

Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-diff-files.c
builtin-diff-index.c
builtin-diff-stages.c
builtin-diff-tree.c
builtin-diff.c
builtin-log.c
diff.c
diff.h

index a655eea91ed5ac38af578e47fe6747a1b6fb968c..81ac2fe64aea23f9db605da181da098dcfca757a 100644 (file)
@@ -18,7 +18,7 @@ int cmd_diff_files(int argc, const char **argv, char **envp)
        struct rev_info rev;
        int silent = 0;
 
-       git_config(git_diff_config);
+       git_config(git_default_config); /* no "diff" UI options */
        init_revisions(&rev);
        rev.abbrev = 0;
 
index b37c9e8ccb30686810ecfdb898ad360b40ca0723..a1fa1b85cf741cd6b5f06afd02abbe618e86f5d1 100644 (file)
@@ -15,7 +15,7 @@ int cmd_diff_index(int argc, const char **argv, char **envp)
        int cached = 0;
        int i;
 
-       git_config(git_diff_config);
+       git_config(git_default_config); /* no "diff" UI options */
        init_revisions(&rev);
        rev.abbrev = 0;
 
index 30931fe0498753ed3a7f68be064027391a82e677..9c62702941569511a149eba89a8be2b478f04b70 100644 (file)
@@ -61,7 +61,7 @@ int cmd_diff_stages(int ac, const char **av, char **envp)
        const char *prefix = setup_git_directory();
        const char **pathspec = NULL;
 
-       git_config(git_diff_config);
+       git_config(git_default_config); /* no "diff" UI options */
        read_cache();
        diff_setup(&diff_options);
        while (1 < ac && av[1][0] == '-') {
index ae1cde9d005cb64ca2b1a5de45750abff04d444d..b6106685942e3cb3a5db2b3a67123b5bd554d856 100644 (file)
@@ -67,7 +67,7 @@ int cmd_diff_tree(int argc, const char **argv, char **envp)
        static struct rev_info *opt = &log_tree_opt;
        int read_stdin = 0;
 
-       git_config(git_diff_config);
+       git_config(git_default_config); /* no "diff" UI options */
        nr_sha1 = 0;
        init_revisions(opt);
        opt->abbrev = 0;
index d520c7ca294fcd8e619135bfe8932650d850724c..1df531ba28d596a8a8b338cae0c4295fc16892f2 100644 (file)
@@ -250,7 +250,7 @@ int cmd_diff(int argc, const char **argv, char **envp)
         * Other cases are errors.
         */
 
-       git_config(git_diff_config);
+       git_config(git_diff_ui_config);
        init_revisions(&rev);
 
        argc = setup_revisions(argc, argv, &rev, NULL);
index 698b71ecc8acb0e62b32ea6f1df6f1a4fc251058..dd5a5a2b14abcd225c96338994952c1b4c4dffdf 100644 (file)
@@ -47,7 +47,7 @@ int cmd_whatchanged(int argc, const char **argv, char **envp)
 {
        struct rev_info rev;
 
-       git_config(git_diff_config);
+       git_config(git_diff_ui_config);
        init_revisions(&rev);
        rev.diff = 1;
        rev.diffopt.recursive = 1;
@@ -62,7 +62,7 @@ int cmd_show(int argc, const char **argv, char **envp)
 {
        struct rev_info rev;
 
-       git_config(git_diff_config);
+       git_config(git_diff_ui_config);
        init_revisions(&rev);
        rev.diff = 1;
        rev.diffopt.recursive = 1;
@@ -79,7 +79,7 @@ int cmd_log(int argc, const char **argv, char **envp)
 {
        struct rev_info rev;
 
-       git_config(git_diff_config);
+       git_config(git_diff_ui_config);
        init_revisions(&rev);
        rev.always_show_header = 1;
        cmd_log_init(argc, argv, envp, &rev);
@@ -105,7 +105,7 @@ static int git_format_config(const char *var, const char *value)
                strcat(extra_headers, value);
                return 0;
        }
-       return git_diff_config(var, value);
+       return git_diff_ui_config(var, value);
 }
 
 
diff --git a/diff.c b/diff.c
index 1bf1ed096759cb99ec75cd35caaa8644418f0e02..493650cc0eccfcb91422f3e4ff7de766590ba22c 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -102,7 +102,13 @@ static const char *parse_diff_color_value(const char *value, const char *var)
        die("bad config value '%s' for variable '%s'", value, var);
 }
 
-int git_diff_config(const char *var, const char *value)
+/*
+ * These are to give UI layer defaults.
+ * The core-level commands such as git-diff-files should
+ * never be affected by the setting of diff.renames
+ * the user happens to have in the configuration file.
+ */
+int git_diff_ui_config(const char *var, const char *value)
 {
        if (!strcmp(var, "diff.renamelimit")) {
                diff_rename_limit_default = git_config_int(var, value);
diff --git a/diff.h b/diff.h
index 8ab0448a12e163b0941c05aba4f0a4d9c7a6cfb7..a06f959938d1313e45daa610a1f3eb71b4c3f835 100644 (file)
--- a/diff.h
+++ b/diff.h
@@ -123,7 +123,7 @@ extern int diff_scoreopt_parse(const char *opt);
 #define DIFF_SETUP_USE_CACHE           2
 #define DIFF_SETUP_USE_SIZE_CACHE      4
 
-extern int git_diff_config(const char *var, const char *value);
+extern int git_diff_ui_config(const char *var, const char *value);
 extern void diff_setup(struct diff_options *);
 extern int diff_opt_parse(struct diff_options *, const char **, int);
 extern int diff_setup_done(struct diff_options *);