Merge branch 'mm/diff-renames-default'
The end-user facing Porcelain level commands like "diff" and "log" now enables the rename detection by default. * mm/diff-renames-default: diff: activate diff.renames by default log: introduce init_log_defaults() t: add tests for diff.renames (true/false/unset) t4001-diff-rename: wrap file creations in a test Documentation/diff-config: fix description of diff.renames
This commit is contained in:
commit
5d2a30d7d8
@ -108,9 +108,13 @@ diff.renameLimit::
|
|||||||
detection; equivalent to the 'git diff' option '-l'.
|
detection; equivalent to the 'git diff' option '-l'.
|
||||||
|
|
||||||
diff.renames::
|
diff.renames::
|
||||||
Tells Git to detect renames. If set to any boolean value, it
|
Whether and how Git detects renames. If set to "false",
|
||||||
will enable basic rename detection. If set to "copies" or
|
rename detection is disabled. If set to "true", basic rename
|
||||||
"copy", it will detect copies, as well.
|
detection is enabled. If set to "copies" or "copy", Git will
|
||||||
|
detect copies, as well. Defaults to true. Note that this
|
||||||
|
affects only 'git diff' Porcelain like linkgit:git-diff[1] and
|
||||||
|
linkgit:git-log[1], and not lower level commands such as
|
||||||
|
linkgit:git-diff-files[1].
|
||||||
|
|
||||||
diff.suppressBlankEmpty::
|
diff.suppressBlankEmpty::
|
||||||
A boolean to inhibit the standard behavior of printing a space
|
A boolean to inhibit the standard behavior of printing a space
|
||||||
|
@ -186,6 +186,7 @@ static void status_init_config(struct wt_status *s, config_fn_t fn)
|
|||||||
gitmodules_config();
|
gitmodules_config();
|
||||||
git_config(fn, s);
|
git_config(fn, s);
|
||||||
determine_whence(s);
|
determine_whence(s);
|
||||||
|
init_diff_ui_defaults();
|
||||||
s->hints = advice_status_hints; /* must come after git_config() */
|
s->hints = advice_status_hints; /* must come after git_config() */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,6 +318,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
if (!no_index)
|
if (!no_index)
|
||||||
gitmodules_config();
|
gitmodules_config();
|
||||||
|
init_diff_ui_defaults();
|
||||||
git_config(git_diff_ui_config, NULL);
|
git_config(git_diff_ui_config, NULL);
|
||||||
|
|
||||||
init_revisions(&rev, prefix);
|
init_revisions(&rev, prefix);
|
||||||
|
@ -100,6 +100,12 @@ static int log_line_range_callback(const struct option *option, const char *arg,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void init_log_defaults(void)
|
||||||
|
{
|
||||||
|
init_grep_defaults();
|
||||||
|
init_diff_ui_defaults();
|
||||||
|
}
|
||||||
|
|
||||||
static void cmd_log_init_defaults(struct rev_info *rev)
|
static void cmd_log_init_defaults(struct rev_info *rev)
|
||||||
{
|
{
|
||||||
if (fmt_pretty)
|
if (fmt_pretty)
|
||||||
@ -416,7 +422,7 @@ int cmd_whatchanged(int argc, const char **argv, const char *prefix)
|
|||||||
struct rev_info rev;
|
struct rev_info rev;
|
||||||
struct setup_revision_opt opt;
|
struct setup_revision_opt opt;
|
||||||
|
|
||||||
init_grep_defaults();
|
init_log_defaults();
|
||||||
git_config(git_log_config, NULL);
|
git_config(git_log_config, NULL);
|
||||||
|
|
||||||
init_revisions(&rev, prefix);
|
init_revisions(&rev, prefix);
|
||||||
@ -527,7 +533,7 @@ int cmd_show(int argc, const char **argv, const char *prefix)
|
|||||||
struct pathspec match_all;
|
struct pathspec match_all;
|
||||||
int i, count, ret = 0;
|
int i, count, ret = 0;
|
||||||
|
|
||||||
init_grep_defaults();
|
init_log_defaults();
|
||||||
git_config(git_log_config, NULL);
|
git_config(git_log_config, NULL);
|
||||||
|
|
||||||
memset(&match_all, 0, sizeof(match_all));
|
memset(&match_all, 0, sizeof(match_all));
|
||||||
@ -608,7 +614,7 @@ int cmd_log_reflog(int argc, const char **argv, const char *prefix)
|
|||||||
struct rev_info rev;
|
struct rev_info rev;
|
||||||
struct setup_revision_opt opt;
|
struct setup_revision_opt opt;
|
||||||
|
|
||||||
init_grep_defaults();
|
init_log_defaults();
|
||||||
git_config(git_log_config, NULL);
|
git_config(git_log_config, NULL);
|
||||||
|
|
||||||
init_revisions(&rev, prefix);
|
init_revisions(&rev, prefix);
|
||||||
@ -647,7 +653,7 @@ int cmd_log(int argc, const char **argv, const char *prefix)
|
|||||||
struct rev_info rev;
|
struct rev_info rev;
|
||||||
struct setup_revision_opt opt;
|
struct setup_revision_opt opt;
|
||||||
|
|
||||||
init_grep_defaults();
|
init_log_defaults();
|
||||||
git_config(git_log_config, NULL);
|
git_config(git_log_config, NULL);
|
||||||
|
|
||||||
init_revisions(&rev, prefix);
|
init_revisions(&rev, prefix);
|
||||||
@ -1280,7 +1286,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
|||||||
extra_hdr.strdup_strings = 1;
|
extra_hdr.strdup_strings = 1;
|
||||||
extra_to.strdup_strings = 1;
|
extra_to.strdup_strings = 1;
|
||||||
extra_cc.strdup_strings = 1;
|
extra_cc.strdup_strings = 1;
|
||||||
init_grep_defaults();
|
init_log_defaults();
|
||||||
git_config(git_format_config, NULL);
|
git_config(git_format_config, NULL);
|
||||||
init_revisions(&rev, prefix);
|
init_revisions(&rev, prefix);
|
||||||
rev.commit_format = CMIT_FMT_EMAIL;
|
rev.commit_format = CMIT_FMT_EMAIL;
|
||||||
|
@ -1187,6 +1187,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
|||||||
else
|
else
|
||||||
head_commit = lookup_commit_or_die(head_sha1, "HEAD");
|
head_commit = lookup_commit_or_die(head_sha1, "HEAD");
|
||||||
|
|
||||||
|
init_diff_ui_defaults();
|
||||||
git_config(git_merge_config, NULL);
|
git_config(git_merge_config, NULL);
|
||||||
|
|
||||||
if (branch_mergeoptions)
|
if (branch_mergeoptions)
|
||||||
|
5
diff.c
5
diff.c
@ -168,6 +168,11 @@ long parse_algorithm_value(const char *value)
|
|||||||
* never be affected by the setting of diff.renames
|
* never be affected by the setting of diff.renames
|
||||||
* the user happens to have in the configuration file.
|
* the user happens to have in the configuration file.
|
||||||
*/
|
*/
|
||||||
|
void init_diff_ui_defaults(void)
|
||||||
|
{
|
||||||
|
diff_detect_rename_default = 1;
|
||||||
|
}
|
||||||
|
|
||||||
int git_diff_ui_config(const char *var, const char *value, void *cb)
|
int git_diff_ui_config(const char *var, const char *value, void *cb)
|
||||||
{
|
{
|
||||||
if (!strcmp(var, "diff.color") || !strcmp(var, "color.diff")) {
|
if (!strcmp(var, "diff.color") || !strcmp(var, "color.diff")) {
|
||||||
|
1
diff.h
1
diff.h
@ -266,6 +266,7 @@ extern int parse_long_opt(const char *opt, const char **argv,
|
|||||||
const char **optarg);
|
const char **optarg);
|
||||||
|
|
||||||
extern int git_diff_basic_config(const char *var, const char *value, void *cb);
|
extern int git_diff_basic_config(const char *var, const char *value, void *cb);
|
||||||
|
extern void init_diff_ui_defaults(void);
|
||||||
extern int git_diff_ui_config(const char *var, const char *value, void *cb);
|
extern int git_diff_ui_config(const char *var, const char *value, void *cb);
|
||||||
extern void diff_setup(struct diff_options *);
|
extern void diff_setup(struct diff_options *);
|
||||||
extern int diff_opt_parse(struct diff_options *, const char **, int, const char *);
|
extern int diff_opt_parse(struct diff_options *, const char **, int, const char *);
|
||||||
|
@ -9,7 +9,9 @@ test_description='Test rename detection in diff engine.
|
|||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
. "$TEST_DIRECTORY"/diff-lib.sh
|
. "$TEST_DIRECTORY"/diff-lib.sh
|
||||||
|
|
||||||
echo >path0 'Line 1
|
test_expect_success 'setup' '
|
||||||
|
cat >path0 <<-\EOF &&
|
||||||
|
Line 1
|
||||||
Line 2
|
Line 2
|
||||||
Line 3
|
Line 3
|
||||||
Line 4
|
Line 4
|
||||||
@ -24,6 +26,67 @@ Line 12
|
|||||||
Line 13
|
Line 13
|
||||||
Line 14
|
Line 14
|
||||||
Line 15
|
Line 15
|
||||||
|
EOF
|
||||||
|
cat >expected <<-\EOF &&
|
||||||
|
diff --git a/path0 b/path1
|
||||||
|
rename from path0
|
||||||
|
rename to path1
|
||||||
|
--- a/path0
|
||||||
|
+++ b/path1
|
||||||
|
@@ -8,7 +8,7 @@ Line 7
|
||||||
|
Line 8
|
||||||
|
Line 9
|
||||||
|
Line 10
|
||||||
|
-line 11
|
||||||
|
+Line 11
|
||||||
|
Line 12
|
||||||
|
Line 13
|
||||||
|
Line 14
|
||||||
|
EOF
|
||||||
|
cat >no-rename <<-\EOF
|
||||||
|
diff --git a/path0 b/path0
|
||||||
|
deleted file mode 100644
|
||||||
|
index fdbec44..0000000
|
||||||
|
--- a/path0
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,15 +0,0 @@
|
||||||
|
-Line 1
|
||||||
|
-Line 2
|
||||||
|
-Line 3
|
||||||
|
-Line 4
|
||||||
|
-Line 5
|
||||||
|
-Line 6
|
||||||
|
-Line 7
|
||||||
|
-Line 8
|
||||||
|
-Line 9
|
||||||
|
-Line 10
|
||||||
|
-line 11
|
||||||
|
-Line 12
|
||||||
|
-Line 13
|
||||||
|
-Line 14
|
||||||
|
-Line 15
|
||||||
|
diff --git a/path1 b/path1
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..752c50e
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/path1
|
||||||
|
@@ -0,0 +1,15 @@
|
||||||
|
+Line 1
|
||||||
|
+Line 2
|
||||||
|
+Line 3
|
||||||
|
+Line 4
|
||||||
|
+Line 5
|
||||||
|
+Line 6
|
||||||
|
+Line 7
|
||||||
|
+Line 8
|
||||||
|
+Line 9
|
||||||
|
+Line 10
|
||||||
|
+Line 11
|
||||||
|
+Line 12
|
||||||
|
+Line 13
|
||||||
|
+Line 14
|
||||||
|
+Line 15
|
||||||
|
EOF
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success \
|
test_expect_success \
|
||||||
@ -43,27 +106,27 @@ test_expect_success \
|
|||||||
test_expect_success \
|
test_expect_success \
|
||||||
'git diff-index -p -M after rename and editing.' \
|
'git diff-index -p -M after rename and editing.' \
|
||||||
'git diff-index -p -M $tree >current'
|
'git diff-index -p -M $tree >current'
|
||||||
cat >expected <<\EOF
|
|
||||||
diff --git a/path0 b/path1
|
|
||||||
rename from path0
|
|
||||||
rename to path1
|
|
||||||
--- a/path0
|
|
||||||
+++ b/path1
|
|
||||||
@@ -8,7 +8,7 @@ Line 7
|
|
||||||
Line 8
|
|
||||||
Line 9
|
|
||||||
Line 10
|
|
||||||
-line 11
|
|
||||||
+Line 11
|
|
||||||
Line 12
|
|
||||||
Line 13
|
|
||||||
Line 14
|
|
||||||
EOF
|
|
||||||
|
|
||||||
test_expect_success \
|
test_expect_success \
|
||||||
'validate the output.' \
|
'validate the output.' \
|
||||||
'compare_diff_patch current expected'
|
'compare_diff_patch current expected'
|
||||||
|
|
||||||
|
test_expect_success 'test diff.renames=true' '
|
||||||
|
git -c diff.renames=true diff --cached $tree >current &&
|
||||||
|
compare_diff_patch current expected
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'test diff.renames=false' '
|
||||||
|
git -c diff.renames=false diff --cached $tree >current &&
|
||||||
|
compare_diff_patch current no-rename
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'test diff.renames unset' '
|
||||||
|
git diff --cached $tree >current &&
|
||||||
|
compare_diff_patch current expected
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'favour same basenames over different ones' '
|
test_expect_success 'favour same basenames over different ones' '
|
||||||
cp path1 another-path &&
|
cp path1 another-path &&
|
||||||
git add another-path &&
|
git add another-path &&
|
||||||
|
@ -90,6 +90,8 @@ test_expect_success setup '
|
|||||||
git commit -m "Rearranged lines in dir/sub" &&
|
git commit -m "Rearranged lines in dir/sub" &&
|
||||||
git checkout master &&
|
git checkout master &&
|
||||||
|
|
||||||
|
git config diff.renames false &&
|
||||||
|
|
||||||
git show-branch
|
git show-branch
|
||||||
'
|
'
|
||||||
|
|
||||||
|
@ -549,7 +549,7 @@ test_expect_success 'cover-letter inherits diff options' '
|
|||||||
|
|
||||||
git mv file foo &&
|
git mv file foo &&
|
||||||
git commit -m foo &&
|
git commit -m foo &&
|
||||||
git format-patch --cover-letter -1 &&
|
git format-patch --no-renames --cover-letter -1 &&
|
||||||
check_patch 0000-cover-letter.patch &&
|
check_patch 0000-cover-letter.patch &&
|
||||||
! grep "file => foo .* 0 *\$" 0000-cover-letter.patch &&
|
! grep "file => foo .* 0 *\$" 0000-cover-letter.patch &&
|
||||||
git format-patch --cover-letter -1 -M &&
|
git format-patch --cover-letter -1 -M &&
|
||||||
@ -703,7 +703,7 @@ test_expect_success 'options no longer allowed for format-patch' '
|
|||||||
|
|
||||||
test_expect_success 'format-patch --numstat should produce a patch' '
|
test_expect_success 'format-patch --numstat should produce a patch' '
|
||||||
git format-patch --numstat --stdout master..side > output &&
|
git format-patch --numstat --stdout master..side > output &&
|
||||||
test 6 = $(grep "^diff --git a/" output | wc -l)'
|
test 5 = $(grep "^diff --git a/" output | wc -l)'
|
||||||
|
|
||||||
test_expect_success 'format-patch -- <path>' '
|
test_expect_success 'format-patch -- <path>' '
|
||||||
git format-patch master..side -- file 2>error &&
|
git format-patch master..side -- file 2>error &&
|
||||||
|
@ -248,7 +248,8 @@ EOF
|
|||||||
git rm -r src/move/unchanged &&
|
git rm -r src/move/unchanged &&
|
||||||
git rm -r src/move/changed &&
|
git rm -r src/move/changed &&
|
||||||
git rm -r src/move/rearranged &&
|
git rm -r src/move/rearranged &&
|
||||||
git commit -m "changes"
|
git commit -m "changes" &&
|
||||||
|
git config diff.renames false
|
||||||
'
|
'
|
||||||
|
|
||||||
cat <<EOF >expect_diff_stat
|
cat <<EOF >expect_diff_stat
|
||||||
|
@ -101,8 +101,8 @@ test_expect_success 'oneline' '
|
|||||||
|
|
||||||
test_expect_success 'diff-filter=A' '
|
test_expect_success 'diff-filter=A' '
|
||||||
|
|
||||||
git log --pretty="format:%s" --diff-filter=A HEAD > actual &&
|
git log --no-renames --pretty="format:%s" --diff-filter=A HEAD > actual &&
|
||||||
git log --pretty="format:%s" --diff-filter A HEAD > actual-separate &&
|
git log --no-renames --pretty="format:%s" --diff-filter A HEAD > actual-separate &&
|
||||||
printf "fifth\nfourth\nthird\ninitial" > expect &&
|
printf "fifth\nfourth\nthird\ninitial" > expect &&
|
||||||
test_cmp expect actual &&
|
test_cmp expect actual &&
|
||||||
test_cmp expect actual-separate
|
test_cmp expect actual-separate
|
||||||
@ -119,7 +119,7 @@ test_expect_success 'diff-filter=M' '
|
|||||||
|
|
||||||
test_expect_success 'diff-filter=D' '
|
test_expect_success 'diff-filter=D' '
|
||||||
|
|
||||||
actual=$(git log --pretty="format:%s" --diff-filter=D HEAD) &&
|
actual=$(git log --no-renames --pretty="format:%s" --diff-filter=D HEAD) &&
|
||||||
expect=$(echo sixth ; echo third) &&
|
expect=$(echo sixth ; echo third) &&
|
||||||
verbose test "$actual" = "$expect"
|
verbose test "$actual" = "$expect"
|
||||||
|
|
||||||
@ -848,7 +848,7 @@ sanitize_output () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
test_expect_success 'log --graph with diff and stats' '
|
test_expect_success 'log --graph with diff and stats' '
|
||||||
git log --graph --pretty=short --stat -p >actual &&
|
git log --no-renames --graph --pretty=short --stat -p >actual &&
|
||||||
sanitize_output >actual.sanitized <actual &&
|
sanitize_output >actual.sanitized <actual &&
|
||||||
test_i18ncmp expect actual.sanitized
|
test_i18ncmp expect actual.sanitized
|
||||||
'
|
'
|
||||||
|
Loading…
Reference in New Issue
Block a user