Merge branch 'ew/diff'
authorJunio C Hamano <junkio@cox.net>
Mon, 10 Jul 2006 06:47:39 +0000 (23:47 -0700)
committerJunio C Hamano <junkio@cox.net>
Mon, 10 Jul 2006 06:47:39 +0000 (23:47 -0700)
* ew/diff:
templates/hooks--update: replace diffstat calls with git diff --stat
diff: do not use configuration magic at the core-level
Update diff-options and config documentation.
diff.c: --no-color to defeat diff.color configuration.
diff.c: respect diff.renames config option

1  2 
builtin-log.c
diff.c
diff --combined builtin-log.c
index 0aeeaa4e20ceaaad32707749b0aed03bd390c46a,dd5a5a2b14abcd225c96338994952c1b4c4dffdf..7e5cab15c106f59417804a25d094c94e78d64063
@@@ -47,7 -47,7 +47,7 @@@ int cmd_whatchanged(int argc, const cha
  {
        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 +62,7 @@@ int cmd_show(int argc, const char **arg
  {
        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 +79,7 @@@ int cmd_log(int argc, const char **argv
  {
        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,10 -105,7 +105,10 @@@ static int git_format_config(const cha
                strcat(extra_headers, value);
                return 0;
        }
-       return git_diff_config(var, value);
 +      if (!strcmp(var, "diff.color")) {
 +              return 0;
 +      }
+       return git_diff_ui_config(var, value);
  }
  
  
diff --combined diff.c
index a00f9d1e5244c8a7d2edfcef55cb92d3d3df252a,493650cc0eccfcb91422f3e4ff7de766590ba22c..e101bfd8c808e832a209d352d677e7d8a666a5ec
--- 1/diff.c
--- 2/diff.c
+++ b/diff.c
@@@ -13,6 -13,7 +13,7 @@@
  
  static int use_size_cache;
  
+ static int diff_detect_rename_default = 0;
  static int diff_rename_limit_default = -1;
  static int diff_use_color_default = 0;
  
@@@ -101,7 -102,13 +102,13 @@@ static const char *parse_diff_color_val
        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);
        if (!strcmp(var, "diff.color")) {
                if (!value)
                        diff_use_color_default = 1; /* bool */
 -              else if (!strcasecmp(value, "auto"))
 -                      diff_use_color_default = isatty(1);
 +              else if (!strcasecmp(value, "auto")) {
 +                      diff_use_color_default = 0;
 +                      if (isatty(1) || pager_in_use) {
 +                              char *term = getenv("TERM");
 +                              if (term && strcmp(term, "dumb"))
 +                                      diff_use_color_default = 1;
 +                      }
 +              }
                else if (!strcasecmp(value, "never"))
                        diff_use_color_default = 0;
                else if (!strcasecmp(value, "always"))
                        diff_use_color_default = git_config_bool(var, value);
                return 0;
        }
+       if (!strcmp(var, "diff.renames")) {
+               if (!value)
+                       diff_detect_rename_default = DIFF_DETECT_RENAME;
+               else if (!strcasecmp(value, "copies") ||
+                        !strcasecmp(value, "copy"))
+                       diff_detect_rename_default = DIFF_DETECT_COPY;
+               else if (git_config_bool(var,value))
+                       diff_detect_rename_default = DIFF_DETECT_RENAME;
+               return 0;
+       }
        if (!strncmp(var, "diff.color.", 11)) {
                int slot = parse_diff_color_slot(var, 11);
                diff_colors[slot] = parse_diff_color_value(value, var);
@@@ -1437,6 -1448,7 +1454,7 @@@ void diff_setup(struct diff_options *op
        options->change = diff_change;
        options->add_remove = diff_addremove;
        options->color_diff = diff_use_color_default;
+       options->detect_rename = diff_detect_rename_default;
  }
  
  int diff_setup_done(struct diff_options *options)
@@@ -1619,10 -1631,14 +1637,14 @@@ int diff_opt_parse(struct diff_options 
        }
        else if (!strcmp(arg, "--color"))
                options->color_diff = 1;
+       else if (!strcmp(arg, "--no-color"))
+               options->color_diff = 0;
        else if (!strcmp(arg, "-w") || !strcmp(arg, "--ignore-all-space"))
                options->xdl_opts |= XDF_IGNORE_WHITESPACE;
        else if (!strcmp(arg, "-b") || !strcmp(arg, "--ignore-space-change"))
                options->xdl_opts |= XDF_IGNORE_WHITESPACE_CHANGE;
+       else if (!strcmp(arg, "--no-renames"))
+               options->detect_rename = 0;
        else
                return 0;
        return 1;