git-submodule.sh: allow running in validate mode without previous update

The call to git-submodule.sh done in configure may happen without a
previous checkout of the roms/SLOF submodule, or even without a
previous run of the script.

So, handle creating a .git-submodule-status file even in validate
mode.  If git is absent, ensure that all passed directories exists
(because you should be in a fresh untar and will not have stale
arguments to git-submodule.sh) but do no other checks.  If git
is present, ensure that .git-submodule-status contains an entry
for all submodules passed on the command line.

With this change, "ignore" mode is not needed anymore.

Reported-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
Fixes: b11f9bd96f ("configure: move SLOF submodule handling to pc-bios/s390-ccw", 2023-06-06)
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2023-06-18 23:10:39 +02:00
parent 63fd8ef080
commit 8edddaa23d
2 changed files with 42 additions and 33 deletions

2
configure vendored
View File

@ -758,7 +758,7 @@ done
if ! test -e "$source_path/.git" if ! test -e "$source_path/.git"
then then
git_submodules_action="ignore" git_submodules_action="validate"
fi fi
# test for any invalid configuration combinations # test for any invalid configuration combinations

View File

@ -9,13 +9,22 @@ command=$1
shift shift
maybe_modules="$@" maybe_modules="$@"
# if not running in a git checkout, do nothing test -z "$maybe_modules" && exit 0
test "$command" = "ignore" && exit 0
test -z "$GIT" && GIT=$(command -v git) test -z "$GIT" && GIT=$(command -v git)
cd "$(dirname "$0")/.." cd "$(dirname "$0")/.."
no_git_error=
if ! test -e ".git"; then
no_git_error='no git checkout exists'
elif test -z "$GIT"; then
no_git_error='git binary not found'
fi
is_git() {
test -z "$no_git_error"
}
update_error() { update_error() {
echo "$0: $*" echo "$0: $*"
echo echo
@ -34,7 +43,7 @@ update_error() {
} }
validate_error() { validate_error() {
if test "$1" = "validate"; then if is_git && test "$1" = "validate"; then
echo "GIT submodules checkout is out of date, and submodules" echo "GIT submodules checkout is out of date, and submodules"
echo "configured for validate only. Please run" echo "configured for validate only. Please run"
echo " scripts/git-submodule.sh update $maybe_modules" echo " scripts/git-submodule.sh update $maybe_modules"
@ -51,42 +60,42 @@ check_updated() {
test "$CURSTATUS" = "$OLDSTATUS" test "$CURSTATUS" = "$OLDSTATUS"
} }
if test -n "$maybe_modules" && ! test -e ".git" if is_git; then
then test -e $substat || touch $substat
echo "$0: unexpectedly called with submodules but no git checkout exists" modules=""
exit 1 for m in $maybe_modules
do
$GIT submodule status $m 1> /dev/null 2>&1
if test $? = 0
then
modules="$modules $m"
grep $m $substat > /dev/null 2>&1 || $GIT submodule status $module >> $substat
else
echo "warn: ignoring non-existent submodule $m"
fi
done
else
modules=$maybe_modules
fi fi
if test -n "$maybe_modules" && test -z "$GIT"
then
echo "$0: unexpectedly called with submodules but git binary not found"
exit 1
fi
modules=""
for m in $maybe_modules
do
$GIT submodule status $m 1> /dev/null 2>&1
if test $? = 0
then
modules="$modules $m"
else
echo "warn: ignoring non-existent submodule $m"
fi
done
case "$command" in case "$command" in
status|validate) status|validate)
test -f "$substat" || validate_error "$command"
test -z "$maybe_modules" && exit 0
for module in $modules; do for module in $modules; do
check_updated $module || validate_error "$command" if is_git; then
check_updated $module || validate_error "$command"
elif ! (set xyz "$module"/* && test -e "$2"); then
# The directory does not exist or it contains no files
echo "$0: sources not available for $module and $no_git_error"
validate_error "$command"
fi
done done
exit 0
;; ;;
update) update)
test -e $substat || touch $substat is_git || {
test -z "$maybe_modules" && exit 0 echo "$0: unexpectedly called with submodules but $no_git_error"
exit 1
}
$GIT submodule update --init $modules 1>/dev/null $GIT submodule update --init $modules 1>/dev/null
test $? -ne 0 && update_error "failed to update modules" test $? -ne 0 && update_error "failed to update modules"