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

Reply via email to