From b76a76ac15fa3a609982c298e58ee756a6b21f46 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 18 Aug 2025 09:12:27 +0200 Subject: [PATCH] importd: teach all backends --system/--user mode The runtime scope logic is internally already in place, let's expose this via getopt() command line too. This way importd later can propagate the invocation scope down to the backends. --- src/import/export.c | 16 +++++++++++++++- src/import/import-fs.c | 16 +++++++++++++++- src/import/import.c | 16 +++++++++++++++- src/import/pull.c | 16 +++++++++++++++- 4 files changed, 60 insertions(+), 4 deletions(-) diff --git a/src/import/export.c b/src/import/export.c index d891ca1816..bbea5b0343 100644 --- a/src/import/export.c +++ b/src/import/export.c @@ -207,7 +207,9 @@ static int help(int argc, char *argv[], void *userdata) { " --version Show package version\n" " --format=FORMAT Select format\n" " --class=CLASS Select image class (machine, sysext, confext,\n" - " portable)\n", + " portable)\n" + " --system Operate in per-system mode\n" + " --user Operate in per-user mode\n", program_invocation_short_name, ansi_underline(), ansi_normal(), @@ -223,6 +225,8 @@ static int parse_argv(int argc, char *argv[]) { ARG_VERSION = 0x100, ARG_FORMAT, ARG_CLASS, + ARG_SYSTEM, + ARG_USER, }; static const struct option options[] = { @@ -230,6 +234,8 @@ static int parse_argv(int argc, char *argv[]) { { "version", no_argument, NULL, ARG_VERSION }, { "format", required_argument, NULL, ARG_FORMAT }, { "class", required_argument, NULL, ARG_CLASS }, + { "system", no_argument, NULL, ARG_SYSTEM }, + { "user", no_argument, NULL, ARG_USER }, {} }; @@ -262,6 +268,14 @@ static int parse_argv(int argc, char *argv[]) { break; + case ARG_SYSTEM: + arg_runtime_scope = RUNTIME_SCOPE_SYSTEM; + break; + + case ARG_USER: + arg_runtime_scope = RUNTIME_SCOPE_USER; + break; + case '?': return -EINVAL; diff --git a/src/import/import-fs.c b/src/import/import-fs.c index 783b0461ef..342c024d56 100644 --- a/src/import/import-fs.c +++ b/src/import/import-fs.c @@ -280,7 +280,9 @@ static int help(int argc, char *argv[], void *userdata) { " subvolume\n" " --sync=BOOL Controls whether to sync() before completing\n" " --class=CLASS Select image class (machine, sysext, confext,\n" - " portable)\n", + " portable)\n" + " --system Operate in per-system mode\n" + " --user Operate in per-user mode\n", program_invocation_short_name, ansi_underline(), ansi_normal(), @@ -302,6 +304,8 @@ static int parse_argv(int argc, char *argv[]) { ARG_BTRFS_QUOTA, ARG_SYNC, ARG_CLASS, + ARG_SYSTEM, + ARG_USER, }; static const struct option options[] = { @@ -315,6 +319,8 @@ static int parse_argv(int argc, char *argv[]) { { "btrfs-quota", required_argument, NULL, ARG_BTRFS_QUOTA }, { "sync", required_argument, NULL, ARG_SYNC }, { "class", required_argument, NULL, ARG_CLASS }, + { "system", no_argument, NULL, ARG_SYSTEM }, + { "user", no_argument, NULL, ARG_USER }, {} }; @@ -377,6 +383,14 @@ static int parse_argv(int argc, char *argv[]) { break; + case ARG_SYSTEM: + arg_runtime_scope = RUNTIME_SCOPE_SYSTEM; + break; + + case ARG_USER: + arg_runtime_scope = RUNTIME_SCOPE_USER; + break; + case '?': return -EINVAL; diff --git a/src/import/import.c b/src/import/import.c index 9b458dff9f..f41a42f7e6 100644 --- a/src/import/import.c +++ b/src/import/import.c @@ -290,7 +290,9 @@ static int help(int argc, char *argv[], void *userdata) { " --offset=BYTES Offset to seek to in destination\n" " --size-max=BYTES Maximum number of bytes to write to destination\n" " --class=CLASS Select image class (machine, sysext, confext,\n" - " portable)\n", + " portable)\n" + " --system Operate in per-system mode\n" + " --user Operate in per-user mode\n", program_invocation_short_name, ansi_underline(), ansi_normal(), @@ -315,6 +317,8 @@ static int parse_argv(int argc, char *argv[]) { ARG_OFFSET, ARG_SIZE_MAX, ARG_CLASS, + ARG_SYSTEM, + ARG_USER, }; static const struct option options[] = { @@ -331,6 +335,8 @@ static int parse_argv(int argc, char *argv[]) { { "offset", required_argument, NULL, ARG_OFFSET }, { "size-max", required_argument, NULL, ARG_SIZE_MAX }, { "class", required_argument, NULL, ARG_CLASS }, + { "system", no_argument, NULL, ARG_SYSTEM }, + { "user", no_argument, NULL, ARG_USER }, {} }; @@ -430,6 +436,14 @@ static int parse_argv(int argc, char *argv[]) { break; + case ARG_SYSTEM: + arg_runtime_scope = RUNTIME_SCOPE_SYSTEM; + break; + + case ARG_USER: + arg_runtime_scope = RUNTIME_SCOPE_USER; + break; + case '?': return -EINVAL; diff --git a/src/import/pull.c b/src/import/pull.c index 41193e4397..9c915536d8 100644 --- a/src/import/pull.c +++ b/src/import/pull.c @@ -275,7 +275,9 @@ static int help(int argc, char *argv[], void *userdata) { " --class=CLASS Select image class (machine, sysext, confext,\n" " portable)\n" " --keep-download=BOOL Keep a copy pristine copy of the downloaded file\n" - " around\n", + " around\n" + " --system Operate in per-system mode\n" + " --user Operate in per-user mode\n", program_invocation_short_name, ansi_underline(), ansi_normal(), @@ -306,6 +308,8 @@ static int parse_argv(int argc, char *argv[]) { ARG_SIZE_MAX, ARG_CLASS, ARG_KEEP_DOWNLOAD, + ARG_SYSTEM, + ARG_USER, }; static const struct option options[] = { @@ -328,6 +332,8 @@ static int parse_argv(int argc, char *argv[]) { { "size-max", required_argument, NULL, ARG_SIZE_MAX }, { "class", required_argument, NULL, ARG_CLASS }, { "keep-download", required_argument, NULL, ARG_KEEP_DOWNLOAD }, + { "system", no_argument, NULL, ARG_SYSTEM }, + { "user", no_argument, NULL, ARG_USER }, {} }; @@ -508,6 +514,14 @@ static int parse_argv(int argc, char *argv[]) { auto_keep_download = false; break; + case ARG_SYSTEM: + arg_runtime_scope = RUNTIME_SCOPE_SYSTEM; + break; + + case ARG_USER: + arg_runtime_scope = RUNTIME_SCOPE_USER; + break; + case '?': return -EINVAL;