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

[PATCH 3/3] git submodule update should give notice when run without init beforehand

From
Tay Ray Chuan <rctay89@gmail.com>
Date
Sep 15, 2013, 17:38 UTC
Message-ID
<1379266703-29808-3-git-send-email-rctay89@gmail.com>
In-Reply-To
<1379266703-29808-2-git-send-email-rctay89@gmail.com>

When 'update' is run with no path in a repository with uninitialized submodules, the program terminates with no output, and zero status code. Be more helpful to users by mentioning this.

This may be controlled by an advice.* option.
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
---
 Documentation/config.txt    |  5 +++++
 git-submodule.sh            | 16 ++++++++++++++--
 t/t7406-submodule-update.sh |  5 ++++-
 3 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index ec57a15..79313f9 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -202,6 +202,11 @@ advice.*::
 	rmHints::
 		In case of failure in the output of linkgit:git-rm[1],
 		show directions on how to proceed from the current state.
+	submoduleUpdateUninit::
+		When linkgit:git-submodule[1] `update` is run with no `path`
+		arguments in a repository with uninitialized submodules,
+		mention that uninitalized submodules are indeed present, and
+		that they may be initialized with the `--init` option.
 --
 
 core.fileMode::
diff --git a/git-submodule.sh b/git-submodule.sh
index 2979197..56f3dc2 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -777,6 +777,7 @@ cmd_update()
 	cloned_modules=
 	module_list "$@" | {
 	err=
+	has_uninit=
 	while read mode sha1 stage sm_path
 	do
 		die_if_unmatched "$mode"
@@ -807,9 +808,13 @@ cmd_update()
 		then
 			# Only mention uninitialized submodules when its
 			# path have been specified
-			test "$#" != "0" &&
-			say "$(eval_gettext "Submodule path '\$displaypath' not initialized
+			if test "$#" != "0"
+			then
+				say "$(eval_gettext "Submodule path '\$displaypath' not initialized
 Maybe you want to use 'update --init'?")"
+			else
+				has_uninit=1
+			fi
 			continue
 		fi
 
@@ -940,6 +945,13 @@ Maybe you want to use 'update --init'?")"
 		IFS=$OIFS
 		exit 1
 	fi
+
+	if test -n "$has_uninit" \
+		-a "$(git config --bool --get advice.submoduleUpdateUninit)" != "false"
+	then
+		say "$(eval_gettext "Uninitialized submodules were detected;
+Maybe you want to use 'update --init'?")"
+	fi
 	}
 }
 
diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh
index 00475eb..8dbe410 100755
--- a/t/t7406-submodule-update.sh
+++ b/t/t7406-submodule-update.sh
@@ -76,8 +76,11 @@ test_expect_success 'submodule update <path> warns without init beforehand' '
 	)
 '
 
-test_expect_success 'submodule update is silent without init beforehand' '
+test_expect_success 'submodule update warns without init beforehand' '
 	(cd super2 &&
+	 test_must_fail git config --get advice.submoduleUpdateUninit &&
+	 test -n "$(git submodule update)" &&
+	 git config advice.submoduleUpdateUninit false &&
 	 test -z "$(git submodule update)"
 	)
 '
-- 
1.8.4.rc4.527.g303b16c
Previous: Tay Ray ChuanNext: Jens Lehmann
Message 3 of 7 in “t7406-submodule-update: add missing &&”
  1. 1/3 t7406-submodule-update: add missing &&Tay Ray Chuan, Sep 15, 2013
  2. 2/3 t7406-submodule-update: demonstrate behaviour when run without init beforehandTay Ray Chuan, Sep 15, 2013
  3. 3/3 git submodule update should give notice when run without init beforehandTay Ray Chuan, Sep 15, 2013
  4. Jens LehmannSep 16, 2013
  5. Tay Ray ChuanSep 18, 2013
  6. Jens LehmannSep 18, 2013
  7. Chris PackhamSep 19, 2013

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.