From: Ronald Weiss <weiss.ronald@gmail.com>
To: Eric Sunshine <sunshine@sunshineco.com>,
Jens Lehmann <Jens.Lehmann@web.de>,
Git List <git@vger.kernel.org>
Cc: Heiko Voigt <hvoigt@hvoigt.net>, Junio C Hamano <gitster@pobox.com>
Subject: [PATCH v6 2/2] commit: add --ignore-submodules[=<when>] parameter
Date: Thu, 24 Apr 2014 21:42:57 +0200 [thread overview]
Message-ID: <53596941.5050207@gmail.com> (raw)
In-Reply-To: <53596756.7020306@gmail.com>
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.
Signed-off-by: Ronald Weiss <weiss.ronald@gmail.com>
---
Patch changelog:
v6
* corrected wording and formatting errors (as pointed out by Eric Sunshine)
v5
* fixed file mode of added test script (644 -> 755)
* replaced test_might_fail with test_must_fail in test script
Documentation/git-commit.txt | 7 ++++
builtin/commit.c | 8 +++-
t/t7513-commit-ignore-submodules.sh | 80 +++++++++++++++++++++++++++++++++++++
3 files changed, 94 insertions(+), 1 deletion(-)
create mode 100755 t/t7513-commit-ignore-submodules.sh
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt
index 0bbc8f5..55995be 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",
+ defaulting to "all".
+
-v::
--verbose::
Show unified diff between the HEAD commit and what
diff --git a/builtin/commit.c b/builtin/commit.c
index 5444111..dc1d8d0 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) ||
@@ -1540,6 +1540,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,
@@ -1578,6 +1581,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 100755
index 0000000..10ae178
--- /dev/null
+++ b/t/t7513-commit-ignore-submodules.sh
@@ -0,0 +1,80 @@
+#!/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_must_fail git commit --ignore-submodules=none >output &&
+ test_i18ngrep modified output &&
+
+ test_must_fail git commit --ignore-submodules=untracked >output &&
+ test_must_fail test_i18ngrep modified output &&
+
+ test_must_fail git commit --ignore-submodules=dirty >output &&
+ test_must_fail test_i18ngrep modified output &&
+
+ test_must_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_must_fail git commit --ignore-submodules=none >output &&
+ test_i18ngrep modified output &&
+
+ test_must_fail git commit --ignore-submodules=untracked >output &&
+ test_i18ngrep modified output &&
+
+ test_must_fail git commit --ignore-submodules=dirty >output &&
+ test_must_fail test_i18ngrep modified output &&
+
+ test_must_fail git commit --ignore-submodules=all >output &&
+ test_must_fail test_i18ngrep modified output
+'
+
+test_done
--
2.0.0.rc0.3.gd50de04
next prev parent reply other threads:[~2014-04-24 19:43 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-27 23:36 git commit vs. ignore-submodules Ronald Weiss
2014-03-28 16:47 ` Jens Lehmann
2014-03-28 17:59 ` Junio C Hamano
2014-03-29 22:44 ` Ronald Weiss
2014-03-29 22:50 ` [PATCH 1/2] commit: add --ignore-submodules[=<when>] parameter Ronald Weiss
2014-03-29 23:14 ` Jens Lehmann
2014-03-30 19:48 ` Jens Lehmann
2014-03-30 23:43 ` [PATCH v2] " Ronald Weiss
2014-03-31 0:07 ` [PATCH v2.1] " Ronald Weiss
2014-03-31 18:58 ` Jens Lehmann
2014-03-31 20:37 ` Jens Lehmann
2014-03-31 21:50 ` Ronald Weiss
2014-03-31 21:47 ` Ronald Weiss
2014-03-31 22:50 ` Ronald Weiss
2014-03-31 23:35 ` Ronald Weiss
2014-04-01 20:23 ` Jens Lehmann
2014-04-01 21:59 ` Ronald Weiss
2014-04-02 18:53 ` Jens Lehmann
2014-04-02 19:56 ` Ronald Weiss
2014-04-06 16:28 ` Jens Lehmann
2014-04-07 21:46 ` Ronald Weiss
2014-04-07 23:01 ` [PATCH v3 1/2] add: " Ronald Weiss
2014-04-07 23:03 ` [PATCH v3 2/2] commit: " Ronald Weiss
2014-04-08 18:43 ` Jens Lehmann
2014-04-08 20:19 ` Ronald Weiss
2014-04-12 22:20 ` Ronald Weiss
2014-04-12 22:45 ` [PATCH v4 1/2] add: " Ronald Weiss
2014-04-18 11:53 ` Jens Lehmann
2014-04-21 21:19 ` Ronald Weiss
2014-04-12 22:49 ` [PATCH v4 2/2] commit: " Ronald Weiss
2014-04-18 12:09 ` Jens Lehmann
2014-04-21 22:08 ` Ronald Weiss
2014-04-22 19:14 ` Jens Lehmann
2014-04-22 21:12 ` [PATCH v5 1/2] add: " Ronald Weiss
2014-04-23 20:25 ` Eric Sunshine
2014-04-24 19:34 ` [PATCH v6 " Ronald Weiss
2014-04-24 19:42 ` Ronald Weiss [this message]
2014-04-22 21:13 ` [PATCH v5 2/2] commit: " Ronald Weiss
2014-04-14 18:30 ` [PATCH v3 " Junio C Hamano
2014-04-14 20:18 ` Ronald Weiss
2014-04-14 21:08 ` Junio C Hamano
2014-04-08 18:26 ` [PATCH v2.1] " Jens Lehmann
2014-04-12 23:41 ` Ronald Weiss
2014-04-18 12:28 ` Jens Lehmann
2014-04-22 22:21 ` Ronald Weiss
2014-03-31 17:14 ` [PATCH 1/2] " Junio C Hamano
2014-03-29 22:56 ` [PATCH 2/2] status: don't ignore submodules added to index Ronald Weiss
2014-03-29 23:16 ` Jens Lehmann
2014-03-29 23:40 ` Ronald Weiss
2014-03-30 0:01 ` Ronald Weiss
2014-03-30 10:14 ` [WIP/PATCH] status/commit: always show staged submodules regardless of ignore config Jens Lehmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53596941.5050207@gmail.com \
--to=weiss.ronald@gmail.com \
--cc=Jens.Lehmann@web.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=hvoigt@hvoigt.net \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).