The 'master' version of git-submodule.sh fails to see that a/b/c/repository is an already existing repository and messes up the whole thing. The following patch fixes that. -- Sylvain >From 2bca2e17a01cd81ce30f81750583ab943ab57ff0 Mon Sep 17 00:00:00 2001 From: Sylvain Joyeux <sylvain.joyeux@xxxxxxx> Date: Tue, 1 Jul 2008 16:45:04 +0200 Subject: [PATCH] fix submodule add for non-toplevel in-project directories This patch fixes git-submodule add for submodules that already exist in the current package tree, in a folder which is not at toplevel, i.e.: git submodule add a/b/c/repository Signed-off-by: Sylvain Joyeux <sylvain.joyeux@xxxxxxx> --- git-submodule.sh | 6 +++++- t/t7400-submodule-basic.sh | 9 +++++++++ 2 files changed, 14 insertions(+), 1 deletions(-) diff --git a/git-submodule.sh b/git-submodule.sh index e2b91f6..3fa8ff3 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -156,7 +156,11 @@ cmd_add() # Guess path from repo if not specified or strip trailing slashes if test -z "$path"; then - path=$(echo "$repo" | sed -e 's|/*$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g') + if echo "$repo" | grep -q "^\(\.\.\|\/\)"; then + path=$(echo "$repo" | sed -e 's|/*$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g') + else + path=$(echo "$repo" | sed -e 's|/*$||') + fi else path=$(echo "$path" | sed -e 's|/*$||') fi diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index ffaa932..84ea6e9 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -215,4 +215,13 @@ test_expect_success 'update --init' ' ' +test_expect_success 'adding an already-existing repository deep in the directory hierarchy' ' + + mkdir dir0 && + mkdir dir0/dir1 && + git clone init dir0/dir1/init && + git-submodule add dir0/dir1/init && + git-submodule status | grep "dir0/dir1/init" +' + test_done -- 1.5.6 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html