Re: [PATCH] git submodule -b ... of current HEAD fails
From: Jonathan Nieder <hidden>
Date: 2016-06-15 22:50:12
Subsystem:
the rest · Maintainer:
Linus Torvalds
Jens Lehmann wrote:
quoted hunk ↗ jump to hunk
--- 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
Agh. The command to use is "git symbolic-ref -q HEAD", I suppose. Maybe we can simplify by relying on "git clone". Signed-off-by: Jonathan Nieder <redacted> --- git-submodule.sh | 16 ++++++---------- t/t7400-submodule-basic.sh | 8 +++++++- 2 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index d937f0b..6fd09e7 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh@@ -219,17 +219,13 @@ cmd_add() esac git config submodule."$path".url "$url" else - - module_clone "$path" "$realrepo" "$reference" || exit + brancharg=${branch:+"-b $(git rev-parse --sq-quote "$branch")"} + refarg=${reference:+"$(git rev-parse --sq-quote "$reference")"} ( - clear_local_git_env - cd "$path" && - # ash fails to wordsplit ${branch:+-b "$branch"...} - case "$branch" in - '') git checkout -f -q ;; - ?*) git checkout -f -q -b "$branch" "origin/$branch" ;; - esac - ) || die "Unable to checkout submodule '$path'" + export realrepo path && + eval "git clone $brancharg $refarg" '"$realrepo" "$path"' + ) || + die "Clone of '$realrepo' into submodule path '$path' failed" fi git add $force "$path" ||
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index 2c49db9..77088cc 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh@@ -114,7 +114,6 @@ test_expect_success 'submodule add --branch' ' echo "refs/heads/initial" >expect-head && cat <<-\EOF >expect-heads && refs/heads/initial - refs/heads/master EOF >empty &&
@@ -131,6 +130,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 &&