Merge branch 'mb/diff-default-to-indent-heuristics'

Make the "indent" heuristics the default in "diff" and diff.indentHeuristics
configuration variable an escape hatch for those who do no want it.

* mb/diff-default-to-indent-heuristics:
  add--interactive: drop diff.indentHeuristic handling
  diff: enable indent heuristic by default
  diff: have the diff-* builtins configure diff before initializing revisions
  diff: make the indent heuristic part of diff's basic configuration
This commit is contained in:
Junio C Hamano 2017-06-05 09:18:10 +09:00
commit 53083f8547
7 changed files with 181 additions and 32 deletions

View File

@ -20,9 +20,9 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
int result;
unsigned options = 0;
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
init_revisions(&rev, prefix);
gitmodules_config();
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
rev.abbrev = 0;
precompose_argv(argc, argv);

View File

@ -17,9 +17,9 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)
int i;
int result;
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
init_revisions(&rev, prefix);
gitmodules_config();
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
rev.abbrev = 0;
precompose_argv(argc, argv);

View File

@ -105,9 +105,9 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
struct setup_revision_opt s_r_opt;
int read_stdin = 0;
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
init_revisions(opt, prefix);
gitmodules_config();
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
opt->abbrev = 0;
opt->diff = 1;
opt->disable_stdin = 1;

8
diff.c
View File

@ -27,7 +27,7 @@
#endif
static int diff_detect_rename_default;
static int diff_indent_heuristic; /* experimental */
static int diff_indent_heuristic = 1;
static int diff_rename_limit_default = 400;
static int diff_suppress_blank_empty;
static int diff_use_color_default = -1;
@ -290,9 +290,6 @@ int git_diff_ui_config(const char *var, const char *value, void *cb)
return 0;
}
if (git_diff_heuristic_config(var, value, cb) < 0)
return -1;
if (!strcmp(var, "diff.wserrorhighlight")) {
int val = parse_ws_error_highlight(value);
if (val < 0)
@ -351,6 +348,9 @@ int git_diff_basic_config(const char *var, const char *value, void *cb)
if (starts_with(var, "submodule."))
return parse_submodule_config_option(var, value);
if (git_diff_heuristic_config(var, value, cb) < 0)
return -1;
return git_default_config(var, value, cb);
}

View File

