git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ronald Weiss <weiss.ronald@gmail.com>
To: Jens Lehmann <Jens.Lehmann@web.de>, git@vger.kernel.org
Cc: Heiko Voigt <hvoigt@hvoigt.net>, Junio C Hamano <gitster@pobox.com>
Subject: [PATCH v4 2/2] commit: add --ignore-submodules[=<when>] parameter
Date: Sun, 13 Apr 2014 00:49:56 +0200	[thread overview]
Message-ID: <5349C314.50500@gmail.com> (raw)
In-Reply-To: <5349BC2C.9030509@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>
---
 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
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
-- 
1.9.1.3.g7790cde.dirty
 

  parent reply	other threads:[~2014-04-12 22:50 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                                       ` Ronald Weiss [this message]
2014-04-18 12:09                                         ` [PATCH v4 2/2] commit: " 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                                                     ` [PATCH v6 2/2] commit: " Ronald Weiss
2014-04-22 21:13                                               ` [PATCH v5 " 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=5349C314.50500@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 \
    /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).