submodule: remove bashism from shell script
Junio pointed out `relative_path` was using bashisms via the local variables. As the longer term goal is to rewrite most of the submodule code in C, do it now. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
b0f4b40846
commit
44431df024
@ -831,6 +831,17 @@ static int update_clone(int argc, const char **argv, const char *prefix)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int resolve_relative_path(int argc, const char **argv, const char *prefix)
|
||||||
|
{
|
||||||
|
struct strbuf sb = STRBUF_INIT;
|
||||||
|
if (argc != 3)
|
||||||
|
die("submodule--helper relative_path takes exactly 2 arguments, got %d", argc);
|
||||||
|
|
||||||
|
printf("%s", relative_path(argv[1], argv[2], &sb));
|
||||||
|
strbuf_release(&sb);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
struct cmd_struct {
|
struct cmd_struct {
|
||||||
const char *cmd;
|
const char *cmd;
|
||||||
int (*fn)(int, const char **, const char *);
|
int (*fn)(int, const char **, const char *);
|
||||||
@ -841,6 +852,7 @@ static struct cmd_struct commands[] = {
|
|||||||
{"name", module_name},
|
{"name", module_name},
|
||||||
{"clone", module_clone},
|
{"clone", module_clone},
|
||||||
{"update-clone", update_clone},
|
{"update-clone", update_clone},
|
||||||
|
{"relative-path", resolve_relative_path},
|
||||||
{"resolve-relative-url", resolve_relative_url},
|
{"resolve-relative-url", resolve_relative_url},
|
||||||
{"resolve-relative-url-test", resolve_relative_url_test},
|
{"resolve-relative-url-test", resolve_relative_url_test},
|
||||||
{"init", module_init}
|
{"init", module_init}
|
||||||
|
@ -46,41 +46,6 @@ prefix=
|
|||||||
custom_name=
|
custom_name=
|
||||||
depth=
|
depth=
|
||||||
|
|
||||||
# Resolve a path to be relative to another path. This is intended for
|
|
||||||
# converting submodule paths when git-submodule is run in a subdirectory
|
|
||||||
# and only handles paths where the directory separator is '/'.
|
|
||||||
#
|
|
||||||
# The output is the first argument as a path relative to the second argument,
|
|
||||||
# which defaults to $wt_prefix if it is omitted.
|
|
||||||
relative_path ()
|
|
||||||
{
|
|
||||||
local target curdir result
|
|
||||||
target=$1
|
|
||||||
curdir=${2-$wt_prefix}
|
|
||||||
curdir=${curdir%/}
|
|
||||||
result=
|
|
||||||
|
|
||||||
while test -n "$curdir"
|
|
||||||
do
|
|
||||||
case "$target" in
|
|
||||||
"$curdir/"*)
|
|
||||||
target=${target#"$curdir"/}
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
result="${result}../"
|
|
||||||
if test "$curdir" = "${curdir%/*}"
|
|
||||||
then
|
|
||||||
curdir=
|
|
||||||
else
|
|
||||||
curdir="${curdir%/*}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "$result$target"
|
|
||||||
}
|
|
||||||
|
|
||||||
die_if_unmatched ()
|
die_if_unmatched ()
|
||||||
{
|
{
|
||||||
if test "$1" = "#unmatched"
|
if test "$1" = "#unmatched"
|
||||||
@ -354,14 +319,14 @@ cmd_foreach()
|
|||||||
die_if_unmatched "$mode"
|
die_if_unmatched "$mode"
|
||||||
if test -e "$sm_path"/.git
|
if test -e "$sm_path"/.git
|
||||||
then
|
then
|
||||||
displaypath=$(relative_path "$prefix$sm_path")
|
displaypath=$(git submodule--helper relative-path "$prefix$sm_path" "$wt_prefix")
|
||||||
say "$(eval_gettext "Entering '\$displaypath'")"
|
say "$(eval_gettext "Entering '\$displaypath'")"
|
||||||
name=$(git submodule--helper name "$sm_path")
|
name=$(git submodule--helper name "$sm_path")
|
||||||
(
|
(
|
||||||
prefix="$prefix$sm_path/"
|
prefix="$prefix$sm_path/"
|
||||||
sanitize_submodule_env
|
sanitize_submodule_env
|
||||||
cd "$sm_path" &&
|
cd "$sm_path" &&
|
||||||
sm_path=$(relative_path "$sm_path") &&
|
sm_path=$(git submodule--helper relative-path "$sm_path" "$wt_prefix") &&
|
||||||
# we make $path available to scripts ...
|
# we make $path available to scripts ...
|
||||||
path=$sm_path &&
|
path=$sm_path &&
|
||||||
if test $# -eq 1
|
if test $# -eq 1
|
||||||
@ -465,7 +430,7 @@ cmd_deinit()
|
|||||||
die_if_unmatched "$mode"
|
die_if_unmatched "$mode"
|
||||||
name=$(git submodule--helper name "$sm_path") || exit
|
name=$(git submodule--helper name "$sm_path") || exit
|
||||||
|
|
||||||
displaypath=$(relative_path "$sm_path")
|
displaypath=$(git submodule--helper relative-path "$sm_path" "$wt_prefix")
|
||||||
|
|
||||||
# Remove the submodule work tree (unless the user already did it)
|
# Remove the submodule work tree (unless the user already did it)
|
||||||
if test -d "$sm_path"
|
if test -d "$sm_path"
|
||||||
@ -629,7 +594,7 @@ cmd_update()
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
displaypath=$(relative_path "$prefix$sm_path")
|
displaypath=$(git submodule--helper relative-path "$prefix$sm_path" "$wt_prefix")
|
||||||
|
|
||||||
if test $just_cloned -eq 1
|
if test $just_cloned -eq 1
|
||||||
then
|
then
|
||||||
@ -723,7 +688,7 @@ cmd_update()
|
|||||||
if test -n "$recursive"
|
if test -n "$recursive"
|
||||||
then
|
then
|
||||||
(
|
(
|
||||||
prefix=$(relative_path "$prefix$sm_path/")
|
prefix=$(git submodule--helper relative-path "$prefix$sm_path/" "$wt_prefix")
|
||||||
wt_prefix=
|
wt_prefix=
|
||||||
sanitize_submodule_env
|
sanitize_submodule_env
|
||||||
cd "$sm_path" &&
|
cd "$sm_path" &&
|
||||||
@ -907,7 +872,7 @@ cmd_summary() {
|
|||||||
! GIT_DIR="$name/.git" git-rev-parse -q --verify $sha1_dst^0 >/dev/null &&
|
! GIT_DIR="$name/.git" git-rev-parse -q --verify $sha1_dst^0 >/dev/null &&
|
||||||
missing_dst=t
|
missing_dst=t
|
||||||
|
|
||||||
display_name=$(relative_path "$name")
|
display_name=$(git submodule--helper relative-path "$name" "$wt_prefix")
|
||||||
|
|
||||||
total_commits=
|
total_commits=
|
||||||
case "$missing_src,$missing_dst" in
|
case "$missing_src,$missing_dst" in
|
||||||
@ -1028,7 +993,7 @@ cmd_status()
|
|||||||
die_if_unmatched "$mode"
|
die_if_unmatched "$mode"
|
||||||
name=$(git submodule--helper name "$sm_path") || exit
|
name=$(git submodule--helper name "$sm_path") || exit
|
||||||
url=$(git config submodule."$name".url)
|
url=$(git config submodule."$name".url)
|
||||||
displaypath=$(relative_path "$prefix$sm_path")
|
displaypath=$(git submodule--helper relative-path "$prefix$sm_path" "$wt_prefix")
|
||||||
if test "$stage" = U
|
if test "$stage" = U
|
||||||
then
|
then
|
||||||
say "U$sha1 $displaypath"
|
say "U$sha1 $displaypath"
|
||||||
@ -1131,7 +1096,7 @@ cmd_sync()
|
|||||||
|
|
||||||
if git config "submodule.$name.url" >/dev/null 2>/dev/null
|
if git config "submodule.$name.url" >/dev/null 2>/dev/null
|
||||||
then
|
then
|
||||||
displaypath=$(relative_path "$prefix$sm_path")
|
displaypath=$(git submodule--helper relative-path "$prefix$sm_path" "$wt_prefix")
|
||||||
say "$(eval_gettext "Synchronizing submodule url for '\$displaypath'")"
|
say "$(eval_gettext "Synchronizing submodule url for '\$displaypath'")"
|
||||||
git config submodule."$name".url "$super_config_url"
|
git config submodule."$name".url "$super_config_url"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user