[PATCH 3/7] git submodule add: Fix naming clash handling

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: <git@...>
Date: Wednesday, July 16, 2008 - 3:11 pm

This patch fixes git submodule add behaviour when we add submodule
living at a same path as logical name of existing submodule. This
can happen e.g. in case the user git mv's the previous submodule away
and then git submodule add's another under the same name.

A test-case is obviously included.

This is not completely satisfactory since .git/config cross-commit
conflicts can still occur. A question is whether this is worth
handling, maybe it would be worth adding some kind of randomization
of the autogenerated submodule name, e.g. appending $$ or a timestamp.

Signed-off-by: Petr Baudis <pasky@suse.cz>
---

 git-submodule.sh           |   15 ++++++++++++---
 t/t7400-submodule-basic.sh |   11 +++++++++++
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index 9228f56..a93547b 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -192,10 +192,19 @@ cmd_add()
 	git add "$path" ||
 	die "Failed to add submodule '$path'"
 
-	git config -f .gitmodules submodule."$path".path "$path" &&
-	git config -f .gitmodules submodule."$path".url "$repo" &&
+	name="$path"
+	if git config -f .gitmodules submodule."$name".path; then
+		name="$path~"; i=1;
+		while git config -f .gitmodules submodule."$name".path; do
+			name="$path~$i"
+			i=$((i+1))
+		done
+	fi
+
+	git config -f .gitmodules submodule."$name".path "$path" &&
+	git config -f .gitmodules submodule."$name".url "$repo" &&
 	git add .gitmodules ||
-	die "Failed to register submodule '$path'"
+	die "Failed to register submodule '$path' (name '$name')"
 }
 
 #
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index ab5eb1e..092dffc 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -235,4 +235,15 @@ test_expect_success 'submodule add -b' '
 
 '
 
+test_expect_success 'submodule add auto-naming clash' '
+
+	git submodule add "$(pwd)/init2/.git" example &&
+	test -d example/.git &&
+	[ "$(git config -f .gitmodules submodule.example.url)" = "$(pwd)/init2" ] &&
+	[ "$(git config -f .gitmodules submodule.example.path)" = "init" ]
+	[ "$(git config -f .gitmodules submodule.example~.url)" = "$(pwd)/init2/.git" ] &&
+	[ "$(git config -f .gitmodules submodule.example~.path)" = "example" ]
+
+'
+
 test_done

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[RFC][PATCH 0/7] Submodule support in git mv, git rm, Petr Baudis, (Wed Jul 16, 3:11 pm)
[PATCH 7/7] t7403: Submodule git mv, git rm testsuite, Petr Baudis, (Wed Jul 16, 3:11 pm)
[PATCH 6/7] git rm: Support for removing submodules, Petr Baudis, (Wed Jul 16, 3:11 pm)
Re: [PATCH 6/7] git rm: Support for removing submodules, Johannes Schindelin, (Wed Jul 16, 6:41 pm)
Re: [PATCH 6/7] git rm: Support for removing submodules, Johannes Schindelin, (Thu Jul 17, 8:59 am)
[PATCH 5/7] git mv: Support moving submodules, Petr Baudis, (Wed Jul 16, 3:11 pm)
Re: [PATCH 5/7] git mv: Support moving submodules, Junio C Hamano, (Wed Jul 16, 10:37 pm)
Re: [PATCH 5/7] git mv: Support moving submodules, Petr Baudis, (Thu Jul 17, 9:06 am)
[PATCH] git-mv: Keep moved index entries inact, Petr Baudis, (Thu Jul 17, 6:31 pm)
Re: [PATCH] git-mv: Keep moved index entries inact, Junio C Hamano, (Sat Jul 19, 7:54 pm)
Re: [PATCH] git-mv: Keep moved index entries inact, Petr Baudis, (Sun Jul 20, 8:23 pm)
Re: [PATCH] git-mv: Keep moved index entries inact, Johannes Schindelin, (Sun Jul 20, 9:20 pm)
Re: [PATCH] git-mv: Keep moved index entries inact, Petr Baudis, (Mon Jul 21, 3:18 am)
Re: [PATCH] git-mv: Keep moved index entries inact, Junio C Hamano, (Mon Jul 21, 3:38 am)
[PATCHv2] git-mv: Keep moved index entries inact, Petr Baudis, (Sun Jul 20, 8:25 pm)
Re: [PATCHv2] git-mv: Keep moved index entries inact, Junio C Hamano, (Sat Jul 26, 2:46 am)
Not going beyond symbolic links, Junio C Hamano, (Mon Aug 4, 3:49 am)
Re: Not going beyond symbolic links, Linus Torvalds, (Mon Aug 4, 8:21 pm)
Re: Not going beyond symbolic links, Junio C Hamano, (Thu Aug 7, 2:52 am)
Re: Not going beyond symbolic links, Junio C Hamano, (Fri Aug 8, 4:55 pm)
Re: Not going beyond symbolic links, Linus Torvalds, (Fri Aug 8, 7:45 pm)
Re: Not going beyond symbolic links, Junio C Hamano, (Mon Aug 4, 8:54 pm)
Re: Not going beyond symbolic links, Linus Torvalds, (Mon Aug 4, 9:43 pm)
Re: Not going beyond symbolic links, Johannes Schindelin, (Mon Aug 4, 9:59 pm)
Re: Not going beyond symbolic links, Junio C Hamano, (Tue Aug 5, 12:44 am)
Re: Not going beyond symbolic links, Johannes Schindelin, (Tue Aug 5, 7:23 am)
Re: Not going beyond symbolic links, Linus Torvalds, (Mon Aug 4, 10:28 pm)
Re: [PATCHv2] git-mv: Keep moved index entries inact, Johannes Schindelin, (Mon Jul 28, 11:06 am)
Re: [PATCHv2] git-mv: Keep moved index entries inact, Junio C Hamano, (Mon Jul 28, 3:19 pm)
Re: [PATCHv2] git-mv: Keep moved index entries inact, Petr Baudis, (Mon Jul 28, 8:17 pm)
Re: [PATCHv2] git-mv: Keep moved index entries inact, Junio C Hamano, (Mon Jul 28, 8:46 pm)
Re: [PATCHv2] git-mv: Keep moved index entries inact, Junio C Hamano, (Tue Jul 29, 1:23 am)
Re: [PATCHv2] git-mv: Keep moved index entries inact, Johannes Schindelin, (Mon Jul 28, 7:41 pm)
Re: [PATCHv2] git-mv: Keep moved index entries inact, Johannes Schindelin, (Mon Jul 28, 7:55 pm)
Re: [PATCHv2] git-mv: Keep moved index entries inact, Johannes Schindelin, (Mon Jul 28, 11:14 am)
Re: [PATCHv2] git-mv: Keep moved index entries inact, Johannes Schindelin, (Mon Jul 28, 2:24 pm)
Re: [PATCHv2] git-mv: Keep moved index entries inact, Petr Baudis, (Sun Jul 27, 9:41 am)
Re: [PATCHv2] git-mv: Keep moved index entries inact, Junio C Hamano, (Mon Jul 21, 12:36 am)
[PATCH] git mv: Support moving submodules, Petr Baudis, (Thu Jul 17, 6:34 pm)
[PATCH 3/7] git submodule add: Fix naming clash handling, Petr Baudis, (Wed Jul 16, 3:11 pm)
[PATCH 1/7] git-mv: Remove dead code branch, Petr Baudis, (Wed Jul 16, 3:11 pm)