Merge pull request #32396 from YHNdnzj/verb-required

shared/verbs: show list of verbs when missing
This commit is contained in:
Luca Boccassi
2024-04-22 18:14:10 +02:00
committed by GitHub
+19 -10
View File
@@ -13,22 +13,21 @@
#include "verbs.h"
#include "virt.h"
/* Wraps running_in_chroot() which is used in various places, but also adds an environment variable check so external
* processes can reliably force this on.
*/
/* Wraps running_in_chroot() which is used in various places, but also adds an environment variable check
* so external processes can reliably force this on. */
bool running_in_chroot_or_offline(void) {
int r;
/* Added to support use cases like rpm-ostree, where from %post scripts we only want to execute "preset", but
* not "start"/"restart" for example.
/* Added to support use cases like rpm-ostree, where from %post scripts we only want to execute "preset",
* but not "start"/"restart" for example.
*
* See docs/ENVIRONMENT.md for docs.
*/
r = getenv_bool("SYSTEMD_OFFLINE");
if (r < 0 && r != -ENXIO)
log_debug_errno(r, "Failed to parse $SYSTEMD_OFFLINE: %m");
else if (r >= 0)
if (r >= 0)
return r > 0;
if (r != -ENXIO)
log_debug_errno(r, "Failed to parse $SYSTEMD_OFFLINE, ignoring: %m");
/* We've had this condition check for a long time which basically checks for legacy chroot case like Fedora's
* "mock", which is used for package builds. We don't want to try to start systemd services there, since
@@ -40,8 +39,7 @@ bool running_in_chroot_or_offline(void) {
*/
r = running_in_chroot();
if (r < 0)
log_debug_errno(r, "running_in_chroot(): %m");
log_debug_errno(r, "Failed to check if we're running in chroot, assuming not: %m");
return r > 0;
}
@@ -145,6 +143,17 @@ int dispatch_verb(int argc, char *argv[], const Verb verbs[], void *userdata) {
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown command verb '%s'.", name);
}
_cleanup_free_ char *verb_list = NULL;
size_t i;
for (i = 0; verbs[i].dispatch; i++)
if (!strextend_with_separator(&verb_list, ", ", verbs[i].verb))
return log_oom();
if (i > 2)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Command verb required (one of %s).", verb_list);
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Command verb required.");
}