aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2024-11-08 20:54:00 +0200
committerKaren Arutyunov <karen@codesynthesis.com>2024-11-08 20:54:00 +0200
commitf27ec4a7dcb0f5f0d4bccf899d46968879711f9a (patch)
treeb4f4f3faa8cae97a16b97f32b9c51f2766922401
parent950cf3cea8075e3347d72aecbdfb26c8bb2832d4 (diff)
Adapt Fedora system package manager to dnf5dnf5
-rw-r--r--bpkg/system-package-manager-fedora.cxx160
-rw-r--r--bpkg/system-package-manager-fedora.hxx8
-rw-r--r--bpkg/system-package-manager-fedora.test.testscript58
3 files changed, 183 insertions, 43 deletions
diff --git a/bpkg/system-package-manager-fedora.cxx b/bpkg/system-package-manager-fedora.cxx
index f12fa0c..b0d2268 100644
--- a/bpkg/system-package-manager-fedora.cxx
+++ b/bpkg/system-package-manager-fedora.cxx
@@ -189,8 +189,90 @@ namespace bpkg
}
static process_path dnf_path;
+ static optional<bool> dnf_version_5;
+
static process_path sudo_path;
+ static bool
+ dnf5 ()
+ {
+ if (!dnf_version_5)
+ {
+ cstrings args {"dnf", "--version", nullptr};
+
+ // Note that for this command there seems to be no need to run with the
+ // C locale since the output is presumably not localizable. But let's do
+ // it for good measure.
+ //
+ const char* evars[] = {"LC_ALL=C", nullptr};
+
+ try
+ {
+ process_path pp (process::path_search (args[0]));
+ process_env pe (pp, evars);
+
+ if (verb >= 3)
+ print_process (pe, args);
+
+ process pr (pp, args, -2 /* stdin */, -1 /* stdout */, 2);
+
+ string l;
+ try
+ {
+ ifdstream is (move (pr.in_ofd), fdstream_mode::skip);
+ getline (is, l);
+ is.close ();
+ }
+ catch (const io_error& e)
+ {
+ if (pr.wait ())
+ fail << "unable to read " << args[0] << " --version output: " << e;
+
+ // Fall through.
+ }
+
+ if (!pr.wait ())
+ {
+ diag_record dr (fail);
+ dr << args[0] << " exited with non-zero code";
+
+ if (verb < 3)
+ {
+ dr << info << "command line: ";
+ print_process (dr, pe, args);
+ }
+ }
+
+ if (l.empty ())
+ fail << "unable to retrieve dnf version from " << args[0]
+ << " --version output";
+
+/*
+ $ dnf --version
+ dnf5 version 5.2.6.2
+ dnf5 plugin API version 2.0
+ libdnf5 version 5.2.6.2
+ libdnf5 plugin API version 2.0
+
+ Loaded dnf5 plugins:
+ ...
+*/
+ dnf_version_5 = (l.compare (0, 3, "dnf") == 0);
+ }
+ catch (const process_error& e)
+ {
+ error << "unable to execute " << args[0] << ": " << e;
+
+ if (e.child)
+ exit (1);
+
+ throw failed ();
+ }
+ }
+
+ return *dnf_version_5;
+ }
+
// Obtain the installed and candidate versions for the specified list of
// Fedora packages by executing `dnf list`.
//
@@ -263,6 +345,7 @@ namespace bpkg
//
process pr;
if (!simulate_)
+ {
pr = process (dnf_path,
args,
-2 /* stdin */,
@@ -270,6 +353,7 @@ namespace bpkg
2 /* stderr */,
nullptr /* cwd */,
evars);
+ }
else
{
strings k;
@@ -346,7 +430,10 @@ namespace bpkg
for (string l; !eof (getline (is, l)); )
{
- if (l == "Installed Packages")
+ if (l.empty ())
+ continue;
+
+ if (icasecmp (l, "Installed Packages") == 0)
{
if (installed)
fail << "unexpected line '" << l << "'";
@@ -355,7 +442,7 @@ namespace bpkg
continue;
}
- if (l == "Available Packages")
+ if (icasecmp (l, "Available Packages") == 0)
{
if (installed && !*installed)
fail << "duplicate line '" << l << "'";
@@ -568,11 +655,28 @@ namespace bpkg
// error diagnostics (try specifying an unknown option).
//
cstrings args {
- "dnf", "repoquery", "--requires",
+ "dnf", "repoquery",
"--quiet",
- "--cacheonly", // Don't automatically update the metadata.
- "--resolve", // Resolve requirements to packages/versions.
- "--qf", "%{name} %{arch} %{epoch}:%{version}-%{release}"};
+ "--cacheonly"}; // Don't automatically update the metadata.
+
+ // Resolve requirements to packages/versions.
+ //
+ if (simulate_ || dnf5 ())
+ {
+ args.push_back ("--providers-of");
+ args.push_back ("requires");
+
+ args.push_back ("--qf");
+ args.push_back ("%{name} %{arch} %{epoch}:%{version}-%{release}\\n");
+ }
+ else
+ {
+ args.push_back ("--requires");
+ args.push_back ("--resolve");
+
+ args.push_back ("--qf");
+ args.push_back ("%{name} %{arch} %{epoch}:%{version}-%{release}");
+ }
// Note that installed packages which are not available from configured
// repositories (e.g. packages installed from local rpm files or temporary
@@ -592,7 +696,10 @@ namespace bpkg
// --install to make sure that all installed packages will be listed and
// no configuration file may influence the result.
//
- args.push_back ("--disableexcludes=all");
+ if (simulate_ || dnf5 ())
+ args.push_back ("--setopt=disable_excludes=*");
+ else
+ args.push_back ("--disableexcludes=all");
}
args.push_back (spec.c_str ());
@@ -767,6 +874,7 @@ namespace bpkg
//
pair<cstrings, const process_path&> system_package_manager_fedora::
dnf_common (const char* command,
+ const char* subcommand,
optional<size_t> fetch_timeout,
strings& args_storage)
{
@@ -783,6 +891,9 @@ namespace bpkg
args.push_back ("dnf");
args.push_back (command);
+ if (subcommand != nullptr)
+ args.push_back (subcommand);
+
// Map our verbosity/progress to dnf --quiet and --verbose options.
//
// Note that all the diagnostics, including the progress indication and
@@ -852,6 +963,17 @@ namespace bpkg
}
}
+ pair<cstrings, const process_path&> system_package_manager_fedora::
+ dnf_common (const char* command,
+ optional<size_t> fetch_timeout,
+ strings& args_storage)
+ {
+ return dnf_common (command,
+ nullptr /* subcommand */,
+ fetch_timeout,
+ args_storage);
+ }
+
// Execute `dnf makecache` to download and cache the repositories metadata.
//
void system_package_manager_fedora::
@@ -1041,12 +1163,14 @@ namespace bpkg
strings args_storage;
pair<cstrings, const process_path&> args_pp (
- dnf_common ("mark", nullopt /* fetch_timeout */, args_storage));
+ dnf_common ("mark",
+ (simulate_ || dnf5 () ? "user" : "install"),
+ nullopt /* fetch_timeout */,
+ args_storage));
cstrings& args (args_pp.first);
const process_path& pp (args_pp.second);
- args.push_back ("install");
args.push_back ("--cacheonly");
for (const string& p: pkgs)
@@ -1064,7 +1188,10 @@ namespace bpkg
{
// Redirect stdout to stderr.
//
- pr = process (pp, args, 0 /* stdin */, 2 /* stdout */);
+ pr = process (pp, args,
+ 0 /* stdin */,
+ (dnf5 () ? -2 : 2) /* stdout */,
+ 2 /* stderr */);
}
else
{
@@ -2747,7 +2874,7 @@ namespace bpkg
expressions.push_back ("%{?_rpmdir}");
expressions.push_back ("%{?_rpmfilename}");
expressions.push_back ("%{?_usrsrc}");
- expressions.push_back ("%{?buildroot}");
+// expressions.push_back ("%{?buildroot}");
// Note that if the architecture passed with the --target option is
// invalid, then rpmbuild will fail with some ugly diagnostics since
@@ -2821,7 +2948,7 @@ namespace bpkg
// We only need the following macro expansions for the verification.
//
pop_string (); // %{?_arch}
- pop_dir (); // %{?buildroot}
+// pop_dir (); // %{?buildroot}
pop_dir (); // %{?_usrsrc}
pop_string (); // %{?_rpmfilename}
pop_dir (); // %{?_rpmdir}
@@ -3747,6 +3874,10 @@ namespace bpkg
<< " %endif" << '\n'
<< "%endif" << '\n';
+
+// os << '\n'
+// << "%global _rpm_build_root %{getenv:RPM_BUILD_ROOT}" << '\n';
+
// Configuration variables.
//
// Note: we need to quote values that contain `<>`, `[]`, since they
@@ -3761,7 +3892,10 @@ namespace bpkg
os << " \\\\\\\n " << v;
};
- add_macro_line ("config.install.chroot='%{buildroot}/'");
+// add_macro_line ("config.install.chroot='%{_rpm_build_root}/'");
+ add_macro_line ("config.install.chroot=\"${RPM_BUILD_ROOT}/\"");
+// add_macro_line ("config.install.chroot='%{buildroot}/'");
+
add_macro_line ("config.install.sudo='[null]'");
// If this is a C-based language, add rpath for private installation.
diff --git a/bpkg/system-package-manager-fedora.hxx b/bpkg/system-package-manager-fedora.hxx
index 3e68b98..986d203 100644
--- a/bpkg/system-package-manager-fedora.hxx
+++ b/bpkg/system-package-manager-fedora.hxx
@@ -274,7 +274,13 @@ namespace bpkg
dnf_mark_install (const strings&);
pair<cstrings, const process_path&>
- dnf_common (const char*,
+ dnf_common (const char* command,
+ optional<size_t> fetch_timeout,
+ strings& args_storage);
+
+ pair<cstrings, const process_path&>
+ dnf_common (const char* command,
+ const char* subcommand,
optional<size_t> fetch_timeout,
strings& args_storage);
diff --git a/bpkg/system-package-manager-fedora.test.testscript b/bpkg/system-package-manager-fedora.test.testscript
index 5ec8a89..c5ac508 100644
--- a/bpkg/system-package-manager-fedora.test.testscript
+++ b/bpkg/system-package-manager-fedora.test.testscript
@@ -109,7 +109,7 @@
pkgconf-pkg-config i686 0:1.8.0-1.fc35
pkgconf-pkg-config x86_64 0:1.8.0-1.fc35
EOI
- LC_ALL=C dnf repoquery --requires --quiet --cacheonly --resolve --qf "%{name} %{arch} %{epoch}:%{version}-%{release}" --installed --disableexcludes=all openssl-devel-1:1.1.1q-1.fc35.x86_64 <-
+ LC_ALL=C dnf repoquery --quiet --cacheonly --providers-of requires --qf "%{name} %{arch} %{epoch}:%{version}-%{release}\n" --installed --setopt=disable_excludes=* openssl-devel-1:1.1.1q-1.fc35.x86_64 <-
EOE
opae-devel 2.0.0-2.3.fc35
openssl-libs 1:1.1.1q-1.fc35
@@ -124,7 +124,7 @@
cargo x86_64 0:1.65.0-1.fc35
rust-uuid-devel noarch 0:1.2.1-1.fc35
EOI
- LC_ALL=C dnf repoquery --requires --quiet --cacheonly --resolve --qf "%{name} %{arch} %{epoch}:%{version}-%{release}" rust-uuid+std-devel-1.2.1-1.fc35.noarch <-
+ LC_ALL=C dnf repoquery --quiet --cacheonly --providers-of requires --qf "%{name} %{arch} %{epoch}:%{version}-%{release}\n" rust-uuid+std-devel-1.2.1-1.fc35.noarch <-
EOE
cargo 1.65.0-1.fc35
rust-uuid-devel 1.2.1-1.fc35
@@ -151,7 +151,7 @@
systemd i686 0:249.13-6.fc35
systemd x86_64 0:249.13-6.fc35
EOI
- LC_ALL=C dnf repoquery --requires --quiet --cacheonly --resolve --qf "%{name} %{arch} %{epoch}:%{version}-%{release}" --installed --disableexcludes=all dhcp-client-12:4.4.3-4.P1.fc35.x86_64 <-
+ LC_ALL=C dnf repoquery --quiet --cacheonly --providers-of requires --qf "%{name} %{arch} %{epoch}:%{version}-%{release}\n" --installed --setopt=disable_excludes=* dhcp-client-12:4.4.3-4.P1.fc35.x86_64 <-
EOE
bash 5.1.8-3.fc35
coreutils 8.32-36.fc35
@@ -171,13 +171,13 @@
: no-depends
:
$* glibc 2.34-38.fc35 x86_64 true <:'' 2>>EOE >:''
- LC_ALL=C dnf repoquery --requires --quiet --cacheonly --resolve --qf "%{name} %{arch} %{epoch}:%{version}-%{release}" --installed --disableexcludes=all glibc-2.34-38.fc35.x86_64 <-
+ LC_ALL=C dnf repoquery --quiet --cacheonly --providers-of requires --qf "%{name} %{arch} %{epoch}:%{version}-%{release}\n" --installed --setopt=disable_excludes=* glibc-2.34-38.fc35.x86_64 <-
EOE
: unknown
:
$* glibg 2.34-38.fc35 x86_64 false <:'' 2>>EOE >:''
- LC_ALL=C dnf repoquery --requires --quiet --cacheonly --resolve --qf "%{name} %{arch} %{epoch}:%{version}-%{release}" glibg-2.34-38.fc35.x86_64 <-
+ LC_ALL=C dnf repoquery --quiet --cacheonly --providers-of requires --qf "%{name} %{arch} %{epoch}:%{version}-%{release}\n" glibg-2.34-38.fc35.x86_64 <-
EOE
}
@@ -462,9 +462,9 @@
dnf-list: libpq libpq.info
EOI
LC_ALL=C dnf list --cacheonly --quiet libpq-devel pq-devel rpm <libpq-devel+pq-devel.info
- LC_ALL=C dnf repoquery --requires --quiet --cacheonly --resolve --qf "%{name} %{arch} %{epoch}:%{version}-%{release}" --installed --disableexcludes=all libpq-devel-13.4-1.fc35.x86_64 <libpq-devel.requires
+ LC_ALL=C dnf repoquery --quiet --cacheonly --providers-of requires --qf "%{name} %{arch} %{epoch}:%{version}-%{release}\n" --installed --setopt=disable_excludes=* libpq-devel-13.4-1.fc35.x86_64 <libpq-devel.requires
LC_ALL=C dnf list --cacheonly --quiet libpq rpm <libpq.info
- sudo dnf mark --quiet --assumeno install --cacheonly libpq-13.4-1.fc35.x86_64 libpq-devel-13.4-1.fc35.x86_64
+ sudo dnf mark user --quiet --assumeno --cacheonly libpq-13.4-1.fc35.x86_64 libpq-devel-13.4-1.fc35.x86_64
EOE
libpq 13.4 (libpq 13.4-1.fc35) installed
EOO
@@ -503,10 +503,10 @@
LC_ALL=C dnf list --cacheonly --quiet libpq-devel pq-devel rpm <libpq-devel+pq-devel.info
sudo dnf makecache --quiet --assumeno --refresh
LC_ALL=C dnf list --cacheonly --quiet libpq-devel pq-devel rpm <libpq-devel+pq-devel.info
- LC_ALL=C dnf repoquery --requires --quiet --cacheonly --resolve --qf "%{name} %{arch} %{epoch}:%{version}-%{release}" libpq-devel-13.4-1.fc35.x86_64 <libpq-devel.requires
+ LC_ALL=C dnf repoquery --quiet --cacheonly --providers-of requires --qf "%{name} %{arch} %{epoch}:%{version}-%{release}\n" libpq-devel-13.4-1.fc35.x86_64 <libpq-devel.requires
LC_ALL=C dnf list --cacheonly --quiet libpq rpm <libpq.info
sudo dnf install --quiet --assumeno libpq-13.4-1.fc35.x86_64 libpq-devel-13.4-1.fc35.x86_64
- sudo dnf mark --quiet --assumeno install --cacheonly libpq-13.4-1.fc35.x86_64 libpq-devel-13.4-1.fc35.x86_64
+ sudo dnf mark user --quiet --assumeno --cacheonly libpq-13.4-1.fc35.x86_64 libpq-devel-13.4-1.fc35.x86_64
LC_ALL=C dnf list --cacheonly --quiet libpq rpm <libpq.info
EOE
libpq 13.4 (libpq 13.4-1.fc35) part installed
@@ -565,10 +565,10 @@
LC_ALL=C dnf list --cacheonly --quiet libpq-devel pq-devel rpm <libpq-devel+pq-devel.info
sudo dnf makecache --quiet --assumeno --refresh
LC_ALL=C dnf list --cacheonly --quiet libpq-devel pq-devel rpm <libpq-devel+pq-devel.info-fetched
- LC_ALL=C dnf repoquery --requires --quiet --cacheonly --resolve --qf "%{name} %{arch} %{epoch}:%{version}-%{release}" libpq-devel-13.4-1.fc35.x86_64 <libpq-devel.requires-fetched
+ LC_ALL=C dnf repoquery --quiet --cacheonly --providers-of requires --qf "%{name} %{arch} %{epoch}:%{version}-%{release}\n" libpq-devel-13.4-1.fc35.x86_64 <libpq-devel.requires-fetched
LC_ALL=C dnf list --cacheonly --quiet libpq rpm <libpq.info-fetched
sudo dnf install --quiet --assumeno libpq-13.4-1.fc35.x86_64 libpq-devel-13.4-1.fc35.x86_64
- sudo dnf mark --quiet --assumeno install --cacheonly libpq-13.4-1.fc35.x86_64 libpq-devel-13.4-1.fc35.x86_64
+ sudo dnf mark user --quiet --assumeno --cacheonly libpq-13.4-1.fc35.x86_64 libpq-devel-13.4-1.fc35.x86_64
LC_ALL=C dnf list --cacheonly --quiet libpq rpm <libpq.info-installed
EOE
libpq 13.4 (libpq 13.4-1.fc35) part installed
@@ -619,10 +619,10 @@
dnf-list-installed: libpq libpq.info-installed
EOI
LC_ALL=C dnf list --cacheonly --quiet libpq-devel pq-devel rpm <libpq-devel+pq-devel.info
- LC_ALL=C dnf repoquery --requires --quiet --cacheonly --resolve --qf "%{name} %{arch} %{epoch}:%{version}-%{release}" libpq-devel-13.3-3.fc35.x86_64 <libpq-devel.requires
+ LC_ALL=C dnf repoquery --quiet --cacheonly --providers-of requires --qf "%{name} %{arch} %{epoch}:%{version}-%{release}\n" libpq-devel-13.3-3.fc35.x86_64 <libpq-devel.requires
LC_ALL=C dnf list --cacheonly --quiet libpq rpm <libpq.info
sudo dnf install --quiet --assumeno libpq-13.3-3.fc35.x86_64 libpq-devel-13.3-3.fc35.x86_64
- sudo dnf mark --quiet --assumeno install --cacheonly libpq-13.3-3.fc35.x86_64 libpq-devel-13.3-3.fc35.x86_64
+ sudo dnf mark user --quiet --assumeno --cacheonly libpq-13.3-3.fc35.x86_64 libpq-devel-13.3-3.fc35.x86_64
LC_ALL=C dnf list --cacheonly --quiet libpq rpm <libpq.info-installed
error: unexpected fedora package version for libpq
info: expected: 13.3-3.fc35
@@ -675,10 +675,10 @@
LC_ALL=C dnf list --cacheonly --quiet libpq-devel pq-devel rpm <libpq-devel+pq-devel.info
sudo dnf makecache --quiet --assumeno --refresh
LC_ALL=C dnf list --cacheonly --quiet libpq-devel pq-devel rpm <libpq-devel+pq-devel.info
- LC_ALL=C dnf repoquery --requires --quiet --cacheonly --resolve --qf "%{name} %{arch} %{epoch}:%{version}-%{release}" libpq-devel-13.4-1.fc35.x86_64 <libpq-devel.requires
+ LC_ALL=C dnf repoquery --quiet --cacheonly --providers-of requires --qf "%{name} %{arch} %{epoch}:%{version}-%{release}\n" libpq-devel-13.4-1.fc35.x86_64 <libpq-devel.requires
LC_ALL=C dnf list --cacheonly --quiet libpq rpm <libpq.info
sudo dnf install --quiet --assumeno libpq-13.4-1.fc35.x86_64 libpq-devel-13.4-1.fc35.x86_64
- sudo dnf mark --quiet --assumeno install --cacheonly libpq-13.4-1.fc35.x86_64 libpq-devel-13.4-1.fc35.x86_64
+ sudo dnf mark user --quiet --assumeno --cacheonly libpq-13.4-1.fc35.x86_64 libpq-devel-13.4-1.fc35.x86_64
LC_ALL=C dnf list --cacheonly --quiet libpq rpm <libpq.info-installed
EOE
libpq 13.4 (libpq 13.4-1.fc35) not installed
@@ -804,9 +804,9 @@
dnf-list: sqlite-libs sqlite-libs.info
EOI
LC_ALL=C dnf list --cacheonly --quiet libsqlite3-devel sqlite-devel rpm <libsqlite3-devel+sqlite-devel.info
- LC_ALL=C dnf repoquery --requires --quiet --cacheonly --resolve --qf "%{name} %{arch} %{epoch}:%{version}-%{release}" --installed --disableexcludes=all sqlite-devel-3.36.0-3.fc35.x86_64 <sqlite-devel.requires
+ LC_ALL=C dnf repoquery --quiet --cacheonly --providers-of requires --qf "%{name} %{arch} %{epoch}:%{version}-%{release}\n" --installed --setopt=disable_excludes=* sqlite-devel-3.36.0-3.fc35.x86_64 <sqlite-devel.requires
LC_ALL=C dnf list --cacheonly --quiet sqlite-libs rpm <sqlite-libs.info
- sudo dnf mark --quiet --assumeno install --cacheonly sqlite-libs-3.36.0-3.fc35.x86_64 sqlite-devel-3.36.0-3.fc35.x86_64
+ sudo dnf mark user --quiet --assumeno --cacheonly sqlite-libs-3.36.0-3.fc35.x86_64 sqlite-devel-3.36.0-3.fc35.x86_64
EOE
libsqlite3 3.36.0 (sqlite-libs 3.36.0-3.fc35) installed
EOO
@@ -867,10 +867,10 @@
LC_ALL=C dnf list --cacheonly --quiet libsqlite3-devel sqlite-devel rpm <libsqlite3-devel+sqlite-devel.info
sudo dnf makecache --quiet --assumeno --refresh
LC_ALL=C dnf list --cacheonly --quiet libsqlite3-devel sqlite-devel rpm <libsqlite3-devel+sqlite-devel.info-fetched
- LC_ALL=C dnf repoquery --requires --quiet --cacheonly --resolve --qf "%{name} %{arch} %{epoch}:%{version}-%{release}" sqlite-devel-3.36.0-3.fc35.x86_64 <sqlite-devel.requires-fetched
+ LC_ALL=C dnf repoquery --quiet --cacheonly --providers-of requires --qf "%{name} %{arch} %{epoch}:%{version}-%{release}\n" sqlite-devel-3.36.0-3.fc35.x86_64 <sqlite-devel.requires-fetched
LC_ALL=C dnf list --cacheonly --quiet sqlite-libs rpm <sqlite-libs.info-fetched
sudo dnf install --quiet --assumeno sqlite-libs-3.36.0-3.fc35.x86_64 sqlite-devel-3.36.0-3.fc35.x86_64
- sudo dnf mark --quiet --assumeno install --cacheonly sqlite-libs-3.36.0-3.fc35.x86_64 sqlite-devel-3.36.0-3.fc35.x86_64
+ sudo dnf mark user --quiet --assumeno --cacheonly sqlite-libs-3.36.0-3.fc35.x86_64 sqlite-devel-3.36.0-3.fc35.x86_64
LC_ALL=C dnf list --cacheonly --quiet sqlite-libs rpm <sqlite-libs.info-installed
EOE
libsqlite3 3.36.0 (sqlite-libs 3.36.0-3.fc35) not installed
@@ -928,7 +928,7 @@
dnf-list: sqlite3 sqlite sqlite3+sqlite.info
EOI
LC_ALL=C dnf list --cacheonly --quiet sqlite3 sqlite rpm <sqlite3+sqlite.info
- sudo dnf mark --quiet --assumeno install --cacheonly sqlite-3.36.0-3.fc35.x86_64
+ sudo dnf mark user --quiet --assumeno --cacheonly sqlite-3.36.0-3.fc35.x86_64
EOE
sqlite3 3.36.0 (sqlite 3.36.0-3.fc35) installed
EOO
@@ -972,7 +972,7 @@
sudo dnf makecache --quiet --assumeno --refresh
LC_ALL=C dnf list --cacheonly --quiet sqlite3 sqlite rpm <sqlite3+sqlite.info-fetched
sudo dnf install --quiet --assumeno sqlite-3.36.0-3.fc35.x86_64
- sudo dnf mark --quiet --assumeno install --cacheonly sqlite-3.36.0-3.fc35.x86_64
+ sudo dnf mark user --quiet --assumeno --cacheonly sqlite-3.36.0-3.fc35.x86_64
LC_ALL=C dnf list --cacheonly --quiet sqlite rpm <sqlite.info-installed
EOE
sqlite3 3.36.0 (sqlite 3.36.0-3.fc35) not installed
@@ -1055,10 +1055,10 @@
dnf-list: ncurses-c++-libs ncurses-devel ncurses-c++-libs+ncurses-devel.info
EOI
LC_ALL=C dnf list --cacheonly --quiet libncurses-devel ncurses-devel rpm <libncurses-devel+ncurses-devel.info
- LC_ALL=C dnf repoquery --requires --quiet --cacheonly --resolve --qf "%{name} %{arch} %{epoch}:%{version}-%{release}" --installed --disableexcludes=all ncurses-devel-6.2-8.20210508.fc35.x86_64 <ncurses-devel.requires
+ LC_ALL=C dnf repoquery --quiet --cacheonly --providers-of requires --qf "%{name} %{arch} %{epoch}:%{version}-%{release}\n" --installed --setopt=disable_excludes=* ncurses-devel-6.2-8.20210508.fc35.x86_64 <ncurses-devel.requires
LC_ALL=C dnf list --cacheonly --quiet ncurses-libs rpm <ncurses-libs.info
LC_ALL=C dnf list --cacheonly --quiet ncurses-c++-libs ncurses-devel rpm <ncurses-c++-libs+ncurses-devel.info
- sudo dnf mark --quiet --assumeno install --cacheonly ncurses-libs-6.2-8.20210508.fc35.x86_64 ncurses-devel-6.2-8.20210508.fc35.x86_64 ncurses-c++-libs-6.2-8.20210508.fc35.x86_64
+ sudo dnf mark user --quiet --assumeno --cacheonly ncurses-libs-6.2-8.20210508.fc35.x86_64 ncurses-devel-6.2-8.20210508.fc35.x86_64 ncurses-c++-libs-6.2-8.20210508.fc35.x86_64
EOE
libncurses 6.2.0 (ncurses-libs 6.2-8.20210508.fc35) installed
libncurses-c++ 6.2.0 (ncurses-c++-libs 6.2-8.20210508.fc35) installed
@@ -1128,11 +1128,11 @@
LC_ALL=C dnf list --cacheonly --quiet libncurses-devel ncurses-devel rpm <libncurses-devel+ncurses-devel.info
sudo dnf makecache --quiet --assumeno --refresh
LC_ALL=C dnf list --cacheonly --quiet libncurses-devel ncurses-devel rpm <libncurses-devel+ncurses-devel.info
- LC_ALL=C dnf repoquery --requires --quiet --cacheonly --resolve --qf "%{name} %{arch} %{epoch}:%{version}-%{release}" ncurses-devel-6.2-8.20210508.fc35.x86_64 <ncurses-devel.requires-fetched
+ LC_ALL=C dnf repoquery --quiet --cacheonly --providers-of requires --qf "%{name} %{arch} %{epoch}:%{version}-%{release}\n" ncurses-devel-6.2-8.20210508.fc35.x86_64 <ncurses-devel.requires-fetched
LC_ALL=C dnf list --cacheonly --quiet ncurses-libs rpm <ncurses-libs.info-fetched
LC_ALL=C dnf list --cacheonly --quiet ncurses-c++-libs ncurses-devel rpm <ncurses-c++-libs+ncurses-devel.info-fetched
sudo dnf install --quiet --assumeno ncurses-libs-6.2-8.20210508.fc35.x86_64 ncurses-devel-6.2-8.20210508.fc35.x86_64 ncurses-c++-libs-6.2-8.20210508.fc35.x86_64
- sudo dnf mark --quiet --assumeno install --cacheonly ncurses-libs-6.2-8.20210508.fc35.x86_64 ncurses-devel-6.2-8.20210508.fc35.x86_64 ncurses-c++-libs-6.2-8.20210508.fc35.x86_64
+ sudo dnf mark user --quiet --assumeno --cacheonly ncurses-libs-6.2-8.20210508.fc35.x86_64 ncurses-devel-6.2-8.20210508.fc35.x86_64 ncurses-c++-libs-6.2-8.20210508.fc35.x86_64
LC_ALL=C dnf list --cacheonly --quiet ncurses-libs ncurses-c++-libs rpm <ncurses-libs+ncurses-c++-libs.info-installed
EOE
libncurses 6.2.0 (ncurses-libs 6.2-8.20210508.fc35) part installed
@@ -1212,11 +1212,11 @@
LC_ALL=C dnf list --cacheonly --quiet libncurses-devel ncurses-devel rpm <libncurses-devel+ncurses-devel.info
sudo dnf makecache --quiet --assumeno --refresh
LC_ALL=C dnf list --cacheonly --quiet libncurses-devel ncurses-devel rpm <libncurses-devel+ncurses-devel.info-fetched
- LC_ALL=C dnf repoquery --requires --quiet --cacheonly --resolve --qf "%{name} %{arch} %{epoch}:%{version}-%{release}" ncurses-devel-6.2-8.20210508.fc35.x86_64 <ncurses-devel.requires-fetched
+ LC_ALL=C dnf repoquery --quiet --cacheonly --providers-of requires --qf "%{name} %{arch} %{epoch}:%{version}-%{release}\n" ncurses-devel-6.2-8.20210508.fc35.x86_64 <ncurses-devel.requires-fetched
LC_ALL=C dnf list --cacheonly --quiet ncurses-libs rpm <ncurses-libs.info-fetched
LC_ALL=C dnf list --cacheonly --quiet ncurses-c++-libs ncurses-devel rpm <ncurses-c++-libs+ncurses-devel.info-fetched
sudo dnf install --quiet --assumeno ncurses-libs-6.2-8.20210508.fc35.x86_64 ncurses-devel-6.2-8.20210508.fc35.x86_64 ncurses-c++-libs-6.2-8.20210508.fc35.x86_64
- sudo dnf mark --quiet --assumeno install --cacheonly ncurses-libs-6.2-8.20210508.fc35.x86_64 ncurses-devel-6.2-8.20210508.fc35.x86_64 ncurses-c++-libs-6.2-8.20210508.fc35.x86_64
+ sudo dnf mark user --quiet --assumeno --cacheonly ncurses-libs-6.2-8.20210508.fc35.x86_64 ncurses-devel-6.2-8.20210508.fc35.x86_64 ncurses-c++-libs-6.2-8.20210508.fc35.x86_64
LC_ALL=C dnf list --cacheonly --quiet ncurses-libs ncurses-c++-libs rpm <ncurses-libs+ncurses-c++-libs.info-installed
EOE
libncurses 6.2.0 (ncurses-libs 6.2-8.20210508.fc35) not installed
@@ -1269,7 +1269,7 @@
EOI
LC_ALL=C dnf list --cacheonly --quiet libsigc++30 libsigc++30-devel rpm <libsigc++30+libsigc++30-devel.info
LC_ALL=C dnf list --cacheonly --quiet libsigc++20 libsigc++20-devel rpm <libsigc++20+libsigc++20-devel.info
- sudo dnf mark --quiet --assumeno install --cacheonly libsigc++20-2.10.7-3.fc35.x86_64 libsigc++20-devel-2.10.7-3.fc35.x86_64
+ sudo dnf mark user --quiet --assumeno --cacheonly libsigc++20-2.10.7-3.fc35.x86_64 libsigc++20-devel-2.10.7-3.fc35.x86_64
EOE
libsigc++ 2.10.7 (libsigc++20 2.10.7-3.fc35) installed
EOO
@@ -1319,7 +1319,7 @@
LC_ALL=C dnf list --cacheonly --quiet libsigc++30 libsigc++30-devel rpm <libsigc++30+libsigc++30-devel.info
LC_ALL=C dnf list --cacheonly --quiet libsigc++20 libsigc++20-devel rpm <libsigc++20+libsigc++20-devel.info
sudo dnf install --quiet --assumeno libsigc++20-2.10.7-3.fc35.x86_64 libsigc++20-devel-2.10.7-3.fc35.x86_64
- sudo dnf mark --quiet --assumeno install --cacheonly libsigc++20-2.10.7-3.fc35.x86_64 libsigc++20-devel-2.10.7-3.fc35.x86_64
+ sudo dnf mark user --quiet --assumeno --cacheonly libsigc++20-2.10.7-3.fc35.x86_64 libsigc++20-devel-2.10.7-3.fc35.x86_64
LC_ALL=C dnf list --cacheonly --quiet libsigc++20 rpm <libsigc++20.info-installed
EOE
libsigc++ 2.10.7 (libsigc++20 2.10.7-3.fc35) part installed