diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2024-11-08 20:54:00 +0200 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2024-11-08 20:54:00 +0200 |
commit | f27ec4a7dcb0f5f0d4bccf899d46968879711f9a (patch) | |
tree | b4f4f3faa8cae97a16b97f32b9c51f2766922401 | |
parent | 950cf3cea8075e3347d72aecbdfb26c8bb2832d4 (diff) |
Adapt Fedora system package manager to dnf5dnf5
-rw-r--r-- | bpkg/system-package-manager-fedora.cxx | 160 | ||||
-rw-r--r-- | bpkg/system-package-manager-fedora.hxx | 8 | ||||
-rw-r--r-- | bpkg/system-package-manager-fedora.test.testscript | 58 |
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 |