git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v4 2/2] commit: add --ignore-submodules[=<when>] parameter

From
Jens Lehmann <jens.lehmann@web.de>
Date
Apr 18, 2014, 12:09 UTC
Message-ID
<53511617.80506@web.de>
In-Reply-To
<5349C314.50500@gmail.com>
Am 13.04.2014 00:49, schrieb Ronald Weiss:
Show 10 quoted lines
> Allow ignoring submodules (or not) by command line switch, like diff
> and status do.
> 
> Git commit honors the 'ignore' setting from .gitmodules or .git/config,
> but didn't allow to override it from command line.
> 
> This patch depends on Jens Lehmann's patch "commit -m: commit staged
> submodules regardless of ignore config". Without it,
> "commit -m --ignore-submodules" would not work and tests introduced
> here would fail.

Apart from the flags of the test (see below) I get three failures when running t7513. And I'm wondering why you are using "test_might_fail" there, shouldn't we know exactly if a commit should succeed or not and test exactly for that?

Show 68 quoted lines
> Signed-off-by: Ronald Weiss <weiss.ronald@gmail.com>
> ---
>  Documentation/git-commit.txt        |  7 ++++
>  builtin/commit.c                    |  8 +++-
>  t/t7513-commit-ignore-submodules.sh | 78 +++++++++++++++++++++++++++++++++++++
>  3 files changed, 92 insertions(+), 1 deletion(-)
>  create mode 100644 t/t7513-commit-ignore-submodules.sh
> 
> diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
> index 0bbc8f5..de0e8fe 100644
> --- a/Documentation/git-commit.txt
> +++ b/Documentation/git-commit.txt
> @@ -13,6 +13,7 @@ SYNOPSIS
>  	   [-F <file> | -m <msg>] [--reset-author] [--allow-empty]
>  	   [--allow-empty-message] [--no-verify] [-e] [--author=<author>]
>  	   [--date=<date>] [--cleanup=<mode>] [--[no-]status]
> +	   [--ignore-submodules[=<when>]]
>  	   [-i | -o] [-S[<key-id>]] [--] [<file>...]
>  
>  DESCRIPTION
> @@ -277,6 +278,12 @@ The possible options are:
>  The default can be changed using the status.showUntrackedFiles
>  configuration variable documented in linkgit:git-config[1].
>  
> +--ignore-submodules[=<when>]::
> +	Can be used to override any settings of the 'submodule.*.ignore'
> +	option in linkgit:git-config[1] or linkgit:gitmodules[5].
> +	<when> can be either "none", "dirty, "untracked" or "all", which
> +	is the default.
> +
>  -v::
>  --verbose::
>  	Show unified diff between the HEAD commit and what
> diff --git a/builtin/commit.c b/builtin/commit.c
> index a148e28..8c4d05e 100644
> --- a/builtin/commit.c
> +++ b/builtin/commit.c
> @@ -361,7 +361,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix,
>  	 */
>  	if (all || (also && pathspec.nr)) {
>  		fd = hold_locked_index(&index_lock, 1);
> -		add_files_to_cache(also ? prefix : NULL, &pathspec, 0, NULL);
> +		add_files_to_cache(also ? prefix : NULL, &pathspec, 0, ignore_submodule_arg);
>  		refresh_cache_or_die(refresh_flags);
>  		update_main_cache_tree(WRITE_TREE_SILENT);
>  		if (write_cache(fd, active_cache, active_nr) ||
> @@ -1526,6 +1526,9 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
>  		OPT_BOOL(0, "amend", &amend, N_("amend previous commit")),
>  		OPT_BOOL(0, "no-post-rewrite", &no_post_rewrite, N_("bypass post-rewrite hook")),
>  		{ OPTION_STRING, 'u', "untracked-files", &untracked_files_arg, N_("mode"), N_("show untracked files, optional modes: all, normal, no. (Default: all)"), PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
> +		{ OPTION_STRING, 0, "ignore-submodules", &ignore_submodule_arg, N_("when"),
> +		  N_("ignore changes to submodules, optional when: all, none. (Default: all)"),
> +		  PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
>  		/* end commit contents options */
>  
>  		OPT_HIDDEN_BOOL(0, "allow-empty", &allow_empty,
> @@ -1564,6 +1567,9 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
>  	argc = parse_and_validate_options(argc, argv, builtin_commit_options,
>  					  builtin_commit_usage,
>  					  prefix, current_head, &s);
> +
> +	s.ignore_submodule_arg = ignore_submodule_arg;
> +
>  	if (dry_run)
>  		return dry_run_commit(argc, argv, prefix, current_head, &s);
>  	index_file = prepare_index(argc, argv, prefix, current_head, 0);
> diff --git a/t/t7513-commit-ignore-submodules.sh b/t/t7513-commit-ignore-submodules.sh
> new file mode 100644
Flags: 100755
Show 83 quoted lines
> index 0000000..52ab37d
> --- /dev/null
> +++ b/t/t7513-commit-ignore-submodules.sh
> @@ -0,0 +1,78 @@
> +#!/bin/sh
> +#
> +# Copyright (c) 2014 Ronald Weiss
> +#
> +
> +test_description='Test of git commit --ignore-submodules'
> +
> +. ./test-lib.sh
> +
> +test_expect_success 'create submodule' '
> +	test_create_repo sm && (
> +		cd sm &&
> +		>foo &&
> +		git add foo &&
> +		git commit -m "Add foo"
> +	) &&
> +	git submodule add ./sm &&
> +	git commit -m "Add sm"
> +'
> +
> +update_sm () {
> +	(cd sm &&
> +		echo bar >> foo &&
> +		git add foo &&
> +		git commit -m "Updated foo"
> +	)
> +}
> +
> +test_expect_success 'commit -a --ignore-submodules=all ignores dirty submodule' '
> +	update_sm &&
> +	test_must_fail git commit -a --ignore-submodules=all -m "Update sm"
> +'
> +
> +test_expect_success 'commit -a --ignore-submodules=none overrides ignore=all setting' '
> +	update_sm &&
> +	git config submodule.sm.ignore all &&
> +	git commit -a --ignore-submodules=none -m "Update sm" &&
> +	git diff --exit-code --ignore-submodules=none &&
> +	git diff --cached --exit-code --ignore-submodules=none
> +'
> +
> +test_expect_success 'commit --ignore-submodules status of submodule with untracked content' '
> +	GIT_EDITOR=cat &&
> +	export GIT_EDITOR &&
> +	echo untracked > sm/untracked &&
> +
> +	test_might_fail git commit --ignore-submodules=none > output &&
> +	test_i18ngrep modified output &&
> +
> +	test_might_fail git commit --ignore-submodules=untracked > output &&
> +	test_must_fail test_i18ngrep modified output &&
> +
> +	test_might_fail git commit --ignore-submodules=dirty > output &&
> +	test_must_fail test_i18ngrep modified output &&
> +
> +	test_might_fail git commit --ignore-submodules=all > output &&
> +	test_must_fail test_i18ngrep modified output
> +'
> +
> +test_expect_success 'commit --ignore-submodules status of dirty submodule' '
> +	GIT_EDITOR=cat &&
> +	export GIT_EDITOR &&
> +	echo dirty > sm/foo &&
> +
> +	test_might_fail git commit --ignore-submodules=none > output &&
> +	test_i18ngrep modified output &&
> +
> +	test_might_fail git commit --ignore-submodules=untracked > output &&
> +	test_i18ngrep modified output &&
> +
> +	test_might_fail git commit --ignore-submodules=dirty > output &&
> +	test_must_fail test_i18ngrep modified output &&
> +
> +	test_might_fail git commit --ignore-submodules=all > output &&
> +	test_must_fail test_i18ngrep modified output
> +'
> +
> +test_done
> 
Previous: Ronald WeissNext: Ronald Weiss
Message 31 of 51 in “git commit vs. ignore-submodules”
  1. Ronald WeissMar 27, 2014
  2. Jens LehmannMar 28, 2014
  3. Junio C HamanoMar 28, 2014
  4. Ronald WeissMar 29, 2014
  5. 1/2 commit: add --ignore-submodules[=<when>] parameterRonald Weiss, Mar 29, 2014
  6. Jens LehmannMar 29, 2014
  7. Jens LehmannMar 30, 2014
  8. commit: add --ignore-submodules[=<when>] parameterRonald Weiss, Mar 30, 2014
  9. commit: add --ignore-submodules[=<when>] parameterRonald Weiss, Mar 31, 2014
  10. Jens LehmannMar 31, 2014
  11. Jens LehmannMar 31, 2014
  12. Ronald WeissMar 31, 2014
  13. Ronald WeissMar 31, 2014
  14. Ronald WeissMar 31, 2014
  15. Ronald WeissMar 31, 2014
  16. Jens LehmannApr 1, 2014
  17. Ronald WeissApr 1, 2014
  18. Jens LehmannApr 2, 2014
  19. Ronald WeissApr 2, 2014
  20. Jens LehmannApr 6, 2014
  21. Ronald WeissApr 7, 2014
  22. 1/2 add: add --ignore-submodules[=<when>] parameterRonald Weiss, Apr 7, 2014
  23. 2/2 commit: add --ignore-submodules[=<when>] parameterRonald Weiss, Apr 7, 2014
  24. Jens LehmannApr 8, 2014
  25. Ronald WeissApr 8, 2014
  26. Ronald WeissApr 12, 2014
  27. 1/2 add: add --ignore-submodules[=<when>] parameterRonald Weiss, Apr 12, 2014
  28. Jens LehmannApr 18, 2014
  29. Ronald WeissApr 21, 2014
  30. 2/2 commit: add --ignore-submodules[=<when>] parameterRonald Weiss, Apr 12, 2014
  31. Jens LehmannApr 18, 2014
  32. Ronald WeissApr 21, 2014
  33. Jens LehmannApr 22, 2014
  34. 1/2 add: add --ignore-submodules[=<when>] parameterRonald Weiss, Apr 22, 2014
  35. Eric SunshineApr 23, 2014
  36. 1/2 add: add --ignore-submodules[=<when>] parameterRonald Weiss, Apr 24, 2014
  37. 2/2 commit: add --ignore-submodules[=<when>] parameterRonald Weiss, Apr 24, 2014
  38. 2/2 commit: add --ignore-submodules[=<when>] parameterRonald Weiss, Apr 22, 2014
  39. Junio C HamanoApr 14, 2014
  40. Ronald WeissApr 14, 2014
  41. Junio C HamanoApr 14, 2014
  42. Jens LehmannApr 8, 2014
  43. Ronald WeissApr 12, 2014
  44. Jens LehmannApr 18, 2014
  45. Ronald WeissApr 22, 2014
  46. Junio C HamanoMar 31, 2014
  47. 2/2 status: don't ignore submodules added to indexRonald Weiss, Mar 29, 2014
  48. Jens LehmannMar 29, 2014
  49. Ronald WeissMar 29, 2014
  50. Ronald WeissMar 30, 2014
  51. status/commit: always show staged submodules regardless of ignore configJens Lehmann, Mar 30, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.