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