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:
@ -20,9 +20,9 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
|
|||||||
int result;
|
int result;
|
||||||
unsigned options = 0;
|
unsigned options = 0;
|
||||||
|
|
||||||
|
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
|
||||||
init_revisions(&rev, prefix);
|
init_revisions(&rev, prefix);
|
||||||
gitmodules_config();
|
gitmodules_config();
|
||||||
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
|
|
||||||
rev.abbrev = 0;
|
rev.abbrev = 0;
|
||||||
precompose_argv(argc, argv);
|
precompose_argv(argc, argv);
|
||||||
|
|
||||||
|
@ -17,9 +17,9 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)
|
|||||||
int i;
|
int i;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
|
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
|
||||||
init_revisions(&rev, prefix);
|
init_revisions(&rev, prefix);
|
||||||
gitmodules_config();
|
gitmodules_config();
|
||||||
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
|
|
||||||
rev.abbrev = 0;
|
rev.abbrev = 0;
|
||||||
precompose_argv(argc, argv);
|
precompose_argv(argc, argv);
|
||||||
|
|
||||||
|
@ -105,9 +105,9 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix)
|
|||||||
struct setup_revision_opt s_r_opt;
|
struct setup_revision_opt s_r_opt;
|
||||||
int read_stdin = 0;
|
int read_stdin = 0;
|
||||||
|
|
||||||
|
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
|
||||||
init_revisions(opt, prefix);
|
init_revisions(opt, prefix);
|
||||||
gitmodules_config();
|
gitmodules_config();
|
||||||
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
|
|
||||||
opt->abbrev = 0;
|
opt->abbrev = 0;
|
||||||
opt->diff = 1;
|
opt->diff = 1;
|
||||||
opt->disable_stdin = 1;
|
opt->disable_stdin = 1;
|
||||||
|
8
diff.c
8
diff.c
@ -27,7 +27,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int diff_detect_rename_default;
|
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_rename_limit_default = 400;
|
||||||
static int diff_suppress_blank_empty;
|
static int diff_suppress_blank_empty;
|
||||||
static int diff_use_color_default = -1;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (git_diff_heuristic_config(var, value, cb) < 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (!strcmp(var, "diff.wserrorhighlight")) {
|
if (!strcmp(var, "diff.wserrorhighlight")) {
|
||||||
int val = parse_ws_error_highlight(value);
|
int val = parse_ws_error_highlight(value);
|
||||||
if (val < 0)
|
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."))
|
if (starts_with(var, "submodule."))
|
||||||
return parse_submodule_config_option(var, value);
|
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);
|
return git_default_config(var, value, cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,7 +46,6 @@ my ($diff_new_color) =
|
|||||||
my $normal_color = $repo->get_color("", "reset");
|
my $normal_color = $repo->get_color("", "reset");
|
||||||
|
|
||||||
my $diff_algorithm = $repo->config('diff.algorithm');
|
my $diff_algorithm = $repo->config('diff.algorithm');
|
||||||
my $diff_indent_heuristic = $repo->config_bool('diff.indentheuristic');
|
|
||||||
my $diff_filter = $repo->config('interactive.difffilter');
|
my $diff_filter = $repo->config('interactive.difffilter');
|
||||||
|
|
||||||
my $use_readkey = 0;
|
my $use_readkey = 0;
|
||||||
@ -730,9 +729,6 @@ sub parse_diff {
|
|||||||
if (defined $diff_algorithm) {
|
if (defined $diff_algorithm) {
|
||||||
splice @diff_cmd, 1, 0, "--diff-algorithm=${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) {
|
if (defined $patch_mode_revision) {
|
||||||
push @diff_cmd, get_diff_reference($patch_mode_revision);
|
push @diff_cmd, get_diff_reference($patch_mode_revision);
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,8 @@ test_expect_success 'setup' '
|
|||||||
|
|
||||||
# overlap function context of 1st change and -u context of 2nd change
|
# overlap function context of 1st change and -u context of 2nd change
|
||||||
grep -v "delete me from hello" <"$dir/hello.c" >file.c &&
|
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 &&
|
commit_and_tag changed_hello_dummy file.c &&
|
||||||
|
|
||||||
git checkout initial &&
|
git checkout initial &&
|
||||||
|
@ -152,26 +152,28 @@ test_expect_success 'prepare' '
|
|||||||
EOF
|
EOF
|
||||||
'
|
'
|
||||||
|
|
||||||
|
# --- diff tests ----------------------------------------------------------
|
||||||
|
|
||||||
test_expect_success 'diff: ugly spaces' '
|
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
|
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' '
|
test_expect_success 'diff: --no-indent-heuristic overrides config' '
|
||||||
git -c diff.indentHeuristic=true diff --no-indent-heuristic old new -- spaces.txt >out2 &&
|
git -c diff.indentHeuristic=true diff --no-indent-heuristic old new -- spaces.txt >out2 &&
|
||||||
compare_diff spaces-expect 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' '
|
test_expect_success 'diff: --indent-heuristic with --patience' '
|
||||||
git diff --indent-heuristic --patience old new -- spaces.txt >out-compacted3 &&
|
git diff --indent-heuristic --patience old new -- spaces.txt >out-compacted3 &&
|
||||||
compare_diff spaces-compacted-expect 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' '
|
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
|
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
|
compare_diff functions-compacted-expect out-compacted
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'blame: ugly spaces' '
|
# --- blame tests ---------------------------------------------------------
|
||||||
git blame old..new -- spaces.txt >out-blame &&
|
|
||||||
compare_blame spaces-expect out-blame
|
|
||||||
'
|
|
||||||
|
|
||||||
test_expect_success 'blame: nice spaces with --indent-heuristic' '
|
test_expect_success 'blame: nice spaces with --indent-heuristic' '
|
||||||
git blame --indent-heuristic old..new -- spaces.txt >out-blame-compacted &&
|
git blame --indent-heuristic old..new -- spaces.txt >out-blame-compacted &&
|
||||||
compare_blame spaces-compacted-expect 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 &&
|
git -c diff.indentHeuristic=true blame old..new -- spaces.txt >out-blame-compacted2 &&
|
||||||
compare_blame spaces-compacted-expect out-blame-compacted2
|
compare_blame spaces-compacted-expect out-blame-compacted2
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'blame: --no-indent-heuristic overrides config' '
|
test_expect_success 'blame: ugly spaces with --no-indent-heuristic' '
|
||||||
git -c diff.indentHeuristic=true blame --no-indent-heuristic old..new -- spaces.txt >out-blame2 &&
|
git blame --no-indent-heuristic old..new -- spaces.txt >out-blame &&
|
||||||
git blame 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
|
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
|
test_done
|
||||||
|
Reference in New Issue
Block a user