@ -46,7 +46,6 @@ my ($diff_new_color) =
my $normal_color = $repo->get_color("", "reset");
my $diff_algorithm = $repo->config('diff.algorithm');
my $diff_indent_heuristic = $repo->config_bool('diff.indentheuristic');
my $diff_filter = $repo->config('interactive.difffilter');
my $use_readkey = 0;
@ -730,9 +729,6 @@ sub parse_diff {
if (defined $diff_algorithm) {
splice @diff_cmd, 1, 0, "--diff-algorithm=${diff_algorithm}";
}
if ($diff_indent_heuristic) {
splice @diff_cmd, 1, 0, "--indent-heuristic";
}
if (defined $patch_mode_revision) {
push @diff_cmd, get_diff_reference($patch_mode_revision);
}

View File

@ -72,7 +72,8 @@ test_expect_success 'setup' '
# overlap function context of 1st change and -u context of 2nd change
grep -v "delete me from hello" <"$dir/hello.c" >file.c &&
sed 2p <"$dir/dummy.c" >>file.c &&
sed "2a\\
extra line" <"$dir/dummy.c" >>file.c &&
commit_and_tag changed_hello_dummy file.c &&
git checkout initial &&

View File

@ -152,26 +152,28 @@ test_expect_success 'prepare' '
EOF
'
# --- diff tests ----------------------------------------------------------
test_expect_success 'diff: ugly spaces' '
git diff old new -- spaces.txt >out &&
git diff --no-indent-heuristic old new -- spaces.txt >out &&
compare_diff spaces-expect out
'
test_expect_success 'diff: nice spaces with --indent-heuristic' '
git diff --indent-heuristic old new -- spaces.txt >out-compacted &&
compare_diff spaces-compacted-expect out-compacted
'
test_expect_success 'diff: nice spaces with diff.indentHeuristic' '
git -c diff.indentHeuristic=true diff old new -- spaces.txt >out-compacted2 &&
compare_diff spaces-compacted-expect out-compacted2
'
test_expect_success 'diff: --no-indent-heuristic overrides config' '
git -c diff.indentHeuristic=true diff --no-indent-heuristic old new -- spaces.txt >out2 &&
compare_diff spaces-expect out2
'
test_expect_success 'diff: nice spaces with --indent-heuristic' '
git -c diff.indentHeuristic=false diff --indent-heuristic old new -- spaces.txt >out-compacted &&
compare_diff spaces-compacted-expect out-compacted
'
test_expect_success 'diff: nice spaces with diff.indentHeuristic=true' '
git -c diff.indentHeuristic=true diff old new -- spaces.txt >out-compacted2 &&
compare_diff spaces-compacted-expect out-compacted2
'
test_expect_success 'diff: --indent-heuristic with --patience' '
git diff --indent-heuristic --patience old new -- spaces.txt >out-compacted3 &&
compare_diff spaces-compacted-expect out-compacted3
@ -183,7 +185,7 @@ test_expect_success 'diff: --indent-heuristic with --histogram' '
'
test_expect_success 'diff: ugly functions' '
git diff old new -- functions.c >out &&
git diff --no-indent-heuristic old new -- functions.c >out &&
compare_diff functions-expect out
'
@ -192,25 +194,175 @@ test_expect_success 'diff: nice functions with --indent-heuristic' '
compare_diff functions-compacted-expect out-compacted
'
test_expect_success 'blame: ugly spaces' '
git blame old..new -- spaces.txt >out-blame &&
compare_blame spaces-expect out-blame
'
# --- blame tests ---------------------------------------------------------
test_expect_success 'blame: nice spaces with --indent-heuristic' '
git blame --indent-heuristic old..new -- spaces.txt >out-blame-compacted &&
compare_blame spaces-compacted-expect out-blame-compacted
'
test_expect_success 'blame: nice spaces with diff.indentHeuristic' '
test_expect_success 'blame: nice spaces with diff.indentHeuristic=true' '
git -c diff.indentHeuristic=true blame old..new -- spaces.txt >out-blame-compacted2 &&
compare_blame spaces-compacted-expect out-blame-compacted2
'
test_expect_success 'blame: --no-indent-heuristic overrides config' '
git -c diff.indentHeuristic=true blame --no-indent-heuristic old..new -- spaces.txt >out-blame2 &&
git blame old..new -- spaces.txt >out-blame &&
test_expect_success 'blame: ugly spaces with --no-indent-heuristic' '
git blame --no-indent-heuristic old..new -- spaces.txt >out-blame &&
compare_blame spaces-expect out-blame
'
test_expect_success 'blame: ugly spaces with diff.indentHeuristic=false' '
git -c diff.indentHeuristic=false blame old..new -- spaces.txt >out-blame2 &&
compare_blame spaces-expect out-blame2
'
test_expect_success 'blame: --no-indent-heuristic overrides config' '
git -c diff.indentHeuristic=true blame --no-indent-heuristic old..new -- spaces.txt >out-blame3 &&
git blame old..new -- spaces.txt >out-blame &&
compare_blame spaces-expect out-blame3
'
test_expect_success 'blame: --indent-heuristic overrides config' '
git -c diff.indentHeuristic=false blame --indent-heuristic old..new -- spaces.txt >out-blame-compacted3 &&
compare_blame spaces-compacted-expect out-blame-compacted2
'
# --- diff-tree tests -----------------------------------------------------
test_expect_success 'diff-tree: nice spaces with --indent-heuristic' '
git diff-tree --indent-heuristic -p old new -- spaces.txt >out-diff-tree-compacted &&
compare_diff spaces-compacted-expect out-diff-tree-compacted
'
test_expect_success 'diff-tree: nice spaces with diff.indentHeuristic=true' '
git -c diff.indentHeuristic=true diff-tree -p old new -- spaces.txt >out-diff-tree-compacted2 &&
compare_diff spaces-compacted-expect out-diff-tree-compacted2
'
test_expect_success 'diff-tree: ugly spaces with --no-indent-heuristic' '
git diff-tree --no-indent-heuristic -p old new -- spaces.txt >out-diff-tree &&
compare_diff spaces-expect out-diff-tree
'
test_expect_success 'diff-tree: ugly spaces with diff.indentHeuristic=false' '
git -c diff.indentHeuristic=false diff-tree -p old new -- spaces.txt >out-diff-tree2 &&
compare_diff spaces-expect out-diff-tree2
'
test_expect_success 'diff-tree: --indent-heuristic overrides config' '
git -c diff.indentHeuristic=false diff-tree --indent-heuristic -p old new -- spaces.txt >out-diff-tree-compacted3 &&
compare_diff spaces-compacted-expect out-diff-tree-compacted3
'
test_expect_success 'diff-tree: --no-indent-heuristic overrides config' '
git -c diff.indentHeuristic=true diff-tree --no-indent-heuristic -p old new -- spaces.txt >out-diff-tree3 &&
compare_diff spaces-expect out-diff-tree3
'
# --- diff-index tests ----------------------------------------------------
test_expect_success 'diff-index: nice spaces with --indent-heuristic' '
git checkout -B diff-index &&
git reset --soft HEAD~ &&
git diff-index --indent-heuristic -p old -- spaces.txt >out-diff-index-compacted &&
compare_diff spaces-compacted-expect out-diff-index-compacted &&
git checkout -f master
'
test_expect_success 'diff-index: nice spaces with diff.indentHeuristic=true' '
git checkout -B diff-index &&
git reset --soft HEAD~ &&
git -c diff.indentHeuristic=true diff-index -p old -- spaces.txt >out-diff-index-compacted2 &&
compare_diff spaces-compacted-expect out-diff-index-compacted2 &&
git checkout -f master
'
test_expect_success 'diff-index: ugly spaces with --no-indent-heuristic' '
git checkout -B diff-index &&
git reset --soft HEAD~ &&
git diff-index --no-indent-heuristic -p old -- spaces.txt >out-diff-index &&
compare_diff spaces-expect out-diff-index &&
git checkout -f master
'
test_expect_success 'diff-index: ugly spaces with diff.indentHeuristic=false' '
git checkout -B diff-index &&
git reset --soft HEAD~ &&
git -c diff.indentHeuristic=false diff-index -p old -- spaces.txt >out-diff-index2 &&
compare_diff spaces-expect out-diff-index2 &&
git checkout -f master
'
test_expect_success 'diff-index: --indent-heuristic overrides config' '
git checkout -B diff-index &&
git reset --soft HEAD~ &&
git -c diff.indentHeuristic=false diff-index --indent-heuristic -p old -- spaces.txt >out-diff-index-compacted3 &&
compare_diff spaces-compacted-expect out-diff-index-compacted3 &&
git checkout -f master
'
test_expect_success 'diff-index: --no-indent-heuristic overrides config' '
git checkout -B diff-index &&
git reset --soft HEAD~ &&
git -c diff.indentHeuristic=true diff-index --no-indent-heuristic -p old -- spaces.txt >out-diff-index3 &&
compare_diff spaces-expect out-diff-index3 &&
git checkout -f master
'
# --- diff-files tests ----------------------------------------------------
test_expect_success 'diff-files: nice spaces with --indent-heuristic' '
git checkout -B diff-files &&
git reset HEAD~ &&
git diff-files --indent-heuristic -p spaces.txt >out-diff-files-raw &&
grep -v index out-diff-files-raw >out-diff-files-compacted &&
compare_diff spaces-compacted-expect out-diff-files-compacted &&
git checkout -f master
'
test_expect_success 'diff-files: nice spaces with diff.indentHeuristic=true' '
git checkout -B diff-files &&
git reset HEAD~ &&
git -c diff.indentHeuristic=true diff-files -p spaces.txt >out-diff-files-raw2 &&
grep -v index out-diff-files-raw2 >out-diff-files-compacted2 &&
compare_diff spaces-compacted-expect out-diff-files-compacted2 &&
git checkout -f master
'
test_expect_success 'diff-files: ugly spaces with --no-indent-heuristic' '
git checkout -B diff-files &&
git reset HEAD~ &&
git diff-files --no-indent-heuristic -p spaces.txt >out-diff-files-raw &&
grep -v index out-diff-files-raw >out-diff-files &&
compare_diff spaces-expect out-diff-files &&
git checkout -f master
'
test_expect_success 'diff-files: ugly spaces with diff.indentHeuristic=false' '
git checkout -B diff-files &&
git reset HEAD~ &&
git -c diff.indentHeuristic=false diff-files -p spaces.txt >out-diff-files-raw2 &&
grep -v index out-diff-files-raw2 >out-diff-files &&
compare_diff spaces-expect out-diff-files &&
git checkout -f master
'
test_expect_success 'diff-files: --indent-heuristic overrides config' '
git checkout -B diff-files &&
git reset HEAD~ &&
git -c diff.indentHeuristic=false diff-files --indent-heuristic -p spaces.txt >out-diff-files-raw3 &&
grep -v index out-diff-files-raw3 >out-diff-files-compacted &&
compare_diff spaces-compacted-expect out-diff-files-compacted &&
git checkout -f master
'
test_expect_success 'diff-files: --no-indent-heuristic overrides config' '
git checkout -B diff-files &&
git reset HEAD~ &&
git -c diff.indentHeuristic=true diff-files --no-indent-heuristic -p spaces.txt >out-diff-files-raw4 &&
grep -v index out-diff-files-raw4 >out-diff-files &&
compare_diff spaces-expect out-diff-files &&
git checkout -f master
'
test_done