Skip to content

Commit d851ffb

Browse files
committed
Revert "submodule: explicit local branch creation in module_clone"
This reverts commit 23d25e4, 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.
1 parent edac360 commit d851ffb

File tree

4 files changed

+26
-109
lines changed

4 files changed

+26
-109
lines changed

Documentation/git-submodule.txt

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ SYNOPSIS
1515
'git submodule' [--quiet] init [--] [<path>...]
1616
'git submodule' [--quiet] deinit [-f|--force] [--] <path>...
1717
'git submodule' [--quiet] update [--init] [--remote] [-N|--no-fetch]
18-
[-f|--force] [--checkout|--rebase|--merge] [--reference <repository>]
18+
[-f|--force] [--rebase|--merge] [--reference <repository>]
1919
[--depth <depth>] [--recursive] [--] [<path>...]
2020
'git submodule' [--quiet] summary [--cached|--files] [(-n|--summary-limit) <n>]
2121
[commit] [--] [<path>...]
@@ -155,31 +155,13 @@ it contains local modifications.
155155

156156
update::
157157
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.
183165
+
184166
If the submodule is not yet initialized, and you just want to use the
185167
setting as stored in .gitmodules, you can automatically initialize the

Documentation/gitmodules.txt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,6 @@ submodule.<name>.branch::
5555
A remote branch name for tracking updates in the upstream submodule.
5656
If the option is not specified, it defaults to 'master'. See the
5757
`--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.
6258

6359
submodule.<name>.fetchRecurseSubmodules::
6460
This option can be used to control recursive fetching of this

git-submodule.sh

Lines changed: 17 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -246,9 +246,6 @@ module_name()
246246
# $3 = URL to clone
247247
# $4 = reference repository to reuse (empty for independent)
248248
# $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)
252249
#
253250
# Prior to calling, cmd_update checks that a possibly existing
254251
# path is not a git repository.
@@ -262,8 +259,6 @@ module_clone()
262259
url=$3
263260
reference="$4"
264261
depth="$5"
265-
start_point="$6"
266-
local_branch="$7"
267262
quiet=
268263
if test -n "$GIT_QUIET"
269264
then
@@ -317,16 +312,7 @@ module_clone()
317312
echo "gitdir: $rel/$a" >"$sm_path/.git"
318313

319314
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")
330316
}
331317

332318
isnumber()
@@ -489,15 +475,16 @@ Use -f if you really want to add it." >&2
489475
echo "$(eval_gettext "Reactivating local git directory for submodule '\$sm_name'.")"
490476
fi
491477
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'")"
501488
fi
502489
git config submodule."$sm_name".url "$realrepo"
503490

@@ -818,9 +805,7 @@ cmd_update()
818805
fi
819806
name=$(module_name "$sm_path") || exit
820807
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)
824809
if ! test -z "$update"
825810
then
826811
update_module=$update
@@ -834,19 +819,11 @@ cmd_update()
834819

835820
displaypath=$(relative_path "$prefix$sm_path")
836821

837-
case "$update_module" in
838-
none)
822+
if test "$update_module" = "none"
823+
then
839824
echo "Skipping submodule '$displaypath'"
840825
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
850827

851828
if test -z "$url"
852829
then
@@ -860,8 +837,7 @@ Maybe you want to use 'update --init'?")"
860837

861838
if ! test -d "$sm_path"/.git -o -f "$sm_path"/.git
862839
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
865841
cloned_modules="$cloned_modules;$name"
866842
subsha1=
867843
else
@@ -907,7 +883,7 @@ Maybe you want to use 'update --init'?")"
907883
case ";$cloned_modules;" in
908884
*";$name;"*)
909885
# then there is no local change to integrate
910-
update_module='!git reset --hard -q'
886+
update_module=checkout ;;
911887
esac
912888

913889
must_die_on_failure=

t/t7406-submodule-update.sh

Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,6 @@ test_expect_success 'setup a submodule tree' '
6363
git submodule add ../none none &&
6464
test_tick &&
6565
git commit -m "none"
66-
) &&
67-
(cd super &&
68-
git tag initial-setup
6966
)
7067
'
7168

@@ -706,7 +703,7 @@ test_expect_success 'submodule update places git-dir in superprojects git-dir re
706703
git clone super_update_r super_update_r2 &&
707704
(cd super_update_r2 &&
708705
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 &&
710707
(cd submodule/subsubmodule &&
711708
git log > ../../expected
712709
) &&
@@ -777,38 +774,4 @@ test_expect_success 'submodule update --recursive drops module name before recur
777774
test_i18ngrep "Submodule path .deeper/submodule/subsubmodule.: checked out" actual
778775
)
779776
'
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-
814777
test_done

0 commit comments

Comments
 (0)