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>maint
							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…
	
		Reference in New Issue
	
	 Ramkumar Ramachandra
						Ramkumar Ramachandra