From: Zbigniew Jędrzejewski-Szmek Date: Thu, 23 Apr 2026 20:56:20 +0000 (+0200) Subject: sysupdate: reorder verb functions and parse_argv cases to match --help X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=349bb00979ca192352eb137fd91fd038428528d1;p=thirdparty%2Fsystemd.git sysupdate: reorder verb functions and parse_argv cases to match --help --transfer-source= is moved up to a better place. Co-developed-by: Claude Opus 4.7 --- diff --git a/src/sysupdate/sysupdate.c b/src/sysupdate/sysupdate.c index 76b6507f9a4..254b6bc121e 100644 --- a/src/sysupdate/sysupdate.c +++ b/src/sysupdate/sysupdate.c @@ -1518,29 +1518,6 @@ static int verb_check_new(int argc, char *argv[], uintptr_t _data, void *userdat return EXIT_SUCCESS; } -static int verb_vacuum(int argc, char *argv[], uintptr_t _data, void *userdata) { - _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL; - _cleanup_(umount_and_rmdir_and_freep) char *mounted_dir = NULL; - _cleanup_(context_freep) Context* context = NULL; - int r; - - assert(argc <= 1); - - if (arg_instances_max < 1) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), - "The --instances-max argument must be >= 1 while vacuuming"); - - r = process_image(/* ro= */ false, &mounted_dir, &loop_device); - if (r < 0) - return r; - - r = context_make_offline(&context, loop_device ? loop_device->node : NULL, /* requires_enabled_transfers= */ false); - if (r < 0) - return r; - - return context_vacuum(context, 0, NULL); -} - typedef enum { UPDATE_ACTION_ACQUIRE = 1 << 0, UPDATE_ACTION_INSTALL = 1 << 1, @@ -1626,6 +1603,29 @@ static int verb_acquire(int argc, char *argv[], uintptr_t _data, void *userdata) return verb_update_impl(argc, argv, UPDATE_ACTION_ACQUIRE); } +static int verb_vacuum(int argc, char *argv[], uintptr_t _data, void *userdata) { + _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL; + _cleanup_(umount_and_rmdir_and_freep) char *mounted_dir = NULL; + _cleanup_(context_freep) Context* context = NULL; + int r; + + assert(argc <= 1); + + if (arg_instances_max < 1) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), + "The --instances-max argument must be >= 1 while vacuuming"); + + r = process_image(/* ro= */ false, &mounted_dir, &loop_device); + if (r < 0) + return r; + + r = context_make_offline(&context, loop_device ? loop_device->node : NULL, /* requires_enabled_transfers= */ false); + if (r < 0) + return r; + + return context_vacuum(context, 0, NULL); +} + static int verb_pending_or_reboot(int argc, char *argv[], uintptr_t _data, void *userdata) { _cleanup_(context_freep) Context* context = NULL; _cleanup_free_ char *booted_version = NULL; @@ -1820,6 +1820,8 @@ static int help(void) { " --image=PATH Operate on disk image as filesystem root\n" " --image-policy=POLICY\n" " Specify disk image dissection policy\n" + " --transfer-source=PATH\n" + " Specify the directory to transfer sources from\n" " -m --instances-max=INT How many instances to maintain\n" " --sync=BOOL Controls whether to sync data to disk\n" " --verify=BOOL Force signature verification on or off\n" @@ -1829,8 +1831,6 @@ static int help(void) { " --no-legend Do not show the headers and footers\n" " --json=pretty|short|off\n" " Generate JSON output\n" - " --transfer-source=PATH\n" - " Specify the directory to transfer sources from\n" "\nSee the %2$s for details.\n", program_invocation_short_name, link, @@ -1866,20 +1866,20 @@ static int parse_argv(int argc, char *argv[]) { static const struct option options[] = { { "help", no_argument, NULL, 'h' }, { "version", no_argument, NULL, ARG_VERSION }, - { "no-pager", no_argument, NULL, ARG_NO_PAGER }, - { "no-legend", no_argument, NULL, ARG_NO_LEGEND }, + { "component", required_argument, NULL, 'C' }, { "definitions", required_argument, NULL, ARG_DEFINITIONS }, - { "instances-max", required_argument, NULL, 'm' }, - { "sync", required_argument, NULL, ARG_SYNC }, - { "json", required_argument, NULL, ARG_JSON }, { "root", required_argument, NULL, ARG_ROOT }, { "image", required_argument, NULL, ARG_IMAGE }, { "image-policy", required_argument, NULL, ARG_IMAGE_POLICY }, - { "reboot", no_argument, NULL, ARG_REBOOT }, - { "component", required_argument, NULL, 'C' }, + { "transfer-source", required_argument, NULL, ARG_TRANSFER_SOURCE }, + { "instances-max", required_argument, NULL, 'm' }, + { "sync", required_argument, NULL, ARG_SYNC }, { "verify", required_argument, NULL, ARG_VERIFY }, + { "reboot", no_argument, NULL, ARG_REBOOT }, { "offline", no_argument, NULL, ARG_OFFLINE }, - { "transfer-source", required_argument, NULL, ARG_TRANSFER_SOURCE }, + { "no-pager", no_argument, NULL, ARG_NO_PAGER }, + { "no-legend", no_argument, NULL, ARG_NO_LEGEND }, + { "json", required_argument, NULL, ARG_JSON }, {} }; @@ -1898,25 +1898,22 @@ static int parse_argv(int argc, char *argv[]) { case ARG_VERSION: return version(); - case ARG_NO_PAGER: - arg_pager_flags |= PAGER_DISABLE; - break; - - case ARG_NO_LEGEND: - arg_legend = false; - break; + case 'C': + if (isempty(optarg)) { + arg_component = mfree(arg_component); + break; + } - case 'm': - r = safe_atou64(optarg, &arg_instances_max); + r = component_name_valid(optarg); if (r < 0) - return log_error_errno(r, "Failed to parse --instances-max= parameter: %s", optarg); - - break; + return log_error_errno(r, "Failed to determine if component name is valid: %m"); + if (r == 0) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Component name invalid: %s", optarg); - case ARG_SYNC: - r = parse_boolean_argument("--sync=", optarg, &arg_sync); + r = free_and_strdup_warn(&arg_component, optarg); if (r < 0) return r; + break; case ARG_DEFINITIONS: @@ -1925,13 +1922,6 @@ static int parse_argv(int argc, char *argv[]) { return r; break; - case ARG_JSON: - r = parse_json_argument(optarg, &arg_json_format_flags); - if (r <= 0) - return r; - - break; - case ARG_ROOT: r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_root); if (r < 0) @@ -1950,26 +1940,24 @@ static int parse_argv(int argc, char *argv[]) { return r; break; - case ARG_REBOOT: - arg_reboot = true; - break; + case ARG_TRANSFER_SOURCE: + r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_transfer_source); + if (r < 0) + return r; - case 'C': - if (isempty(optarg)) { - arg_component = mfree(arg_component); - break; - } + break; - r = component_name_valid(optarg); + case 'm': + r = safe_atou64(optarg, &arg_instances_max); if (r < 0) - return log_error_errno(r, "Failed to determine if component name is valid: %m"); - if (r == 0) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Component name invalid: %s", optarg); + return log_error_errno(r, "Failed to parse --instances-max= parameter: %s", optarg); - r = free_and_strdup_warn(&arg_component, optarg); + break; + + case ARG_SYNC: + r = parse_boolean_argument("--sync=", optarg, &arg_sync); if (r < 0) return r; - break; case ARG_VERIFY: { @@ -1983,13 +1971,25 @@ static int parse_argv(int argc, char *argv[]) { break; } + case ARG_REBOOT: + arg_reboot = true; + break; + case ARG_OFFLINE: arg_offline = true; break; - case ARG_TRANSFER_SOURCE: - r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_transfer_source); - if (r < 0) + case ARG_NO_PAGER: + arg_pager_flags |= PAGER_DISABLE; + break; + + case ARG_NO_LEGEND: + arg_legend = false; + break; + + case ARG_JSON: + r = parse_json_argument(optarg, &arg_json_format_flags); + if (r <= 0) return r; break;