mirror of
https://github.com/git/git.git
synced 2025-03-15 22:31:10 +00:00
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:
commit
53083f8547
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
8
diff.c
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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 &&
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user