Re: [PATCH] git submodule -b ... of current HEAD fails
Show 8 quoted lines
> --- 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" ]; thenAgh. 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 <jrnieder@gmail.com>
---
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 &&