Merge branch 'ar/submodule-add'
Rewrite of "git submodule" in C continues. * ar/submodule-add: submodule: drop unused sm_name parameter from show_fetch_remotes() submodule--helper: introduce add-clone subcommand submodule--helper: refactor module_clone() submodule: prefix die messages with 'fatal' t7400: test failure to add submodule in tracked path
This commit is contained in:
@ -147,7 +147,7 @@ cmd_add()
|
||||
|
||||
if ! git submodule--helper config --check-writeable >/dev/null 2>&1
|
||||
then
|
||||
die "$(eval_gettext "please make sure that the .gitmodules file is in the working tree")"
|
||||
die "fatal: $(eval_gettext "please make sure that the .gitmodules file is in the working tree")"
|
||||
fi
|
||||
|
||||
if test -n "$reference_path"
|
||||
@ -176,7 +176,7 @@ cmd_add()
|
||||
case "$repo" in
|
||||
./*|../*)
|
||||
test -z "$wt_prefix" ||
|
||||
die "$(gettext "Relative path can only be used from the toplevel of the working tree")"
|
||||
die "fatal: $(gettext "Relative path can only be used from the toplevel of the working tree")"
|
||||
|
||||
# dereference source url relative to parent's url
|
||||
realrepo=$(git submodule--helper resolve-relative-url "$repo") || exit
|
||||
@ -186,7 +186,7 @@ cmd_add()
|
||||
realrepo=$repo
|
||||
;;
|
||||
*)
|
||||
die "$(eval_gettext "repo URL: '\$repo' must be absolute or begin with ./|../")"
|
||||
die "fatal: $(eval_gettext "repo URL: '\$repo' must be absolute or begin with ./|../")"
|
||||
;;
|
||||
esac
|
||||
|
||||
@ -205,17 +205,17 @@ cmd_add()
|
||||
if test -z "$force"
|
||||
then
|
||||
git ls-files --error-unmatch "$sm_path" > /dev/null 2>&1 &&
|
||||
die "$(eval_gettext "'\$sm_path' already exists in the index")"
|
||||
die "fatal: $(eval_gettext "'\$sm_path' already exists in the index")"
|
||||
else
|
||||
git ls-files -s "$sm_path" | sane_grep -v "^160000" > /dev/null 2>&1 &&
|
||||
die "$(eval_gettext "'\$sm_path' already exists in the index and is not a submodule")"
|
||||
die "fatal: $(eval_gettext "'\$sm_path' already exists in the index and is not a submodule")"
|
||||
fi
|
||||
|
||||
if test -d "$sm_path" &&
|
||||
test -z $(git -C "$sm_path" rev-parse --show-cdup 2>/dev/null)
|
||||
then
|
||||
git -C "$sm_path" rev-parse --verify -q HEAD >/dev/null ||
|
||||
die "$(eval_gettext "'\$sm_path' does not have a commit checked out")"
|
||||
die "fatal: $(eval_gettext "'\$sm_path' does not have a commit checked out")"
|
||||
fi
|
||||
|
||||
if test -z "$force"
|
||||
@ -238,50 +238,14 @@ cmd_add()
|
||||
|
||||
if ! git submodule--helper check-name "$sm_name"
|
||||
then
|
||||
die "$(eval_gettext "'$sm_name' is not a valid submodule name")"
|
||||
die "fatal: $(eval_gettext "'$sm_name' is not a valid submodule name")"
|
||||
fi
|
||||
|
||||
# perhaps the path exists and is already a git repo, else clone it
|
||||
if test -e "$sm_path"
|
||||
then
|
||||
if test -d "$sm_path"/.git || test -f "$sm_path"/.git
|
||||
then
|
||||
eval_gettextln "Adding existing repo at '\$sm_path' to the index"
|
||||
else
|
||||
die "$(eval_gettext "'\$sm_path' already exists and is not a valid git repo")"
|
||||
fi
|
||||
|
||||
else
|
||||
if test -d ".git/modules/$sm_name"
|
||||
then
|
||||
if test -z "$force"
|
||||
then
|
||||
eval_gettextln >&2 "A git directory for '\$sm_name' is found locally with remote(s):"
|
||||
GIT_DIR=".git/modules/$sm_name" GIT_WORK_TREE=. git remote -v | grep '(fetch)' | sed -e s,^," ", -e s,' (fetch)',, >&2
|
||||
die "$(eval_gettextln "\
|
||||
If you want to reuse this local git directory instead of cloning again from
|
||||
\$realrepo
|
||||
use the '--force' option. If the local git directory is not the correct repo
|
||||
or you are unsure what this means choose another name with the '--name' option.")"
|
||||
else
|
||||
eval_gettextln "Reactivating local git directory for submodule '\$sm_name'."
|
||||
fi
|
||||
fi
|
||||
git submodule--helper clone ${GIT_QUIET:+--quiet} ${progress:+"--progress"} --prefix "$wt_prefix" --path "$sm_path" --name "$sm_name" --url "$realrepo" ${reference:+"$reference"} ${dissociate:+"--dissociate"} ${depth:+"$depth"} || exit
|
||||
(
|
||||
sanitize_submodule_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 submodule--helper add-clone ${GIT_QUIET:+--quiet} ${force:+"--force"} ${progress:+"--progress"} ${branch:+--branch "$branch"} --prefix "$wt_prefix" --path "$sm_path" --name "$sm_name" --url "$realrepo" ${reference:+"$reference"} ${dissociate:+"--dissociate"} ${depth:+"$depth"} || exit
|
||||
git config submodule."$sm_name".url "$realrepo"
|
||||
|
||||
git add --no-warn-embedded-repo $force "$sm_path" ||
|
||||
die "$(eval_gettext "Failed to add submodule '\$sm_path'")"
|
||||
die "fatal: $(eval_gettext "Failed to add submodule '\$sm_path'")"
|
||||
|
||||
git submodule--helper config submodule."$sm_name".path "$sm_path" &&
|
||||
git submodule--helper config submodule."$sm_name".url "$repo" &&
|
||||
@ -290,7 +254,7 @@ or you are unsure what this means choose another name with the '--name' option."
|
||||
git submodule--helper config submodule."$sm_name".branch "$branch"
|
||||
fi &&
|
||||
git add --force .gitmodules ||
|
||||
die "$(eval_gettext "Failed to register submodule '\$sm_path'")"
|
||||
die "fatal: $(eval_gettext "Failed to register submodule '\$sm_path'")"
|
||||
|
||||
# NEEDSWORK: In a multi-working-tree world, this needs to be
|
||||
# set in the per-worktree config.
|
||||
@ -565,7 +529,7 @@ cmd_update()
|
||||
else
|
||||
subsha1=$(sanitize_submodule_env; cd "$sm_path" &&
|
||||
git rev-parse --verify HEAD) ||
|
||||
die "$(eval_gettext "Unable to find current revision in submodule path '\$displaypath'")"
|
||||
die "fatal: $(eval_gettext "Unable to find current revision in submodule path '\$displaypath'")"
|
||||
fi
|
||||
|
||||
if test -n "$remote"
|
||||
@ -575,12 +539,12 @@ cmd_update()
|
||||
then
|
||||
# Fetch remote before determining tracking $sha1
|
||||
fetch_in_submodule "$sm_path" $depth ||
|
||||
die "$(eval_gettext "Unable to fetch in submodule path '\$sm_path'")"
|
||||
die "fatal: $(eval_gettext "Unable to fetch in submodule path '\$sm_path'")"
|
||||
fi
|
||||
remote_name=$(sanitize_submodule_env; cd "$sm_path" && git submodule--helper print-default-remote)
|
||||
sha1=$(sanitize_submodule_env; cd "$sm_path" &&
|
||||
git rev-parse --verify "${remote_name}/${branch}") ||
|
||||
die "$(eval_gettext "Unable to find current \${remote_name}/\${branch} revision in submodule path '\$sm_path'")"
|
||||
die "fatal: $(eval_gettext "Unable to find current \${remote_name}/\${branch} revision in submodule path '\$sm_path'")"
|
||||
fi
|
||||
|
||||
if test "$subsha1" != "$sha1" || test -n "$force"
|
||||
@ -604,36 +568,36 @@ cmd_update()
|
||||
# not be reachable from any of the refs
|
||||
is_tip_reachable "$sm_path" "$sha1" ||
|
||||
fetch_in_submodule "$sm_path" "$depth" "$sha1" ||
|
||||
die "$(eval_gettext "Fetched in submodule path '\$displaypath', but it did not contain \$sha1. Direct fetching of that commit failed.")"
|
||||
die "fatal: $(eval_gettext "Fetched in submodule path '\$displaypath', but it did not contain \$sha1. Direct fetching of that commit failed.")"
|
||||
fi
|
||||
|
||||
must_die_on_failure=
|
||||
case "$update_module" in
|
||||
checkout)
|
||||
command="git checkout $subforce -q"
|
||||
die_msg="$(eval_gettext "Unable to checkout '\$sha1' in submodule path '\$displaypath'")"
|
||||
die_msg="fatal: $(eval_gettext "Unable to checkout '\$sha1' in submodule path '\$displaypath'")"
|
||||
say_msg="$(eval_gettext "Submodule path '\$displaypath': checked out '\$sha1'")"
|
||||
;;
|
||||
rebase)
|
||||
command="git rebase ${GIT_QUIET:+--quiet}"
|
||||
die_msg="$(eval_gettext "Unable to rebase '\$sha1' in submodule path '\$displaypath'")"
|
||||
die_msg="fatal: $(eval_gettext "Unable to rebase '\$sha1' in submodule path '\$displaypath'")"
|
||||
say_msg="$(eval_gettext "Submodule path '\$displaypath': rebased into '\$sha1'")"
|
||||
must_die_on_failure=yes
|
||||
;;
|
||||
merge)
|
||||
command="git merge ${GIT_QUIET:+--quiet}"
|
||||
die_msg="$(eval_gettext "Unable to merge '\$sha1' in submodule path '\$displaypath'")"
|
||||
die_msg="fatal: $(eval_gettext "Unable to merge '\$sha1' in submodule path '\$displaypath'")"
|
||||
say_msg="$(eval_gettext "Submodule path '\$displaypath': merged in '\$sha1'")"
|
||||
must_die_on_failure=yes
|
||||
;;
|
||||
!*)
|
||||
command="${update_module#!}"
|
||||
die_msg="$(eval_gettext "Execution of '\$command \$sha1' failed in submodule path '\$displaypath'")"
|
||||
die_msg="fatal: $(eval_gettext "Execution of '\$command \$sha1' failed in submodule path '\$displaypath'")"
|
||||
say_msg="$(eval_gettext "Submodule path '\$displaypath': '\$command \$sha1'")"
|
||||
must_die_on_failure=yes
|
||||
;;
|
||||
*)
|
||||
die "$(eval_gettext "Invalid update mode '$update_module' for submodule path '$path'")"
|
||||
die "fatal: $(eval_gettext "Invalid update mode '$update_module' for submodule path '$path'")"
|
||||
esac
|
||||
|
||||
if (sanitize_submodule_env; cd "$sm_path" && $command "$sha1")
|
||||
@ -660,7 +624,7 @@ cmd_update()
|
||||
res=$?
|
||||
if test $res -gt 0
|
||||
then
|
||||
die_msg="$(eval_gettext "Failed to recurse into submodule path '\$displaypath'")"
|
||||
die_msg="fatal: $(eval_gettext "Failed to recurse into submodule path '\$displaypath'")"
|
||||
if test $res -ne 2
|
||||
then
|
||||
err="${err};$die_msg"
|
||||
|
Reference in New Issue
Block a user