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

[PATCH] git submodule -b ... of current HEAD fails

From
Jens Lehmann <jens.lehmann@web.de>
Date
Dec 8, 2010, 23:19 UTC
Message-ID
<4D001292.3020503@web.de>
In-Reply-To
<4CFFFA05.6070609@web.de>
	git submodule add -b $branch $repository
fails when HEAD already points to $branch in $repository.

When the freshly cloned submodules HEAD is the same as the checked out branch, it doesn't make sense to update it again as "git checkout -b" would fail with »fatal: git checkout: branch $branch already exists«.

Reported-by: Klaus Ethgen <Klaus@Ethgen.de>
Thanks-to: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
---
Am 08.12.2010 22:35, schrieb Jens Lehmann:
Show 14 quoted lines
> Am 07.12.2010 23:57, schrieb Junio C Hamano:
>> Jens Lehmann <Jens.Lehmann@web.de> writes:
>>
>>> Nope, these lines date back to the time before I got involved in the
>>> submodule business ... Seems like this "git checkout" was added in
>>> March 2008 by Mark Levedahl (CCed), maybe he can shed some light on
>>> that.
>>>
>>> But to me your change looks good, so feel free to add:
>>> Acked-by: Jens Lehmann <Jens.Lehmann@web.de>
>>
>> Does either of you want to add a test for this?
> 
> Will do.

And as it happens from time to time, while writing the test you find out that the first attempt to fix the bug didn't work as expected ...

 git-submodule.sh           |    4 +++-
 t/t7400-submodule-basic.sh |    7 +++++++
 2 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index 33bc41f..bf2803f 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -241,7 +241,9 @@ cmd_add()
 			# ash fails to wordsplit ${branch:+-b "$branch"...}
 			case "$branch" in
 			'') git checkout -f -q ;;
-			?*) git checkout -f -q -b "$branch" "origin/$branch" ;;
+			?*) if [ "$(git branch)" != "* $branch"  ]; then
+				git checkout -f -q -b "$branch" "origin/$branch"
+			fi ;;
 			esac
 		) || die "Unable to checkout submodule '$path'"
 	fi
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index 782b0a3..e224da4 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -131,6 +131,13 @@ test_expect_success 'submodule add --branch' '
 	test_cmp empty untracked
 '

+test_expect_success 'submodule add --branch succeeds even when branch is at HEAD' '
+	(
+		cd addtest &&
+		git submodule add -b master "$submodurl" submod-existing-branch
+	)
+'
+
 test_expect_success 'submodule add with ./ in path' '
 	echo "refs/heads/master" >expect &&
 	>empty &&
-- 
1.7.3.3.580.ged75d
Previous: Jens LehmannNext: Jonathan Nieder
Message 9 of 16 in “Re: git submodule -b ... of current HEAD fails”
  1. Re: git submodule -b ... of current HEAD failsJonathan Nieder, Dec 1, 2010
  2. Jens LehmannDec 2, 2010
  3. Mark LevedahlDec 3, 2010
  4. Ben JacksonDec 3, 2010
  5. Jonathan NiederDec 3, 2010
  6. git submodule: Remove now obsolete tests before cloning a repoJens Lehmann, Dec 4, 2010
  7. Junio C HamanoDec 7, 2010
  8. Jens LehmannDec 8, 2010
  9. git submodule -b ... of current HEAD failsJens Lehmann, Dec 8, 2010
  10. Jonathan NiederDec 8, 2010
  11. Junio C HamanoDec 28, 2010
  12. Jens LehmannDec 29, 2010
  13. Junio C HamanoDec 29, 2010
  14. Jens LehmannDec 29, 2010
  15. Re* [RFC/PATCH] Re: git submodule -b ... of current HEAD failsJunio C Hamano, Dec 29, 2010
  16. Jens LehmannDec 29, 2010

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.