From: dongshengyuan <545258830@qq.com> Date: Sun, 26 Jul 2026 04:17:17 +0000 (+0800) Subject: sysupdate: include default component for feature-all X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bbe99a925b92ac00f7539af953757ec838e1db60;p=thirdparty%2Fsystemd.git sysupdate: include default component for feature-all --component-all is documented to include the default component-less installation. Do not drop it merely because the context operates on a root/image, or because all its transfers are currently disabled by features. This lets --component-all --feature-all enable-feature write the default component feature drop-ins instead of succeeding with no components selected. TEST-72-SYSUPDATE covers both all transfers disabled by features and the same default component feature operation under --root=. Repro: create a default feata.feature plus a transfer gated by feata, then run: build/systemd-sysupdate --root="$root" --component-all --feature-all enable-feature Before: no drop-in was written. Follow-up for: 4481661a75acc01b5d66aa36443a7b80b557e4ba --- diff --git a/src/sysupdate/sysupdate.c b/src/sysupdate/sysupdate.c index 07f6f7ab777..9ae80a2a8bf 100644 --- a/src/sysupdate/sysupdate.c +++ b/src/sysupdate/sysupdate.c @@ -2949,15 +2949,13 @@ static int context_list_components(Context *context, char ***ret_component_names if (ret_component_names) *ret_component_names = TAKE_PTR(z); - /* Does the system have at least one transfer file in /etc/sysupdate.d, which can be considered a - * TARGET_HOST? See target_get_argument() in sysupdated.c */ + /* Does the system have at least one transfer file in sysupdate.d, which can be considered the + * default component-less installation? */ if (ret_has_default_component) *ret_has_default_component = !context->definitions && !context->component && - !context->root && - !context->image && - context->n_transfers > 0; + context->n_transfers + context->n_disabled_transfers > 0; return 0; } diff --git a/test/units/TEST-72-SYSUPDATE.sh b/test/units/TEST-72-SYSUPDATE.sh index f1c4b951c9d..1ddb2ac9b9d 100755 --- a/test/units/TEST-72-SYSUPDATE.sh +++ b/test/units/TEST-72-SYSUPDATE.sh @@ -1833,6 +1833,50 @@ assert_dropin "$(feat_enable_dropin_default featc)" yes test ! -e "$(feat_enable_dropin_default featb)" set_machine_tags "" +# --component-all must still include the default component when all of its +# transfers are currently disabled by features. +compfeat_reset +compfeat_source v1 +mkdir -p /run/sysupdate.d +compfeat_transfer /run/sysupdate.d/50-feata.transfer feata "$CF/target-default" feata +cat >/run/sysupdate.d/feata.feature <"$ROOT_FEATURE_ROOT/etc/sysupdate.d/50-feata.transfer" <"$ROOT_FEATURE_ROOT/etc/sysupdate.d/feata.feature" <