Skip to content

Commit

Permalink
Merge branch 'nm/submodule-update-force'
Browse files Browse the repository at this point in the history
* nm/submodule-update-force:
  submodule: Add --force option for git submodule update

Conflicts:
	t/t7406-submodule-update.sh
  • Loading branch information
Junio C Hamano committed May 2, 2011
2 parents 2d23c64 + 9db31bd commit 0d405d7
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 7 deletions.
6 changes: 4 additions & 2 deletions Documentation/git-submodule.txt
Original file line number Diff line number Diff line change
Expand Up @@ -186,8 +186,10 @@ OPTIONS

-f::
--force::
This option is only valid for the add command.
Allow adding an otherwise ignored submodule path.
This option is only valid for add and update commands.
When running add, allow adding an otherwise ignored submodule path.
When running update, throw away local changes in submodules when
switching to a different commit.

--cached::
This option is only valid for status and summary commands. These
Expand Down
14 changes: 9 additions & 5 deletions git-submodule.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ dashless=$(basename "$0" | sed -e 's/-/ /')
USAGE="[--quiet] add [-b branch] [-f|--force] [--reference <repository>] [--] <repository> [<path>]
or: $dashless [--quiet] status [--cached] [--recursive] [--] [<path>...]
or: $dashless [--quiet] init [--] [<path>...]
or: $dashless [--quiet] update [--init] [-N|--no-fetch] [--rebase] [--reference <repository>] [--merge] [--recursive] [--] [<path>...]
or: $dashless [--quiet] update [--init] [-N|--no-fetch] [-f|--force] [--rebase] [--reference <repository>] [--merge] [--recursive] [--] [<path>...]
or: $dashless [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
or: $dashless [--quiet] foreach [--recursive] <command>
or: $dashless [--quiet] sync [--] [<path>...]"
Expand Down Expand Up @@ -402,6 +402,9 @@ cmd_update()
-N|--no-fetch)
nofetch=1
;;
-f|--force)
force=$1
;;
-r|--rebase)
update="rebase"
;;
Expand Down Expand Up @@ -480,10 +483,11 @@ cmd_update()

if test "$subsha1" != "$sha1"
then
force=
if test -z "$subsha1"
subforce=$force
# If we don't already have a -f flag and the submodule has never been checked out
if test -z "$subsha1" -a -z "$force"
then
force="-f"
subforce="-f"
fi

if test -z "$nofetch"
Expand Down Expand Up @@ -515,7 +519,7 @@ cmd_update()
msg="merged in"
;;
*)
command="git checkout $force -q"
command="git checkout $subforce -q"
action="checkout"
msg="checked out"
;;
Expand Down
23 changes: 23 additions & 0 deletions t/t7406-submodule-update.sh
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,29 @@ test_expect_success 'submodule update does not fetch already present commits' '
! test -s actual.err
'

test_expect_success 'submodule update should fail due to local changes' '
(cd super/submodule &&
git reset --hard HEAD~1 &&
echo "local change" > file
) &&
(cd super &&
(cd submodule &&
compare_head
) &&
test_must_fail git submodule update submodule
)
'
test_expect_success 'submodule update should throw away changes with --force ' '
(cd super &&
(cd submodule &&
compare_head
) &&
git submodule update --force submodule &&
cd submodule &&
! compare_head
)
'

test_expect_success 'submodule update --rebase staying on master' '
(cd super/submodule &&
git checkout master
Expand Down

0 comments on commit 0d405d7

Please sign in to comment.