Am 08.04.2014 01:03, schrieb Ronald Weiss: > Git commit honors the 'ignore' setting from .gitmodules or .git/config, > but didn't allow to override it from command line, like other commands do. > > Useful <when> values for commit are 'all' (default) or 'none'. The others > ('dirty' and 'untracked') have same effect as 'none', as commit is only > interested in whether the submodule's HEAD differs from what is commited > in the superproject. Unless it outputs a status message, then 'dirty' and 'untracked' do influence what is shown there. Apart from that (and maybe tests for these two cases ;-) this is looking good to me. > 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. > > Signed-off-by: Ronald Weiss <weiss.ronald@xxxxxxxxx> > --- > Documentation/git-commit.txt | 6 ++++++ > builtin/commit.c | 8 ++++++- > t/t7513-commit-ignore-submodules.sh | 42 +++++++++++++++++++++++++++++++++++++ > 3 files changed, 55 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 1a7616c..8d3b2db 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[<keyid>]] [--] [<file>...] > > DESCRIPTION > @@ -271,6 +272,11 @@ 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" 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 0db215b..121c185 100644 > --- a/builtin/commit.c > +++ b/builtin/commit.c > @@ -360,7 +360,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) || > @@ -1492,6 +1492,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, > @@ -1531,6 +1534,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 > index 0000000..83ce04c > --- /dev/null > +++ b/t/t7513-commit-ignore-submodules.sh > @@ -0,0 +1,42 @@ > +#!/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_done > -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html