Revert "submodule: explicit local branch creation in module_clone"

This reverts commit 23d25e48f5ead73c9ce233986f90791abec9f1e8, as it is broken for users who haven't opted into the new feature of checking out submodule.*.branch with update mode set to checkout.

Junio C Hamano committed Apr 2, 2014 at 14:15 UTC d851ffb91f8c25f51b284cd4e849757d656de0d1
4 files changed +26 -109
Documentation/git-submodule.txt
+8 -26
@@ -15,7 +15,7 @@ SYNOPSIS
15 'git submodule' [--quiet] init [--] [<path>...]
16 'git submodule' [--quiet] deinit [-f|--force] [--] <path>...
17 'git submodule' [--quiet] update [--init] [--remote] [-N|--no-fetch]
18 - [-f|--force] [--checkout|--rebase|--merge] [--reference <repository>]
18 + [-f|--force] [--rebase|--merge] [--reference <repository>]
19 [--depth <depth>] [--recursive] [--] [<path>...]
20 'git submodule' [--quiet] summary [--cached|--files] [(-n|--summary-limit) <n>]
21 [commit] [--] [<path>...]
@@ -155,31 +155,13 @@ it contains local modifications.
155
156 update::
157 Update the registered submodules, i.e. clone missing submodules and
158 - checkout the commit specified in the index of the containing
159 - repository. The update mode defaults to `checkout`, but can be
160 - configured with the `submodule.<name>.update` setting or the
161 - `--rebase`, `--merge`, or `--checkout` options.
162 -+
163 -For updates that clone missing submodules, checkout-mode updates will
164 -create submodules with detached HEADs; all other modes will create
165 -submodules with a local branch named after `submodule.<path>.branch`.
166 -+
167 -For updates that do not clone missing submodules, the submodule's HEAD
168 -is only touched when the remote reference does not match the
169 -submodule's HEAD (for none-mode updates, the submodule is never
170 -touched). The remote reference is usually the gitlinked commit from
171 -the superproject's tree, but with `--remote` it is the upstream
172 -subproject's `submodule.<name>.branch`. This remote reference is
173 -integrated with the submodule's HEAD using the specified update mode.
174 -For checkout-mode updates, that will result in a detached HEAD. For
175 -rebase- and merge-mode updates, the commit referenced by the
176 -submodule's HEAD may change, but the symbolic reference will remain
177 -unchanged (i.e. checked-out branches will still be checked-out
178 -branches, and detached HEADs will still be detached HEADs). If none
179 -of the builtin modes fit your needs, set `submodule.<name>.update` to
180 -`!command` to configure a custom integration command. `command` can
181 -be any arbitrary shell command that takes a single argument, namely
182 -the sha1 to update to.
158 + checkout the commit specified in the index of the containing repository.
159 + This will make the submodules HEAD be detached unless `--rebase` or
160 + `--merge` is specified or the key `submodule.$name.update` is set to
161 + `rebase`, `merge` or `none`. `none` can be overridden by specifying
162 + `--checkout`. Setting the key `submodule.$name.update` to `!command`
163 + will cause `command` to be run. `command` can be any arbitrary shell
164 + command that takes a single argument, namely the sha1 to update to.
165 +
166 If the submodule is not yet initialized, and you just want to use the
167 setting as stored in .gitmodules, you can automatically initialize the
Documentation/gitmodules.txt
-4
@@ -55,10 +55,6 @@ submodule.<name>.branch::
55 A remote branch name for tracking updates in the upstream submodule.
56 If the option is not specified, it defaults to 'master'. See the
57 `--remote` documentation in linkgit:git-submodule[1] for details.
58 -+
59 -This branch name is also used for the local branch created by
60 -non-checkout cloning updates. See the `update` documentation in
61 -linkgit:git-submodule[1] for details.
58
59 submodule.<name>.fetchRecurseSubmodules::
60 This option can be used to control recursive fetching of this
git-submodule.sh
+17 -41
@@ -246,9 +246,6 @@ module_name()
246 # $3 = URL to clone
247 # $4 = reference repository to reuse (empty for independent)
248 # $5 = depth argument for shallow clones (empty for deep)
249 -# $6 = (remote-tracking) starting point for the local branch (empty for HEAD)
250 -# $7 = local branch to create (empty for a detached HEAD, unless $6 is
251 -# also empty, in which case the local branch is left unchanged)
249 #
250 # Prior to calling, cmd_update checks that a possibly existing
251 # path is not a git repository.
@@ -262,8 +259,6 @@ module_clone()
259 url=$3
260 reference="$4"
261 depth="$5"
265 - start_point="$6"
266 - local_branch="$7"
262 quiet=
263 if test -n "$GIT_QUIET"
264 then
@@ -317,16 +312,7 @@ module_clone()
312 echo "gitdir: $rel/$a" >"$sm_path/.git"
313
314 rel=$(echo $a | sed -e 's|[^/][^/]*|..|g')
320 - (
321 - clear_local_git_env
322 - cd "$sm_path" &&
323 - GIT_WORK_TREE=. git config core.worktree "$rel/$b" &&
324 - # ash fails to wordsplit ${local_branch:+-B "$local_branch"...}
325 - case "$local_branch" in
326 - '') git checkout -f -q ${start_point:+"$start_point"} ;;
327 - ?*) git checkout -f -q -B "$local_branch" ${start_point:+"$start_point"} ;;
328 - esac
329 - ) || die "$(eval_gettext "Unable to setup cloned submodule '\$sm_path'")"
315 + (clear_local_git_env; cd "$sm_path" && GIT_WORK_TREE=. git config core.worktree "$rel/$b")
316 }
317
318 isnumber()
@@ -489,15 +475,16 @@ Use -f if you really want to add it." >&2
475 echo "$(eval_gettext "Reactivating local git directory for submodule '\$sm_name'.")"
476 fi
477 fi
492 - if test -n "$branch"
493 - then
494 - start_point="origin/$branch"
495 - local_branch="$branch"
496 - else
497 - start_point=""
498 - local_branch=""
499 - fi
500 - module_clone "$sm_path" "$sm_name" "$realrepo" "$reference" "$depth" "$start_point" "$local_branch" || exit
478 + module_clone "$sm_path" "$sm_name" "$realrepo" "$reference" "$depth" || exit
479 + (
480 + clear_local_git_env
481 + cd "$sm_path" &&
482 + # ash fails to wordsplit ${branch:+-b "$branch"...}
483 + case "$branch" in
484 + '') git checkout -f -q ;;
485 + ?*) git checkout -f -q -B "$branch" "origin/$branch" ;;
486 + esac
487 + ) || die "$(eval_gettext "Unable to checkout submodule '\$sm_path'")"
488 fi
489 git config submodule."$sm_name".url "$realrepo"
490
@@ -818,9 +805,7 @@ cmd_update()
805 fi
806 name=$(module_name "$sm_path") || exit
807 url=$(git config submodule."$name".url)
821 - config_branch=$(get_submodule_config "$name" branch)
822 - branch="${config_branch:-master}"
823 - local_branch="$branch"
808 + branch=$(get_submodule_config "$name" branch master)
809 if ! test -z "$update"
810 then
811 update_module=$update
@@ -834,19 +819,11 @@ cmd_update()
819
820 displaypath=$(relative_path "$prefix$sm_path")
821
837 - case "$update_module" in
838 - none)
822 + if test "$update_module" = "none"
823 + then
824 echo "Skipping submodule '$displaypath'"
825 continue
841 - ;;
842 - checkout)
843 - local_branch=""
844 - ;;
845 - rebase | merge | !*)
846 - ;;
847 - *)
848 - die "$(eval_gettext "Invalid update mode '$update_module' for submodule '$name'")"
849 - esac
826 + fi
827
828 if test -z "$url"
829 then
@@ -860,8 +837,7 @@ Maybe you want to use 'update --init'?")"
837
838 if ! test -d "$sm_path"/.git -o -f "$sm_path"/.git
839 then
863 - start_point="origin/${branch}"
864 - module_clone "$sm_path" "$name" "$url" "$reference" "$depth" "$start_point" "$local_branch" || exit
840 + module_clone "$sm_path" "$name" "$url" "$reference" "$depth" || exit
841 cloned_modules="$cloned_modules;$name"
842 subsha1=
843 else
@@ -907,7 +883,7 @@ Maybe you want to use 'update --init'?")"
883 case ";$cloned_modules;" in
884 *";$name;"*)
885 # then there is no local change to integrate
910 - update_module='!git reset --hard -q'
886 + update_module=checkout ;;
887 esac
888
889 must_die_on_failure=
t/t7406-submodule-update.sh
+1 -38
@@ -63,9 +63,6 @@ test_expect_success 'setup a submodule tree' '
63 git submodule add ../none none &&
64 test_tick &&
65 git commit -m "none"
66 - ) &&
67 - (cd super &&
68 - git tag initial-setup
66 )
67 '
68
@@ -706,7 +703,7 @@ test_expect_success 'submodule update places git-dir in superprojects git-dir re
703 git clone super_update_r super_update_r2 &&
704 (cd super_update_r2 &&
705 git submodule update --init --recursive >actual &&
709 - test_i18ngrep "Submodule path .submodule/subsubmodule.: .git reset --hard -q" actual &&
706 + test_i18ngrep "Submodule path .submodule/subsubmodule.: checked out" actual &&
707 (cd submodule/subsubmodule &&
708 git log > ../../expected
709 ) &&
@@ -777,38 +774,4 @@ test_expect_success 'submodule update --recursive drops module name before recur
774 test_i18ngrep "Submodule path .deeper/submodule/subsubmodule.: checked out" actual
775 )
776 '
780 -
781 -test_expect_success 'submodule update --checkout clones detached HEAD' '
782 - git clone super super4 &&
783 - echo "detached HEAD" >expected &&
784 - (cd super4 &&
785 - git reset --hard initial-setup &&
786 - git submodule init submodule &&
787 - git submodule update >> /tmp/log 2>&1 &&
788 - (cd submodule &&
789 - git symbolic-ref HEAD > ../../actual ||
790 - echo "detached HEAD" > ../../actual
791 - )
792 - ) &&
793 - test_cmp actual expected &&
794 - rm -rf super4
795 -'
796 -
797 -test_expect_success 'submodule update --merge clones attached HEAD' '
798 - git clone super super4 &&
799 - echo "refs/heads/master" >expected &&
800 - (cd super4 &&
801 - git reset --hard initial-setup &&
802 - git submodule init submodule &&
803 - git config submodule.submodule.update merge &&
804 - git submodule update --merge &&
805 - (cd submodule &&
806 - git symbolic-ref HEAD > ../../actual ||
807 - echo "detached HEAD" > ../../actual
808 - )
809 - ) &&
810 - test_cmp actual expected &&
811 - rm -rf super4
812 -'
813 -
777 test_done