diff: introduce diff.submodule configuration variable
Introduce a diff.submodule configuration variable corresponding to the '--submodule' command-line option of 'git diff'. Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com> Acked-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
22bc70fdf9
commit
c47ef57caa
@ -107,6 +107,13 @@ diff.suppressBlankEmpty::
|
|||||||
A boolean to inhibit the standard behavior of printing a space
|
A boolean to inhibit the standard behavior of printing a space
|
||||||
before each empty output line. Defaults to false.
|
before each empty output line. Defaults to false.
|
||||||
|
|
||||||
|
diff.submodule::
|
||||||
|
Specify the format in which differences in submodules are
|
||||||
|
shown. The "log" format lists the commits in the range like
|
||||||
|
linkgit:git-submodule[1] `summary` does. The "short" format
|
||||||
|
format just shows the names of the commits at the beginning
|
||||||
|
and end of the range. Defaults to short.
|
||||||
|
|
||||||
diff.wordRegex::
|
diff.wordRegex::
|
||||||
A POSIX Extended Regular Expression used to determine what is a "word"
|
A POSIX Extended Regular Expression used to determine what is a "word"
|
||||||
when performing word-by-word difference calculations. Character
|
when performing word-by-word difference calculations. Character
|
||||||
|
@ -170,7 +170,8 @@ any of those replacements occurred.
|
|||||||
the commits in the range like linkgit:git-submodule[1] `summary` does.
|
the commits in the range like linkgit:git-submodule[1] `summary` does.
|
||||||
Omitting the `--submodule` option or specifying `--submodule=short`,
|
Omitting the `--submodule` option or specifying `--submodule=short`,
|
||||||
uses the 'short' format. This format just shows the names of the commits
|
uses the 'short' format. This format just shows the names of the commits
|
||||||
at the beginning and end of the range.
|
at the beginning and end of the range. Can be tweaked via the
|
||||||
|
`diff.submodule` configuration variable.
|
||||||
|
|
||||||
--color[=<when>]::
|
--color[=<when>]::
|
||||||
Show colored diff.
|
Show colored diff.
|
||||||
|
32
diff.c
32
diff.c
@ -121,6 +121,17 @@ static int parse_dirstat_params(struct diff_options *options, const char *params
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int parse_submodule_params(struct diff_options *options, const char *value)
|
||||||
|
{
|
||||||
|
if (!strcmp(value, "log"))
|
||||||
|
DIFF_OPT_SET(options, SUBMODULE_LOG);
|
||||||
|
else if (!strcmp(value, "short"))
|
||||||
|
DIFF_OPT_CLR(options, SUBMODULE_LOG);
|
||||||
|
else
|
||||||
|
return -1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int git_config_rename(const char *var, const char *value)
|
static int git_config_rename(const char *var, const char *value)
|
||||||
{
|
{
|
||||||
if (!value)
|
if (!value)
|
||||||
@ -176,6 +187,13 @@ int git_diff_ui_config(const char *var, const char *value, void *cb)
|
|||||||
if (!strcmp(var, "diff.ignoresubmodules"))
|
if (!strcmp(var, "diff.ignoresubmodules"))
|
||||||
handle_ignore_submodules_arg(&default_diff_options, value);
|
handle_ignore_submodules_arg(&default_diff_options, value);
|
||||||
|
|
||||||
|
if (!strcmp(var, "diff.submodule")) {
|
||||||
|
if (parse_submodule_params(&default_diff_options, value))
|
||||||
|
warning(_("Unknown value for 'diff.submodule' config variable: '%s'"),
|
||||||
|
value);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (git_color_config(var, value, cb) < 0)
|
if (git_color_config(var, value, cb) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -3473,6 +3491,14 @@ static int parse_dirstat_opt(struct diff_options *options, const char *params)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int parse_submodule_opt(struct diff_options *options, const char *value)
|
||||||
|
{
|
||||||
|
if (parse_submodule_params(options, value))
|
||||||
|
die(_("Failed to parse --submodule option parameter: '%s'"),
|
||||||
|
value);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int diff_opt_parse(struct diff_options *options, const char **av, int ac)
|
int diff_opt_parse(struct diff_options *options, const char **av, int ac)
|
||||||
{
|
{
|
||||||
const char *arg = av[0];
|
const char *arg = av[0];
|
||||||
@ -3653,10 +3679,8 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
|
|||||||
handle_ignore_submodules_arg(options, arg + 20);
|
handle_ignore_submodules_arg(options, arg + 20);
|
||||||
} else if (!strcmp(arg, "--submodule"))
|
} else if (!strcmp(arg, "--submodule"))
|
||||||
DIFF_OPT_SET(options, SUBMODULE_LOG);
|
DIFF_OPT_SET(options, SUBMODULE_LOG);
|
||||||
else if (!prefixcmp(arg, "--submodule=")) {
|
else if (!prefixcmp(arg, "--submodule="))
|
||||||
if (!strcmp(arg + 12, "log"))
|
return parse_submodule_opt(options, arg + 12);
|
||||||
DIFF_OPT_SET(options, SUBMODULE_LOG);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* misc options */
|
/* misc options */
|
||||||
else if (!strcmp(arg, "-z"))
|
else if (!strcmp(arg, "-z"))
|
||||||
|
@ -33,6 +33,7 @@ test_create_repo sm1 &&
|
|||||||
add_file . foo >/dev/null
|
add_file . foo >/dev/null
|
||||||
|
|
||||||
head1=$(add_file sm1 foo1 foo2)
|
head1=$(add_file sm1 foo1 foo2)
|
||||||
|
fullhead1=$(cd sm1; git rev-list --max-count=1 $head1)
|
||||||
|
|
||||||
test_expect_success 'added submodule' "
|
test_expect_success 'added submodule' "
|
||||||
git add sm1 &&
|
git add sm1 &&
|
||||||
@ -43,6 +44,33 @@ EOF
|
|||||||
test_cmp expected actual
|
test_cmp expected actual
|
||||||
"
|
"
|
||||||
|
|
||||||
|
test_expect_success 'added submodule, set diff.submodule' "
|
||||||
|
git config diff.submodule log &&
|
||||||
|
git add sm1 &&
|
||||||
|
git diff --cached >actual &&
|
||||||
|
cat >expected <<-EOF &&
|
||||||
|
Submodule sm1 0000000...$head1 (new submodule)
|
||||||
|
EOF
|
||||||
|
git config --unset diff.submodule &&
|
||||||
|
test_cmp expected actual
|
||||||
|
"
|
||||||
|
|
||||||
|
test_expect_success '--submodule=short overrides diff.submodule' "
|
||||||
|
test_config diff.submodule log &&
|
||||||
|
git add sm1 &&
|
||||||
|
git diff --submodule=short --cached >actual &&
|
||||||
|
cat >expected <<-EOF &&
|
||||||
|
diff --git a/sm1 b/sm1
|
||||||
|
new file mode 160000
|
||||||
|
index 0000000..a2c4dab
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/sm1
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+Subproject commit $fullhead1
|
||||||
|
EOF
|
||||||
|
test_cmp expected actual
|
||||||
|
"
|
||||||
|
|
||||||
commit_file sm1 &&
|
commit_file sm1 &&
|
||||||
head2=$(add_file sm1 foo3)
|
head2=$(add_file sm1 foo3)
|
||||||
|
|
||||||
@ -73,7 +101,6 @@ EOF
|
|||||||
test_cmp expected actual
|
test_cmp expected actual
|
||||||
"
|
"
|
||||||
|
|
||||||
fullhead1=$(cd sm1; git rev-list --max-count=1 $head1)
|
|
||||||
fullhead2=$(cd sm1; git rev-list --max-count=1 $head2)
|
fullhead2=$(cd sm1; git rev-list --max-count=1 $head2)
|
||||||
test_expect_success 'modified submodule(forward) --submodule=short' "
|
test_expect_success 'modified submodule(forward) --submodule=short' "
|
||||||
git diff --submodule=short >actual &&
|
git diff --submodule=short >actual &&
|
||||||
|
Loading…
x
Reference in New Issue
Block a user