Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package dnf for openSUSE:Factory checked in at 2021-11-06 18:13:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/dnf (Old) and /work/SRC/openSUSE:Factory/.dnf.new.1890 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "dnf" Sat Nov 6 18:13:20 2021 rev:29 rq:929011 version:4.10.0 Changes: -------- --- /work/SRC/openSUSE:Factory/dnf/dnf.changes 2021-08-31 19:55:10.093918219 +0200 +++ /work/SRC/openSUSE:Factory/.dnf.new.1890/dnf.changes 2021-11-06 18:13:38.840747747 +0100 @@ -1,0 +2,17 @@ +Wed Nov 3 11:23:00 UTC 2021 - Neal Gompa <[email protected]> + +- Update 4.10.0 + + Add support for autodetecting packages to be excluded from being + installed as weak dependencies (rh#1699672) + + Add support for excluding packages to be installed as weak dependencies (rh#1699672) + + Add fail_fast parameter to download_payloads methods for use in reposync + + Acquire all relevant locks during "dnf clean" + + API: Raise CompsError when group/env not found in install_group + and install_environment (rh#1947958) + + [API] Add method "set_or_append_opt_value" to BaseConfig (rh#1967925) + + Add aliases for commands: info, updateinfo, provides (rh#1938333) + + Add report about demodularized rpms into module info (rh#1805260) + + Remove DNSSEC errors on COPR group email keys + + Documentation inprovements - rh#1938352, rh#1993899, rh#1963704 + +------------------------------------------------------------------- Old: ---- dnf-4.8.0.tar.gz New: ---- dnf-4.10.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ dnf.spec ++++++ --- /var/tmp/diff_new_pack.fyIBAG/_old 2021-11-06 18:13:39.436748059 +0100 +++ /var/tmp/diff_new_pack.fyIBAG/_new 2021-11-06 18:13:39.440748061 +0100 @@ -2,7 +2,7 @@ # spec file for package dnf # # Copyright (c) 2021 SUSE LLC -# Copyright (c) 2020-2021 Neal Gompa <[email protected]>. +# Copyright (c) 2021 Neal Gompa <[email protected]>. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ # -%global hawkey_version 0.61.1 +%global hawkey_version 0.65.0 %global libcomps_version 0.1.8 %global libmodulemd_version 2.9.3 %global rpm_version 4.14.0 @@ -50,7 +50,7 @@ %bcond_with tests Name: dnf -Version: 4.8.0 +Version: 4.10.0 Release: 0 Summary: Package manager forked from Yum, using libsolv as a dependency resolver # For a breakdown of the licensing, see PACKAGE-LICENSING ++++++ dnf-4.8.0.tar.gz -> dnf-4.10.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/VERSION.cmake new/dnf-4.10.0/VERSION.cmake --- old/dnf-4.8.0/VERSION.cmake 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/VERSION.cmake 2021-10-21 08:31:48.000000000 +0200 @@ -1,4 +1,4 @@ -set (DEFAULT_DNF_VERSION "4.8.0") +set (DEFAULT_DNF_VERSION "4.10.0") if(DEFINED DNF_VERSION) if(NOT ${DEFAULT_DNF_VERSION} STREQUAL ${DNF_VERSION}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/dnf/base.py new/dnf-4.10.0/dnf/base.py --- old/dnf-4.8.0/dnf/base.py 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/dnf/base.py 2021-10-21 08:31:48.000000000 +0200 @@ -814,6 +814,21 @@ goal.write_debugdata('./debugdata/rpms') return ret + def _set_excludes_from_weak_to_goal(self): + """ + Add exclude_from_weak from configuration and autodetect unmet weak deps exclude them from candidates to satisfy + weak dependencies + """ + self._goal.reset_exclude_from_weak() + if self.conf.exclude_from_weak_autodetect: + self._goal.exclude_from_weak_autodetect() + + for weak_exclude in self.conf.exclude_from_weak: + subj = dnf.subject.Subject(weak_exclude) + query = subj.get_best_query(self.sack, with_nevra=True, with_provides=False, with_filenames=False) + query = query.available() + self._goal.add_exclude_from_weak(query) + def resolve(self, allow_erasing=False): # :api """Build the transaction set.""" @@ -838,6 +853,9 @@ goal.add_protected(self.sack.query().filterm( name=self.conf.protected_packages)) + + self._set_excludes_from_weak_to_goal() + if not self._run_hawkey_goal(goal, allow_erasing): if self.conf.debuglevel >= 6: goal.log_decisions() @@ -1151,7 +1169,7 @@ timer() self._trans_success = True - def _download_remote_payloads(self, payloads, drpm, progress, callback_total): + def _download_remote_payloads(self, payloads, drpm, progress, callback_total, fail_fast=True): lock = dnf.lock.build_download_lock(self.conf.cachedir, self.conf.exit_on_lock) with lock: beg_download = time.time() @@ -1163,10 +1181,10 @@ progress.start(len(payloads), est_remote_size, total_drpms=total_drpm) else: progress.start(len(payloads), est_remote_size) - errors = dnf.repo._download_payloads(payloads, drpm) + errors = dnf.repo._download_payloads(payloads, drpm, fail_fast) - if errors._irrecoverable: - raise dnf.exceptions.DownloadError(errors._irrecoverable) + if errors._irrecoverable(): + raise dnf.exceptions.DownloadError(errors._irrecoverable()) remote_size = sum(errors._bandwidth_used(pload) for pload in payloads) @@ -1189,10 +1207,10 @@ est_remote_size = sum(pload.download_size for pload in payloads) progress.start(len(payloads), est_remote_size) - errors = dnf.repo._download_payloads(payloads, drpm) + errors = dnf.repo._download_payloads(payloads, drpm, fail_fast) - if errors._irrecoverable: - raise dnf.exceptions.DownloadError(errors._irrecoverable) + if errors._irrecoverable(): + raise dnf.exceptions.DownloadError(errors._irrecoverable()) remote_size += \ sum(errors._bandwidth_used(pload) for pload in payloads) @@ -1669,9 +1687,7 @@ if not isinstance(types, int): types = libdnf.transaction.listToCompsPackageType(types) - trans = dnf.comps.install_or_skip(solver._environment_install, - env_id, types, exclude or set(), - strict, exclude_groups) + trans = solver._environment_install(env_id, types, exclude or set(), strict, exclude_groups) if not trans: return 0 return self._add_comps_trans(trans) @@ -1714,9 +1730,7 @@ if not isinstance(pkg_types, int): pkg_types = libdnf.transaction.listToCompsPackageType(pkg_types) - trans = dnf.comps.install_or_skip(solver._group_install, - grp_id, pkg_types, exclude_pkgnames, - strict) + trans = solver._group_install(grp_id, pkg_types, exclude_pkgnames, strict) if not trans: return 0 if strict: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/dnf/cli/commands/__init__.py new/dnf-4.10.0/dnf/cli/commands/__init__.py --- old/dnf-4.8.0/dnf/cli/commands/__init__.py 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/dnf/cli/commands/__init__.py 2021-10-21 08:31:48.000000000 +0200 @@ -154,7 +154,7 @@ info command. """ - aliases = ('info',) + aliases = ('info', 'if') summary = _('display details about a package or group of packages') DEFAULT_PKGNARROW = 'all' pkgnarrows = {'available', 'installed', 'extras', 'updates', 'upgrades', @@ -231,7 +231,7 @@ provides command. """ - aliases = ('provides', 'whatprovides', 'prov') + aliases = ('provides', 'whatprovides', 'prov', 'wp') summary = _('find what package provides the given value') @staticmethod diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/dnf/cli/commands/clean.py new/dnf-4.10.0/dnf/cli/commands/clean.py --- old/dnf-4.8.0/dnf/cli/commands/clean.py 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/dnf/cli/commands/clean.py 2021-10-21 08:31:48.000000000 +0200 @@ -99,7 +99,7 @@ rpmdb_lock = dnf.lock.build_rpmdb_lock(self.base.conf.persistdir, True) while True: try: - with md_lock and download_lock and rpmdb_lock: + with md_lock, download_lock, rpmdb_lock: types = set(t for c in self.opts.type for t in _CACHE_TYPES[c]) files = list(_tree(cachedir)) logger.debug(_('Cleaning data: ' + ' '.join(types))) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/dnf/cli/commands/group.py new/dnf-4.10.0/dnf/cli/commands/group.py --- old/dnf-4.8.0/dnf/cli/commands/group.py 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/dnf/cli/commands/group.py 2021-10-21 08:31:48.000000000 +0200 @@ -244,9 +244,9 @@ types = tuple(self.base.conf.group_package_types) pkg_types = libdnf.transaction.listToCompsPackageType(types) for env_id in res.environments: - dnf.comps.install_or_skip(solver._environment_install, env_id, pkg_types) + solver._environment_install(env_id, pkg_types) for group_id in res.groups: - dnf.comps.install_or_skip(solver._group_install, group_id, pkg_types) + solver._group_install(group_id, pkg_types) def _mark_remove(self, patterns): q = CompsQuery(self.base.comps, self.base.history, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/dnf/cli/commands/updateinfo.py new/dnf-4.10.0/dnf/cli/commands/updateinfo.py --- old/dnf-4.8.0/dnf/cli/commands/updateinfo.py 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/dnf/cli/commands/updateinfo.py 2021-10-21 08:31:48.000000000 +0200 @@ -59,7 +59,7 @@ 'info-security' : 'info', 'info-sec' : 'info', 'summary-updateinfo' : 'summary'} - aliases = ['updateinfo'] + list(direct_commands.keys()) + aliases = ['updateinfo', 'upif'] + list(direct_commands.keys()) summary = _('display advisories about packages') availability_default = 'available' availabilities = ['installed', 'updates', 'all', availability_default] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/dnf/comps.py new/dnf-4.10.0/dnf/comps.py --- old/dnf-4.8.0/dnf/comps.py 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/dnf/comps.py 2021-10-21 08:31:48.000000000 +0200 @@ -93,15 +93,15 @@ def install_or_skip(install_fnc, grp_or_env_id, types, exclude=None, strict=True, exclude_groups=None): - """Either mark in persistor as installed given `grp_or_env` (group - or environment) or skip it (if it's already installed). - `install_fnc` has to be Solver._group_install - or Solver._environment_install. - """ - try: - return install_fnc(grp_or_env_id, types, exclude, strict, exclude_groups) - except dnf.comps.CompsError as e: - logger.warning("%s, %s", ucd(e)[:-1], _("skipping.")) + """ + Installs a group or an environment identified by grp_or_env_id. + This method is preserved for API compatibility. It used to catch an + exception thrown when a gorup or env was already installed, which is no + longer thrown. + `install_fnc` has to be Solver._group_install or + Solver._environment_install. + """ + return install_fnc(grp_or_env_id, types, exclude, strict, exclude_groups) class _Langs(object): @@ -592,7 +592,7 @@ assert dnf.util.is_string_type(group_id) return self.history.env.is_removable_group(group_id) - def _environment_install(self, env_id, pkg_types, exclude, strict=True, exclude_groups=None): + def _environment_install(self, env_id, pkg_types, exclude=None, strict=True, exclude_groups=None): assert dnf.util.is_string_type(env_id) comps_env = self.comps._environment_by_id(env_id) if not comps_env: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/dnf/conf/config.py new/dnf-4.10.0/dnf/conf/config.py --- old/dnf-4.8.0/dnf/conf/config.py 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/dnf/conf/config.py 2021-10-21 08:31:48.000000000 +0200 @@ -175,6 +175,24 @@ return '\n'.join(output) + '\n' + def set_or_append_opt_value(self, name, value_string, priority=PRIO_RUNTIME): + # :api + """For standard options, sets the value of the option if the priority is equal to or higher + than the current priority. + For "append" options, appends the values parsed from value_string to the current list of values. If the first + parsed element of the list of values is empty and the priority is equal to or higher than the current + priority, the current list is replaced with the new values. + If the priority is higher than the current priority, the current priority is increased to the priority. + Raises dnf.exceptions.ConfigError if the option with the given name does not exist or value_string contains + an invalid value or not allowed value. + """ + opt_binds = self._config.optBinds() + try: + opt_binds.at(name).newString(priority, value_string) + except RuntimeError as e: + raise dnf.exceptions.ConfigError( + _('Cannot set "{}" to "{}": {}').format(name, value_string, str(e)), str(e)) + @staticmethod def write_raw_configfile(filename, section_id, substitutions, modify): # :api diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/dnf/const.py.in new/dnf-4.10.0/dnf/const.py.in --- old/dnf-4.8.0/dnf/const.py.in 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/dnf/const.py.in 2021-10-21 08:31:48.000000000 +0200 @@ -19,7 +19,6 @@ # from __future__ import unicode_literals -import sysconfig CONF_FILENAME='/etc/dnf/dnf.conf' # :api CONF_AUTOMATIC_FILENAME='/etc/dnf/automatic.conf' @@ -50,7 +49,7 @@ PREFIX=NAME.lower() PROGRAM_NAME=NAME.lower() # Deprecated - no longer used, Argparser prints program name based on sys.argv PLUGINCONFPATH = '/etc/dnf/plugins' # :api -PLUGINPATH = '%s/dnf-plugins' % sysconfig.get_path('purelib') +PLUGINPATH = '@PYTHON_INSTALL_DIR@/dnf-plugins' VERSION='@DNF_VERSION@' USER_AGENT = "dnf/%s" % VERSION diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/dnf/dnssec.py new/dnf-4.10.0/dnf/dnssec.py --- old/dnf-4.8.0/dnf/dnssec.py 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/dnf/dnssec.py 2021-10-21 08:31:48.000000000 +0200 @@ -56,7 +56,7 @@ :param tag: :return: """ - split = email_address.split("@") + split = email_address.rsplit("@", 1) if len(split) != 2: msg = "Email address must contain exactly one '@' sign." raise DnssecError(msg) @@ -102,6 +102,9 @@ self.email = email self.key = key + def __repr__(self): + return 'KeyInfo("{}", "{}...")'.format(self.email, self.key.decode('ascii')[:6]) + @staticmethod def from_rpm_key_object(userid, raw_key): # type: (str, bytes) -> KeyInfo @@ -193,13 +196,14 @@ if not result.secure: logger.debug("Result is not secured with DNSSEC") return Validity.RESULT_NOT_SECURE - if result.nxdomain: + if result.nxdomain or (result.rcode == unbound.RCODE_NOERROR and not result.havedata): logger.debug("Non-existence of this record was proven by DNSSEC") return Validity.PROVEN_NONEXISTENCE if not result.havedata: # TODO: This is weird result, but there is no way to perform validation, so just return # an error - logger.debug("Unknown error in DNS communication") + # Should handle only SERVFAIL, REFUSED and similar rcodes + logger.debug("Unknown error in DNS communication: {}".format(result.rcode_str)) return Validity.ERROR else: data = result.data.as_raw_data()[0] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/dnf/module/module_base.py new/dnf-4.10.0/dnf/module/module_base.py --- old/dnf-4.8.0/dnf/module/module_base.py 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/dnf/module/module_base.py 2021-10-21 08:31:48.000000000 +0200 @@ -641,6 +641,9 @@ for mod_require, stream in require_dict.items(): req_set.add("{}:[{}]".format(mod_require, ",".join(stream))) lines["Requires"] = "\n".join(sorted(req_set)) + demodularized = modulePackage.getDemodularizedRpms() + if demodularized: + lines["Demodularized rpms"] = "\n".join(demodularized) lines["Artifacts"] = "\n".join(sorted(modulePackage.getArtifacts())) output.add(self._create_simple_table(lines).toString()) str_table = "\n\n".join(sorted(output)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/dnf/repo.py new/dnf-4.10.0/dnf/repo.py --- old/dnf-4.8.0/dnf/repo.py 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/dnf/repo.py 2021-10-21 08:31:48.000000000 +0200 @@ -84,7 +84,7 @@ raise ValueError(_('no matching payload factory for %s') % pkg) -def _download_payloads(payloads, drpm): +def _download_payloads(payloads, drpm, fail_fast=True): # download packages def _download_sort_key(payload): return not hasattr(payload, 'delta') @@ -94,7 +94,7 @@ for pload in sorted(payloads, key=_download_sort_key)] errs = _DownloadErrors() try: - libdnf.repo.PackageTarget.downloadPackages(libdnf.repo.VectorPPackageTarget(targets), True) + libdnf.repo.PackageTarget.downloadPackages(libdnf.repo.VectorPPackageTarget(targets), fail_fast) except RuntimeError as e: errs._fatal = str(e) drpm.wait() @@ -112,7 +112,7 @@ errs._skipped.add(pkg) continue pkg.repo._repo.expire() - errs._irrecoverable[pkg] = [err] + errs._pkg_irrecoverable[pkg] = [err] return errs @@ -131,15 +131,14 @@ class _DownloadErrors(object): def __init__(self): - self._val_irrecoverable = {} + self._pkg_irrecoverable = {} self._val_recoverable = {} self._fatal = None self._skipped = set() - @property def _irrecoverable(self): - if self._val_irrecoverable: - return self._val_irrecoverable + if self._pkg_irrecoverable: + return self._pkg_irrecoverable if self._fatal: return {'': [self._fatal]} return {} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/dnf/rpm/miscutils.py new/dnf-4.10.0/dnf/rpm/miscutils.py --- old/dnf-4.8.0/dnf/rpm/miscutils.py 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/dnf/rpm/miscutils.py 2021-10-21 08:31:48.000000000 +0200 @@ -66,11 +66,10 @@ _logger.critical(_('Cannot find rpmkeys executable to verify signatures.')) return 2 - # "--define=_pkgverify_level all" enforces signature checking; - # "--define=_pkgverify_flags 0x0" ensures that all signatures and digests - # are checked. + # "--define=_pkgverify_level signature" enforces signature checking; + # "--define=_pkgverify_flags 0x0" ensures that all signatures are checked. args = ('rpmkeys', '--checksig', '--root', installroot, '--verbose', - '--define=_pkgverify_level all', '--define=_pkgverify_flags 0x0', + '--define=_pkgverify_level signature', '--define=_pkgverify_flags 0x0', '-') with subprocess.Popen( args=args, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/dnf.spec new/dnf-4.10.0/dnf.spec --- old/dnf-4.8.0/dnf.spec 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/dnf.spec 2021-10-21 08:31:48.000000000 +0200 @@ -2,7 +2,7 @@ %define __cmake_in_source_build 1 # default dependencies -%global hawkey_version 0.61.1 +%global hawkey_version 0.65.0 %global libcomps_version 0.1.8 %global libmodulemd_version 2.9.3 %global rpm_version 4.14.0 @@ -65,7 +65,7 @@ It supports RPMs, modules and comps groups & environments. Name: dnf -Version: 4.8.0 +Version: 4.10.0 Release: 1%{?dist} Summary: %{pkg_summary} # For a breakdown of the licensing, see PACKAGE-LICENSING @@ -361,6 +361,20 @@ %{python3_sitelib}/%{name}/automatic/ %changelog +* Thu Oct 21 2021 Pavla Kratochvilova <[email protected]> - 4.10.0-1 +- Add support for autodetecting packages to be excluded from being installed as weak dependencies (RhBug:1699672) +- Add support for excluding packages to be installed as weak dependencies (RhBug:1699672) +- Add fail_fast parameter to download_payloads methods for use in reposync +- Acquire all relevant locks during "dnf clean" +- API: Raise CompsError when group/env not found in install_group and install_environment (RhBug:1947958) + +* Thu Sep 16 2021 Pavla Kratochvilova <[email protected]> - 4.9.0-1 +- [API] Add method "set_or_append_opt_value" to BaseConfig (RhBug:1967925) +- Add aliases for commands: info, updateinfo, provides (RhBug:1938333) +- Add report about demodularized rpms into module info (RhBug:1805260) +- Remove DNSSEC errors on COPR group email keys +- Documentation inprovements - bugs: 1938352, 1993899, 1963704 + * Mon Jun 14 2021 Pavla Kratochvilova <[email protected]> - 4.8.0-1 - Do not assume that a remote rpm is complete if present - Use positive percentage for "Failed delta RPMs" message diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/doc/api_base.rst new/dnf-4.10.0/doc/api_base.rst --- old/dnf-4.8.0/doc/api_base.rst 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/doc/api_base.rst 2021-10-21 08:31:48.000000000 +0200 @@ -62,7 +62,7 @@ :exc:`dnf.exceptions.Error` if the :attr:`goal` is not empty. `progress`, if given, should be a :class:`.DownloadProgress` instance which can be used to monitor the progress of the download. - .. method:: add_security_filters(cmp_type, types=(), advisory=(), bugzilla=(), cves=(), severity=()) + .. method:: add_security_filters(cmp_type, types=(), advisory=(), bugzilla=(), cves=(), severity=()) It modifies results of install, upgrade, and distrosync methods according to provided filters. `cmp_type` - only 'eq' or 'gte' allowed @@ -74,7 +74,7 @@ `severity` - List or tuple with strings. Includes packages that provide a fix for an issue of the specified severity. - .. method:: reset_security_filters() + .. method:: reset_security_filters() Reset all security filters @@ -179,7 +179,7 @@ .. method:: group_install(group_id, pkg_types, exclude=None, strict=True) - Mark group with corresponding `group_id` installed and mark the packages in the group for installation. Return the number of packages that the operation has marked for installation. `pkg_types` is a sequence of strings determining the kinds of packages to be installed, where the respective groups can be selected by including ``"mandatory"``, ``"default"`` or ``"optional"`` in it. If `exclude` is given, it has to be an iterable of package name glob patterns: :meth:`.group_install` will then not mark the respective packages for installation whenever possible. Parameter `strict` is a boolean indicating whether group packages that exist but are non-installable due to e.g. dependency issues should be skipped (False) or cause transaction to fail to resolve (True). + Mark group with corresponding `group_id` installed and mark the packages in the group for installation. Return the number of packages that the operation has marked for installation. `pkg_types` is a sequence of strings determining the kinds of packages to be installed, where the respective groups can be selected by including ``"mandatory"``, ``"default"`` or ``"optional"`` in it. If `exclude` is given, it has to be an iterable of package name glob patterns: :meth:`.group_install` will then not mark the respective packages for installation whenever possible. Parameter `strict` is a boolean indicating whether group packages that exist but are non-installable due to e.g. dependency issues should be skipped (False) or cause transaction to fail to resolve (True). Raises :exc:`dnf.exceptions.CompsError` in case the group doesn't exist. .. method:: group_remove(group_id) @@ -191,7 +191,7 @@ .. method:: environment_install(env_id, types, exclude=None, strict=True, exclude_groups=None) - Similar to :meth:`.group_install` but operates on environmental groups. `exclude_groups` is an iterable of group IDs that will not be marked as installed. + Similar to :meth:`.group_install` but operates on environmental groups. `exclude_groups` is an iterable of group IDs that will not be marked as installed. Raises :exc:`dnf.exceptions.CompsError` in case the group doesn't exist. .. method:: environment_remove(env_id) @@ -275,7 +275,7 @@ .. method:: install(pkg_spec, reponame=None, strict=True, forms=None) - Mark packages matching `pkg_spec` for installation. + Mark packages matching `pkg_spec` for installation. `reponame` can be a name of a repository or a list of repository names. If given, the selection of available packages is limited to packages from these repositories. If strict is set to False, the installation ignores packages with dependency solving problems. Parameter `forms` has the same meaning as in :meth:`dnf.subject.Subject.get_best_query`. .. method:: package_downgrade(pkg, strict=False) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/doc/api_conf.rst new/dnf-4.10.0/doc/api_conf.rst --- old/dnf-4.8.0/doc/api_conf.rst 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/doc/api_conf.rst 2021-10-21 08:31:48.000000000 +0200 @@ -83,6 +83,18 @@ Print configuration values, including inherited values. + .. method:: set_or_append_opt_value(name, value_string, priority=PRIO_RUNTIME). + + For standard options, sets the value of the option if the `priority` is equal to or higher + than the current priority. + For "append" options, appends the values parsed from `value_string` to the current list of values. If the first + parsed element of the list of values is empty and the `priority` is equal to or higher than the current + priority, the current list is replaced with the new values. + If the `priority` is higher than the current priority, the current priority is increased to the `priority`. + Raises :exc:`dnf.exceptions.ConfigError` if the option with the given `name` does not exist or `value_string` contains + an invalid value or not allowed value. + + .. method:: write_raw_configfile(filename, section_id, substitutions, modify) Update or create config file. Where `filename` represents name of config file (.conf or .repo); `section_id` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/doc/api_repos.rst new/dnf-4.10.0/doc/api_repos.rst --- old/dnf-4.8.0/doc/api_repos.rst 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/doc/api_repos.rst 2021-10-21 08:31:48.000000000 +0200 @@ -154,6 +154,17 @@ Set new user headers and rewrite existing ones. `headers` must be an instance of tuple of strings or list of strings. + .. method:: set_or_append_opt_value(name, value_string, priority=PRIO_RUNTIME). + + For standard repository options, sets the value of the option if the `priority` is equal to or higher + than the current priority. + For "append" options, appends the values parsed from `value_string` to the current list of values. If the first + parsed element of the list of values is empty and the `priority` is equal to or higher than the current + priority, the current list is replaced with the new values. + If the `priority` is higher than the current priority, the current priority is increased to the `priority`. + Raises :exc:`dnf.exceptions.ConfigError` if the option with the given `name` does not exist or `value_string` contains + an invalid value or not allowed value. + .. method:: set_progress_bar(progress) Set the download progress reporting object for this repo during :meth:`load`. `progress` must be an instance of :class:`dnf.callback.DownloadProgress`. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/doc/command_ref.rst new/dnf-4.10.0/doc/command_ref.rst --- old/dnf-4.8.0/doc/command_ref.rst 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/doc/command_ref.rst 2021-10-21 08:31:48.000000000 +0200 @@ -92,6 +92,7 @@ * :ref:`Options <options-label>` * :ref:`Specifying Packages <specifying_packages-label>` * :ref:`Specifying Provides <specifying_provides-label>` +* :ref:`Specifying File Provides <specifying_file-provides-label>` * :ref:`Specifying Groups <specifying_groups-label>` * :ref:`Specifying Transactions <specifying_transactions-label>` * :ref:`Metadata Synchronization <metadata_synchronization-label>` @@ -791,6 +792,7 @@ ------------ | Command: ``info`` +| Aliases: ``if`` ``dnf [options] info [<package-file-spec>...]`` Lists description and summary information about installed and available packages. @@ -1095,7 +1097,7 @@ ---------------- | Command: ``provides`` -| Aliases: ``prov``, ``whatprovides`` +| Aliases: ``prov``, ``whatprovides``, ``wp`` ``dnf [options] provides <provide-spec>`` Finds the packages providing the given ``<provide-spec>``. This is useful @@ -1222,6 +1224,9 @@ Searches available DNF repositories for selected packages and displays the requested information about them. It is an equivalent of ``rpm -q`` for remote repositories. +``dnf [options] repoquery --groupmember <package-spec>...`` + List groups that contain <package-spec>. + ``dnf [options] repoquery --querytags`` Provides the list of tags recognized by the \-\ :ref:`-queryformat <queryformat_repoquery-label>` repoquery option. @@ -1530,7 +1535,7 @@ List packages in the repository that upgrade packages installed on the system. ``dnf [options] repository-packages <repoid> install [<package-spec>...]`` - Install all packages in the repository. + Install packages matching ``<package-spec>`` from the repository. If ``<package-spec>`` isn't specified at all, install all packages from the repository. ``dnf [options] repository-packages <repoid> list [--all] [<package-file-spec>...]`` List all related packages. @@ -1651,6 +1656,7 @@ ------------------ | Command: ``updateinfo`` +| Aliases: ``upif`` | Deprecated aliases: ``list-updateinfo``, ``list-security``, ``list-sec``, ``info-updateinfo``, ``info-security``, ``info-sec``, ``summary-updateinfo`` ``dnf [options] updateinfo [--summary|--list|--info] [<availability>] [<spec>...]`` @@ -1834,6 +1840,14 @@ implicit provide (i.e. name of the package) or a file provide. The selection is case-sensitive and globbing is supported. +.. _specifying_file-provides-label: + +------------------------ +Specifying File Provides +------------------------ + +If a spec starts with either ``/`` or ``*/``, it is considered as a potential file provide. + .. _specifying_groups-label: ================= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/doc/conf_ref.rst new/dnf-4.10.0/doc/conf_ref.rst --- old/dnf-4.8.0/doc/conf_ref.rst 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/doc/conf_ref.rst 2021-10-21 08:31:48.000000000 +0200 @@ -208,6 +208,23 @@ and overwritten by \-\ :ref:`-verbose <verbose_options-label>` commandline option. +.. _exclude_from_weak-label: + +``exclude_from_weak`` + :ref:`list <list-label>` + + Prevent installing packages as weak dependencies (recommends or supplements). The packages can be specified + by a name or a glob and separated by a comma. Defaults to ``[]``. + +.. _exclude_from_weak_autodetect-label: + +``exclude_from_weak_autodetect`` + :ref:`boolean <boolean-label>` + + If enabled, dnf will autodetect unmet weak dependencies (recommends or supplements) of packages installed on the + system. Providers of these weak dependencies will not be installed by dnf as weak dependencies any more (they will + still be installed if pulled in as a regular dependency). Defaults to ``true``. + .. _exit_on_lock-label: ``exit_on_lock`` @@ -525,7 +542,6 @@ ``"/etc/dnf/vars", "/etc/yum/vars"``. See :ref:`variable files <varfiles-label>` in Configuration reference. -.. _conf_repo_options-label: ``zchunk`` :ref:`boolean <boolean-label>` @@ -539,7 +555,7 @@ [main] Options - Colors ========================= -.. _color-label: +.. _color-option-label: ``color`` :ref:`string <string-label>` @@ -547,7 +563,7 @@ Controls if DNF uses colored output on the command line. Possible values: "auto", "never", "always". Default is "auto". -.. _color_list_available_downgrade-label: +.. _color_list_available_downgrade-option-label: ``color_list_available_downgrade`` :ref:`color <color-label>` @@ -555,7 +571,7 @@ Color of available packages that are older than installed packages. The option is used during list operations. Default is magenta. -.. _color_list_available_install-label: +.. _color_list_available_install-option-label: ``color_list_available_install`` :ref:`color <color-label>` @@ -563,7 +579,7 @@ Color of packages that are available for installation and none of their versions in installed. The option is used during list operations. Default is bold,cyan. -.. _color_list_available_reinstall-label: +.. _color_list_available_reinstall-option-label: ``color_list_available_reinstall`` :ref:`color <color-label>` @@ -571,7 +587,7 @@ Color of available packages that are identical to installed versions and are available for reinstalls. Default is bold,underline,green. The option is used during list operations. -.. _color_list_available_upgrade-label: +.. _color_list_available_upgrade-option-label: ``color_list_available_upgrade`` :ref:`color <color-label>` @@ -579,7 +595,7 @@ Color of available packages that are newer than installed packages. Default is bold,blue. The option is used during list operations. -.. _color_list_installed_extra-label: +.. _color_list_installed_extra-option-label: ``color_list_installed_extra`` :ref:`color <color-label>` @@ -587,7 +603,7 @@ Color of installed packages that do not have any version among available packages. The option is used during list operations. Default is bold,red. -.. _color_list_installed_newer-label: +.. _color_list_installed_newer-option-label: ``color_list_installed_newer`` :ref:`color <color-label>` @@ -595,7 +611,7 @@ Color of installed packages that are newer than any version among available packages. The option is used during list operations. Default is bold,yellow. -.. _color_list_installed_older-label: +.. _color_list_installed_older-option-label: ``color_list_installed_older`` :ref:`color <color-label>` @@ -603,7 +619,7 @@ Color of installed packages that are older than any version among available packages. The option is used during list operations. Default is yellow. -.. _color_list_installed_reinstall-label: +.. _color_list_installed_reinstall-option-label: ``color_list_installed_reinstall`` :ref:`color <color-label>` @@ -611,14 +627,14 @@ Color of installed packages that are among available packages and can be reinstalled. The option is used during list operations. Default is cyan. -.. _color_search_match-label: +.. _color_search_match-option-label: ``color_search_match`` :ref:`color <color-label>` Color of patterns matched in search output. Default is bold,magenta. -.. _color_update_installed-label: +.. _color_update_installed-option-label: ``color_update_installed`` :ref:`color <color-label>` @@ -626,7 +642,7 @@ Color of removed packages. Default is red. This option is used during displaying transactions. -.. _color_update_local-label: +.. _color_update_local-option-label: ``color_update_local`` :ref:`color <color-label>` @@ -634,7 +650,7 @@ Color of local packages that are installed from the @commandline repository. This option is used during displaying transactions. Default is green. -.. _color_update_remote-label: +.. _color_update_remote-option-label: ``color_update_remote`` :ref:`color <color-label>` @@ -642,6 +658,7 @@ Color of packages that are installed/upgraded/downgraded from remote repositories. This option is used during displaying transactions. Default is bold,green. +.. _conf_repo_options-label: .. _repo-options-label: ============== @@ -654,6 +671,8 @@ :ref:`list <list-label>` List of URLs for the repository. Defaults to ``[]``. + + URLs are tried in the listed order (equivalent to yum's "failovermethod=priority" behaviour). .. _repo_cost-label: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/doc/modularity.rst new/dnf-4.10.0/doc/modularity.rst --- old/dnf-4.8.0/doc/modularity.rst 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/doc/modularity.rst 2021-10-21 08:31:48.000000000 +0200 @@ -66,6 +66,13 @@ or dependent stream. Modular source packages will not cause non-modular binary packages to be filtered out. + +Demodularized rpms +================== +Contains names of RPMs excluded from package filtering for particular module stream. When defined in the latest active +module, non-modular RPMs with the same name or provide which were previously filtered out will reappear. + + ===================== Hotfix repositories ===================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/doc/release_notes.rst new/dnf-4.10.0/doc/release_notes.rst --- old/dnf-4.8.0/doc/release_notes.rst 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/doc/release_notes.rst 2021-10-21 08:31:48.000000000 +0200 @@ -19,6 +19,46 @@ DNF Release Notes ################### +==================== +4.10.0 Release Notes +==================== + +- New features: + - Add support for autodetecting packages to be excluded from being installed as weak dependencies (RhBug:1699672) + - Add support for excluding packages to be installed as weak dependencies (RhBug:1699672) + - Add fail_fast parameter to download_payloads methods for use in reposync + +- Bug fixes: + - Acquire all relevant locks during "dnf clean" + - API: Raise CompsError when group/env not found in install_group and install_environment (RhBug:1947958) + +Bugs fixed in 4.10.0: + +* :rhbug:`1699672` +* :rhbug:`1947958` + +=================== +4.9.0 Release Notes +=================== + +- New features: + - [API] Add method "set_or_append_opt_value" to BaseConfig (RhBug:1967925) + - Add aliases for commands: info, updateinfo, provides (RhBug:1938333) + - Add report about demodularized rpms into module info (RhBug:1805260) + +- Bug fixes: + - Remove DNSSEC errors on COPR group email keys + - Documentation inprovements - bugs: 1938352, 1993899, 1963704 + +Bugs fixed in 4.9.0: + +* :rhbug:`1993899` +* :rhbug:`1805260` +* :rhbug:`1938352` +* :rhbug:`1967925` +* :rhbug:`1963704` +* :rhbug:`1938333` + =================== 4.8.0 Release Notes =================== @@ -2017,7 +2057,7 @@ DNF has moved to handling groups as objects, tagged installed/uninstalled independently from the actual installed packages. This has been in YUM as the ``group_command=objects`` setting and the default in recent Fedora releases. There are API extensions related to this change as well as two new CLI commands: ``group mark install`` and ``group mark remove``. -API items deprecated in 0.4.8 and 0.4.9 have been dropped in 0.4.18, in accordance with our :ref:`deprecating-label`. +API items deprecated in 0.4.8 and 0.4.9 have been dropped in 0.4.18, in accordance with our deprecation policy. API changes in 0.4.18: @@ -2218,7 +2258,7 @@ We're happy to announce that the API in 0.4.9 has been extended to finally support plugins. There is a limited set of plugin hooks now, we will carefully add new ones in the following releases. New marking operations have ben added to the API and also some configuration options. -An alternative to ``yum shell`` is provided now for its most common use case: :ref:`replacing a non-leaf package with a conflicting package <allowerasing_instead_of_shell>` is achieved by using the ``--allowerasing`` switch now. +An alternative to ``yum shell`` is provided now for its most common use case: replacing a non-leaf package with a conflicting package is achieved by using the ``--allowerasing`` switch now. API additions in 0.4.9: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/doc/summaries_cache new/dnf-4.10.0/doc/summaries_cache --- old/dnf-4.8.0/doc/summaries_cache 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/doc/summaries_cache 2021-10-21 08:31:48.000000000 +0200 @@ -3346,5 +3346,37 @@ [ 1946975, "dnf installs old version of dependency even though --best is used" + ], + [ + 1993899, + "4.8.0: sphinx warnings" + ], + [ + 1805260, + "Old module packages still show as default" + ], + [ + 1938352, + "Fix documentation: repository-packages" + ], + [ + 1967925, + "[RFE] Provide API to set repo configuration options as string" + ], + [ + 1963704, + "`dnf provides` requires a wildcard or else it only matches full paths" + ], + [ + 1938333, + "[rfe] Add aliases if and ar" + ], + [ + 1699672, + "RFE: dnf should not pull (already broken) weak dependencies on updates" + ], + [ + 1947958, + "DNF no longer raises an error when an unknown group is installed" ] ] \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dnf-4.8.0/po/CMakeLists.txt new/dnf-4.10.0/po/CMakeLists.txt --- old/dnf-4.8.0/po/CMakeLists.txt 2021-06-14 15:25:46.000000000 +0200 +++ new/dnf-4.10.0/po/CMakeLists.txt 2021-10-21 08:31:48.000000000 +0200 @@ -38,6 +38,14 @@ ) endif() +add_custom_target(gettext-pot + COMMENT "Generating fresh dnf.pot file from sources" + + COMMAND find ./dnf -iname "*.py" | + xargs xgettext -F --from-code=UTF-8 --keyword=P_:1,2 --keyword=C_:1c,2 -c --output=${CMAKE_CURRENT_SOURCE_DIR}/dnf.pot + + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) IF (GETTEXT_FOUND) # this process unfortunately reformats .po files so copy them
