Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
diff: activate diff.renames by default
Rename detection is a very convenient feature, and new users shouldn't
have to dig in the documentation to benefit from it.

Potential objections to activating rename detection are that it
sometimes fail, and it is sometimes slow. But rename detection is
already activated by default in several cases like "git status" and "git
merge", so activating diff.renames does not fundamentally change the
situation. When the rename detection fails, it now fails consistently
between "git diff" and "git status".

This setting does not affect plumbing commands, hence well-written
scripts will not be affected.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Matthieu Moy authored and Junio C Hamano committed Feb 25, 2016
1 parent 9501d19 commit 5404c11
Show file tree
Hide file tree
Showing 12 changed files with 22 additions and 9 deletions.
2 changes: 1 addition & 1 deletion Documentation/diff-config.txt
Expand Up @@ -111,7 +111,7 @@ diff.renames::
Whether and how Git detects renames. If set to "false",
rename detection is disabled. If set to "true", basic rename
detection is enabled. If set to "copies" or "copy", Git will
detect copies, as well. Defaults to false. Note that this
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].
Expand Down
1 change: 1 addition & 0 deletions builtin/commit.c
Expand Up @@ -186,6 +186,7 @@ static void status_init_config(struct wt_status *s, config_fn_t fn)
gitmodules_config();
git_config(fn, s);
determine_whence(s);
init_diff_ui_defaults();
s->hints = advice_status_hints; /* must come after git_config() */
}

Expand Down
1 change: 1 addition & 0 deletions builtin/diff.c
Expand Up @@ -318,6 +318,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)

if (!no_index)
gitmodules_config();
init_diff_ui_defaults();
git_config(git_diff_ui_config, NULL);

init_revisions(&rev, prefix);
Expand Down
1 change: 1 addition & 0 deletions builtin/log.c
Expand Up @@ -103,6 +103,7 @@ static int log_line_range_callback(const struct option *option, const char *arg,
static void init_log_defaults(void)
{
init_grep_defaults();
init_diff_ui_defaults();
}

static void cmd_log_init_defaults(struct rev_info *rev)
Expand Down
1 change: 1 addition & 0 deletions builtin/merge.c
Expand Up @@ -1187,6 +1187,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
else
head_commit = lookup_commit_or_die(head_sha1, "HEAD");

init_diff_ui_defaults();
git_config(git_merge_config, NULL);

if (branch_mergeoptions)
Expand Down
5 changes: 5 additions & 0 deletions diff.c
Expand Up @@ -168,6 +168,11 @@ long parse_algorithm_value(const char *value)
* never be affected by the setting of diff.renames
* 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)
{
if (!strcmp(var, "diff.color") || !strcmp(var, "color.diff")) {
Expand Down
1 change: 1 addition & 0 deletions diff.h
Expand Up @@ -266,6 +266,7 @@ extern int parse_long_opt(const char *opt, const char **argv,
const char **optarg);

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 void diff_setup(struct diff_options *);
extern int diff_opt_parse(struct diff_options *, const char **, int, const char *);
Expand Down
2 changes: 1 addition & 1 deletion t/t4001-diff-rename.sh
Expand Up @@ -124,7 +124,7 @@ test_expect_success 'test diff.renames=false' '

test_expect_success 'test diff.renames unset' '
git diff --cached $tree >current &&
compare_diff_patch current no-rename
compare_diff_patch current expected
'

test_expect_success 'favour same basenames over different ones' '
Expand Down
2 changes: 2 additions & 0 deletions t/t4013-diff-various.sh
Expand Up @@ -90,6 +90,8 @@ test_expect_success setup '
git commit -m "Rearranged lines in dir/sub" &&
git checkout master &&
git config diff.renames false &&
git show-branch
'

Expand Down
4 changes: 2 additions & 2 deletions t/t4014-format-patch.sh
Expand Up @@ -549,7 +549,7 @@ test_expect_success 'cover-letter inherits diff options' '
git mv file 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 &&
! grep "file => foo .* 0 *\$" 0000-cover-letter.patch &&
git format-patch --cover-letter -1 -M &&
Expand Down Expand Up @@ -703,7 +703,7 @@ test_expect_success 'options no longer allowed for format-patch' '

test_expect_success 'format-patch --numstat should produce a patch' '
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>' '
git format-patch master..side -- file 2>error &&
Expand Down
3 changes: 2 additions & 1 deletion t/t4047-diff-dirstat.sh
Expand Up @@ -248,7 +248,8 @@ EOF
git rm -r src/move/unchanged &&
git rm -r src/move/changed &&
git rm -r src/move/rearranged &&
git commit -m "changes"
git commit -m "changes" &&
git config diff.renames false
'

cat <<EOF >expect_diff_stat
Expand Down
8 changes: 4 additions & 4 deletions t/t4202-log.sh
Expand Up @@ -101,8 +101,8 @@ test_expect_success 'oneline' '

test_expect_success 'diff-filter=A' '
git log --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 &&
git log --no-renames --pretty="format:%s" --diff-filter A HEAD > actual-separate &&
printf "fifth\nfourth\nthird\ninitial" > expect &&
test_cmp expect actual &&
test_cmp expect actual-separate
Expand All @@ -119,7 +119,7 @@ test_expect_success 'diff-filter=M' '

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) &&
verbose test "$actual" = "$expect"
Expand Down Expand Up @@ -848,7 +848,7 @@ sanitize_output () {
}

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 &&
test_i18ncmp expect actual.sanitized
'
Expand Down

0 comments on commit 5404c11

Please sign in to comment.