diff options
Diffstat (limited to 'git-submodule.sh')
-rwxr-xr-x | git-submodule.sh | 58 |
1 files changed, 17 insertions, 41 deletions
diff --git a/git-submodule.sh b/git-submodule.sh index 6135cfa912..b55d83ac46 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -246,9 +246,6 @@ module_name() # $3 = URL to clone # $4 = reference repository to reuse (empty for independent) # $5 = depth argument for shallow clones (empty for deep) -# $6 = (remote-tracking) starting point for the local branch (empty for HEAD) -# $7 = local branch to create (empty for a detached HEAD, unless $6 is -# also empty, in which case the local branch is left unchanged) # # Prior to calling, cmd_update checks that a possibly existing # path is not a git repository. @@ -262,8 +259,6 @@ module_clone() url=$3 reference="$4" depth="$5" - start_point="$6" - local_branch="$7" quiet= if test -n "$GIT_QUIET" then @@ -317,16 +312,7 @@ module_clone() echo "gitdir: $rel/$a" >"$sm_path/.git" rel=$(echo $a | sed -e 's|[^/][^/]*|..|g') - ( - clear_local_git_env - cd "$sm_path" && - GIT_WORK_TREE=. git config core.worktree "$rel/$b" && - # ash fails to wordsplit ${local_branch:+-B "$local_branch"...} - case "$local_branch" in - '') git checkout -f -q ${start_point:+"$start_point"} ;; - ?*) git checkout -f -q -B "$local_branch" ${start_point:+"$start_point"} ;; - esac - ) || die "$(eval_gettext "Unable to setup cloned submodule '\$sm_path'")" + (clear_local_git_env; cd "$sm_path" && GIT_WORK_TREE=. git config core.worktree "$rel/$b") } isnumber() @@ -489,15 +475,16 @@ Use -f if you really want to add it." >&2 echo "$(eval_gettext "Reactivating local git directory for submodule '\$sm_name'.")" fi fi - if test -n "$branch" - then - start_point="origin/$branch" - local_branch="$branch" - else - start_point="" - local_branch="" - fi - module_clone "$sm_path" "$sm_name" "$realrepo" "$reference" "$depth" "$start_point" "$local_branch" || exit + module_clone "$sm_path" "$sm_name" "$realrepo" "$reference" "$depth" || exit + ( + clear_local_git_env + cd "$sm_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 "$(eval_gettext "Unable to checkout submodule '\$sm_path'")" fi git config submodule."$sm_name".url "$realrepo" @@ -818,9 +805,7 @@ cmd_update() fi name=$(module_name "$sm_path") || exit url=$(git config submodule."$name".url) - config_branch=$(get_submodule_config "$name" branch) - branch="${config_branch:-master}" - local_branch="$branch" + branch=$(get_submodule_config "$name" branch master) if ! test -z "$update" then update_module=$update @@ -834,19 +819,11 @@ cmd_update() displaypath=$(relative_path "$prefix$sm_path") - case "$update_module" in - none) + if test "$update_module" = "none" + then echo "Skipping submodule '$displaypath'" continue - ;; - checkout) - local_branch="" - ;; - rebase | merge | !*) - ;; - *) - die "$(eval_gettext "Invalid update mode '$update_module' for submodule '$name'")" - esac + fi if test -z "$url" then @@ -860,8 +837,7 @@ Maybe you want to use 'update --init'?")" if ! test -d "$sm_path"/.git -o -f "$sm_path"/.git then - start_point="origin/${branch}" - module_clone "$sm_path" "$name" "$url" "$reference" "$depth" "$start_point" "$local_branch" || exit + module_clone "$sm_path" "$name" "$url" "$reference" "$depth" || exit cloned_modules="$cloned_modules;$name" subsha1= else @@ -907,7 +883,7 @@ Maybe you want to use 'update --init'?")" case ";$cloned_modules;" in *";$name;"*) # then there is no local change to integrate - update_module='!git reset --hard -q' + update_module=checkout ;; esac must_die_on_failure= |