1
0
Fork 0

import dnf-plugins-core-4.0.12-3.el8

This commit is contained in:
CentOS Sources 2020-04-28 05:41:40 -04:00 committed by Andrew Lukoshko
parent 8b33c47539
commit 76e15a06e3
12 changed files with 44889 additions and 13816 deletions

View File

@ -1 +1 @@
e189d7f2acca298cd42b2dc18345b42fadf5e2f4 SOURCES/dnf-plugins-core-4.0.8.tar.gz
5618d7b20c37876e97e4e508952229835a430281 SOURCES/dnf-plugins-core-4.0.12.tar.gz

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/dnf-plugins-core-4.0.8.tar.gz
SOURCES/dnf-plugins-core-4.0.12.tar.gz

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,72 @@
From 8a9d9b7c09fb126baac22eda8ebb940412f4464c Mon Sep 17 00:00:00 2001
From: Marek Blaha <mblaha@redhat.com>
Date: Wed, 27 Nov 2019 13:43:58 +0100
Subject: [PATCH] [reposync] Fix --delete with multiple repos (RhBug:1774103)
When reposync was used with --delete option and multiple repositories
to sync, only packages from the latest repository were kept and all
downloaded content from former repositories was imediately deleted.
Additionaly it fixes the problem with multiple packages having the same
filename (in different subdirectories) in one repository. In this case
when --delete option was used, only one of those files was kept and the
others were deleted.
https://bugzilla.redhat.com/show_bug.cgi?id=1774103
---
plugins/reposync.py | 35 +++++++++++++++--------------------
1 file changed, 15 insertions(+), 20 deletions(-)
diff --git a/plugins/reposync.py b/plugins/reposync.py
index 10e9b0b5..fc612a7e 100644
--- a/plugins/reposync.py
+++ b/plugins/reposync.py
@@ -145,7 +145,7 @@ def run(self):
else:
self.download_packages(pkglist)
if self.opts.delete:
- self.delete_old_local_packages(pkglist)
+ self.delete_old_local_packages(repo, pkglist)
def repo_target(self, repo):
return _pkgdir(self.opts.destdir or self.opts.download_path, repo.id)
@@ -169,25 +169,20 @@ def pkg_download_path(self, pkg):
pkg_download_path, repo_target))
return pkg_download_path
- def delete_old_local_packages(self, packages_to_download):
- download_map = dict()
- for pkg in packages_to_download:
- download_map[(pkg.repo.id, os.path.basename(pkg.location))] = pkg.location
- # delete any *.rpm file, that is not going to be downloaded from repository
- for repo in self.base.repos.iter_enabled():
- repo_target = self.repo_target(repo)
- for dirpath, dirnames, filenames in os.walk(repo_target):
- for filename in filenames:
- path = os.path.join(dirpath, filename)
- if filename.endswith('.rpm') and os.path.isfile(path):
- location = download_map.get((repo.id, filename))
- if location is None or os.path.join(repo_target, location) != path:
- # Delete disappeared or relocated file
- try:
- os.unlink(path)
- logger.info(_("[DELETED] %s"), path)
- except OSError:
- logger.error(_("failed to delete file %s"), path)
+ def delete_old_local_packages(self, repo, pkglist):
+ # delete any *.rpm file under target path, that was not downloaded from repository
+ downloaded_files = set(self.pkg_download_path(pkg) for pkg in pkglist)
+ for dirpath, dirnames, filenames in os.walk(self.repo_target(repo)):
+ for filename in filenames:
+ path = os.path.join(dirpath, filename)
+ if filename.endswith('.rpm') and os.path.isfile(path):
+ if path not in downloaded_files:
+ # Delete disappeared or relocated file
+ try:
+ os.unlink(path)
+ logger.info(_("[DELETED] %s"), path)
+ except OSError:
+ logger.error(_("failed to delete file %s"), path)
def getcomps(self, repo):
comps_fn = repo._repo.getCompsFn()

View File

@ -0,0 +1,56 @@
From b60770dba985dfaab8bedc04e7c3b6a5c3a59d51 Mon Sep 17 00:00:00 2001
From: Jaroslav Mracek <jmracek@redhat.com>
Date: Fri, 29 Nov 2019 10:48:55 +0100
Subject: [PATCH] Redesign reposync --newest_only for modular system
(RhBug:1775434)
reposync --newest_only will download all latest non-modular packages
plus all packages for contexts with latest version for each module
stream.
https://bugzilla.redhat.com/show_bug.cgi?id=1775434
---
plugins/reposync.py | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/plugins/reposync.py b/plugins/reposync.py
index 10e9b0b5..c1bc6a99 100644
--- a/plugins/reposync.py
+++ b/plugins/reposync.py
@@ -203,11 +203,35 @@ def download_metadata(self, repo):
repo._repo.downloadMetadata(repo_target)
return True
+ def _get_latest(self, query):
+ """
+ return query with latest nonmodular package and all packages from latest version per stream
+ """
+ if not dnf.base.WITH_MODULES:
+ return query.latest()
+ query.apply()
+ module_packages = self.base._moduleContainer.getModulePackages()
+ all_artifacts = set()
+ module_dict = {} # {NameStream: {Version: [modules]}}
+ for module_package in module_packages:
+ all_artifacts.update(module_package.getArtifacts())
+ module_dict.setdefault(module_package.getNameStream(), {}).setdefault(
+ module_package.getVersionNum(), []).append(module_package)
+ non_modular_latest = query.filter(
+ pkg__neq=query.filter(nevra_strict=all_artifacts)).latest()
+ latest_artifacts = set()
+ for version_dict in module_dict.values():
+ keys = sorted(version_dict.keys(), reverse=True)
+ for module in version_dict[keys[0]]:
+ latest_artifacts.update(module.getArtifacts())
+ latest_modular_query = query.filter(nevra_strict=latest_artifacts)
+ return latest_modular_query.union(non_modular_latest)
+
def get_pkglist(self, repo):
query = self.base.sack.query(flags=hawkey.IGNORE_MODULAR_EXCLUDES).available().filterm(
reponame=repo.id)
if self.opts.newest_only:
- query = query.latest()
+ query = self._get_latest(query)
if self.opts.source:
query.filterm(arch='src')
elif self.opts.arches:

View File

@ -1,152 +0,0 @@
From 322125be1b32e9fedb2a9ea25e6e9af5f255e225 Mon Sep 17 00:00:00 2001
From: Jaroslav Mracek <jmracek@redhat.com>
Date: Wed, 26 Jun 2019 14:56:00 +0200
Subject: [PATCH 1/2] [spec] Rename dnf-utils to yum-utils (RhBug:1722093)
https://bugzilla.redhat.com/show_bug.cgi?id=1722093
---
dnf-plugins-core.spec | 29 ++++++++++++++++++-----------
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/dnf-plugins-core.spec b/dnf-plugins-core.spec
index 154ee7f..be01cd2 100644
--- a/dnf-plugins-core.spec
+++ b/dnf-plugins-core.spec
@@ -1,6 +1,7 @@
%{?!dnf_lowest_compatible: %global dnf_lowest_compatible 4.2.1}
%global dnf_plugins_extra 2.0.0
%global hawkey_version 0.34.0
+%global yum_utils_subpackage_name dnf-utils
%if 0%{?rhel} && 0%{?rhel} <= 7
%bcond_with python3
@@ -15,15 +16,16 @@
%endif
%if 0%{?rhel} > 7 || 0%{?fedora} > 30
+%global yum_utils_subpackage_name yum-utils
%bcond_without yumcompatibility
%else
%bcond_with yumcompatibility
%endif
%if 0%{?rhel} && 0%{?rhel} <= 7
-%bcond_with dnfutils
+%bcond_with yumutils
%else
-%bcond_without dnfutils
+%bcond_without yumutils
%endif
Name: dnf-plugins-core
@@ -161,12 +163,17 @@ repoclosure, repograph, repomanage, reposync, changelog and repodiff commands.
Additionally provides generate_completion_cache passive plugin.
%endif
-%if %{with dnfutils}
-%package -n dnf-utils
+%if %{with yumutils}
+%package -n %{yum_utils_subpackage_name}
+%if "%{yum_utils_subpackage_name}" == "dnf-utils"
Conflicts: yum-utils < 1.1.31-513
%if 0%{?rhel} != 7
Provides: yum-utils = %{version}-%{release}
%endif
+%else
+Provides: dnf-utils = %{version}-%{release}
+Obsoletes: dnf-utils < %{version}-%{release}
+%endif
Requires: dnf >= %{dnf_lowest_compatible}
Requires: %{name} = %{version}-%{release}
%if %{with python3}
@@ -176,7 +183,7 @@ Requires: python2-dnf >= %{dnf_lowest_compatible}
%endif
Summary: Yum-utils CLI compatibility layer
-%description -n dnf-utils
+%description -n %{yum_utils_subpackage_name}
As a Yum-utils CLI compatibility layer, supplies in CLI shims for
debuginfo-install, repograph, package-cleanup, repoclosure, repomanage,
repoquery, reposync, repotrack, repodiff, builddep, config-manager, debug
@@ -393,7 +400,7 @@ pushd build-py3
popd
%endif
%find_lang %{name}
-%if %{with dnfutils}
+%if %{with yumutils}
%if %{with python3}
mv %{buildroot}%{_libexecdir}/dnf-utils-3 %{buildroot}%{_libexecdir}/dnf-utils
%else
@@ -402,7 +409,7 @@ popd
%endif
rm -vf %{buildroot}%{_libexecdir}/dnf-utils-*
-%if %{with dnfutils}
+%if %{with yumutils}
mkdir -p %{buildroot}%{_bindir}
ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/debuginfo-install
ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/needs-restarting
@@ -523,8 +530,8 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
%{python3_sitelib}/dnfpluginscore/
%endif
-%if %{with dnfutils}
-%files -n dnf-utils
+%if %{with yumutils}
+%files -n %{yum_utils_subpackage_name}
%{_libexecdir}/dnf-utils
%{_bindir}/debuginfo-install
%{_bindir}/needs-restarting
@@ -556,13 +563,13 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
%{_mandir}/man1/yumdownloader.*
%{_mandir}/man1/package-cleanup.*
%{_mandir}/man1/dnf-utils.*
-# These are only built with dnfutils bcond.
+# These are only built with yumutils bcond.
%{_mandir}/man1/find-repos-of-install.*
%{_mandir}/man1/repoquery.*
%{_mandir}/man1/repotrack.*
%{_mandir}/man1/yum-utils.*
%else
-# These are built regardless of dnfutils bcond so we need to exclude them.
+# These are built regardless of yumutils bcond so we need to exclude them.
%exclude %{_mandir}/man1/debuginfo-install.*
%exclude %{_mandir}/man1/needs-restarting.*
%exclude %{_mandir}/man1/repo-graph.*
--
2.21.0
From a58ded1019343ea50cf40bd94ad6aaf69fa91a37 Mon Sep 17 00:00:00 2001
From: Jaroslav Mracek <jmracek@redhat.com>
Date: Thu, 27 Jun 2019 09:22:29 +0200
Subject: [PATCH 2/2] [doc] Changed header in dnf-utils/yum-utils documentation
(RhBug:1722093)
The documentation is mainly yum-utils description and package from
Fedora 31 is going to be renamed to yum-utils, therefore the primary
name in documentation should be yum-utils.
https://bugzilla.redhat.com/show_bug.cgi?id=1722093
---
doc/dnf-utils.rst | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/doc/dnf-utils.rst b/doc/dnf-utils.rst
index 02dfc1d..311e980 100644
--- a/doc/dnf-utils.rst
+++ b/doc/dnf-utils.rst
@@ -1,8 +1,8 @@
=========
-DNF Utils
+YUM Utils
=========
-The main purpose of these shims is ensuring backward compatibility.
+The main purpose of these shims is ensuring backward compatibility with yum-3.
--------------
Shell Commands
--
2.21.0

View File

@ -1,121 +0,0 @@
From 5a3b3bf30c37ebdcf7f3e25d4eac7039acfe57c4 Mon Sep 17 00:00:00 2001
From: Marek Blaha <mblaha@redhat.com>
Date: Fri, 31 May 2019 09:48:13 +0200
Subject: [PATCH] [builddep] Report all rpm errors (RhBug:1663619,1658292,1724668)
Dnf uses rpm for parsing .spec and srpm files. Any parsing
errors were not reported to the user, but swallowed by dnf.
User was only informed that the spec file could not be parsed:
$ dnf builddep gdb.spec
Failed to open: 'gdb.spec', not a valid spec file: can't parse specfile
This patch also prints messages from rpm error log to the user so he
could better understand what the root cause of the problem is:
$ dnf builddep gdb.spec
RPM: error: Unable to open /root/rpmbuild/SOURCES/_gdb.spec.Patch.include: No such file or directory
Failed to open: 'gdb.spec', not a valid spec file: can't parse specfile
https://bugzilla.redhat.com/show_bug.cgi?id=1663619
https://bugzilla.redhat.com/show_bug.cgi?id=1658292
https://bugzilla.redhat.com/show_bug.cgi?id=1724668
---
dnf-plugins-core.spec | 2 +-
plugins/builddep.py | 38 +++++++++-----------------------------
2 files changed, 10 insertions(+), 30 deletions(-)
diff --git a/dnf-plugins-core.spec b/dnf-plugins-core.spec
index be01cd2..b84477f 100644
--- a/dnf-plugins-core.spec
+++ b/dnf-plugins-core.spec
@@ -1,4 +1,4 @@
-%{?!dnf_lowest_compatible: %global dnf_lowest_compatible 4.2.1}
+%{?!dnf_lowest_compatible: %global dnf_lowest_compatible 4.2.8}
%global dnf_plugins_extra 2.0.0
%global hawkey_version 0.34.0
%global yum_utils_subpackage_name dnf-utils
diff --git a/plugins/builddep.py b/plugins/builddep.py
index bc3b257..0252d1f 100644
--- a/plugins/builddep.py
+++ b/plugins/builddep.py
@@ -21,44 +21,18 @@
from __future__ import absolute_import
from __future__ import unicode_literals
-from dnfpluginscore import _, logger, rpm_logger
+from dnfpluginscore import _, logger
import argparse
import dnf
import dnf.cli
import dnf.exceptions
import dnf.rpm.transaction
-import functools
-import logging
+import dnf.yum.rpmtrans
import os
import rpm
-class redirect_rpm_logging(object):
- def __init__(self):
- self.sink = None
-
- def __call__(self, func):
- @functools.wraps(func)
- def inner(*args, **kwds):
- with self:
- return func(*args, **kwds)
- return inner
-
- def __enter__(self):
- for handler in rpm_logger.handlers:
- if isinstance(handler, logging.FileHandler):
- rpm.setLogFile(handler.stream)
- break
- else:
- self.sink = open('/dev/null', 'w')
- rpm.setLogFile(self.sink)
-
- def __exit__(self, exc_type, exc, exc_tb):
- if self.sink:
- self.sink.close()
-
-
@dnf.plugin.register_command
class BuildDepCommand(dnf.cli.Command):
@@ -91,6 +65,10 @@ class BuildDepCommand(dnf.cli.Command):
ptype.add_argument('--srpm', action='store_true',
help=_('treat commandline arguments as source rpm'))
+ def pre_configure(self):
+ if not self.opts.rpmverbosity:
+ self.opts.rpmverbosity = 'error'
+
def configure(self):
demands = self.cli.demands
demands.available_repos = True
@@ -107,8 +85,8 @@ class BuildDepCommand(dnf.cli.Command):
self.base.repos.enable_source_repos()
break
- @redirect_rpm_logging()
def run(self):
+ rpmlog = dnf.yum.rpmtrans.RPMTransaction(self.base)
# Push user-supplied macro definitions for spec parsing
for macro in self.opts.define:
rpm.addMacro(macro[0], macro[1])
@@ -127,6 +105,8 @@ class BuildDepCommand(dnf.cli.Command):
else:
self._remote_deps(pkgspec)
except dnf.exceptions.Error as e:
+ for line in rpmlog.messages():
+ logger.error(_("RPM: {}").format(line))
logger.error(e)
pkg_errors = True
--
libgit2 0.28.2

View File

@ -0,0 +1,34 @@
From 5bc8e4aee27f2e265ad034060c790d881d0af28a Mon Sep 17 00:00:00 2001
From: Pavla Kratochvilova <pkratoch@redhat.com>
Date: Thu, 2 Jan 2020 14:39:09 +0100
Subject: [PATCH] [config-manager] Allow use of --set-enabled without arguments
(RhBug:1679213)
Since config-manager was enhanced to also modify repositories specified
by repoids in the --setopt option, it should no longer be required to
specify repoids as arguments for --set-enabled.
As a consequence, "config-manager --set-enabled" without any other
argument will exit with 0 and have no effect (same as "--set-disabled").
https://bugzilla.redhat.com/show_bug.cgi?id=1679213
---
plugins/config_manager.py | 5 -----
1 file changed, 5 deletions(-)
diff --git a/plugins/config_manager.py b/plugins/config_manager.py
index 4e03d642..bf238ea9 100644
--- a/plugins/config_manager.py
+++ b/plugins/config_manager.py
@@ -67,11 +67,6 @@ def configure(self):
def run(self):
"""Execute the util action here."""
-
- if self.opts.set_enabled and not self.opts.crepo:
- logger.error(_("Error: Trying to enable already enabled repos."))
- self.opts.set_enabled = False
-
if self.opts.add_repo:
self.add_repo()
else:

View File

@ -1,342 +0,0 @@
From e5a30424d51f9c20cd0ec6cd3e515ac5509a9287 Mon Sep 17 00:00:00 2001
From: Jaroslav Rohel <jrohel@redhat.com>
Date: Thu, 18 Jul 2019 09:50:43 +0200
Subject: [PATCH 1/6] [config-manager] --setopt: Fix crash with "--save --dump"
(RhBug:1702678)
Removes useless code which only causes crash.
Example of crash:
dnf config-manager --save --dump --setopt=fedora.gpgcheck=1 fedora
============================================================== repo: fedora ==============================================================
Error: Error parsing '['1']': Wrong number or type of arguments for overloaded function 'OptionChildBool_set'.
Possible C/C++ prototypes are:
libdnf::OptionChild< libdnf::OptionBool >::set(libdnf::Option::Priority,libdnf::OptionBool::ValueType const &)
libdnf::OptionChild< libdnf::OptionBool >::set(libdnf::Option::Priority,std::string const &)
---
plugins/config_manager.py | 5 -----
1 file changed, 5 deletions(-)
diff --git a/plugins/config_manager.py b/plugins/config_manager.py
index 38fd51d..6db1bcb 100644
--- a/plugins/config_manager.py
+++ b/plugins/config_manager.py
@@ -90,8 +90,6 @@ class ConfigManagerCommand(dnf.cli.Command):
self.base.conf.write_raw_configfile(dnf.const.CONF_FILENAME, 'main', sbc.substitutions, modify)
if self.opts.dump:
print(self.base.output.fmtSection('main'))
- for name, val in modify.items():
- sbc._set_value(name, val)
print(self.base.conf.dump())
if self.opts.set_enabled or self.opts.set_disabled:
@@ -120,9 +118,6 @@ class ConfigManagerCommand(dnf.cli.Command):
self.base.conf.write_raw_configfile(repo.repofile, repo.id, sbc.substitutions, repo_modify)
if self.opts.dump:
print(self.base.output.fmtSection('repo: ' + repo.id))
- for name, val in repo_modify.items():
- if repo._has_option(name):
- repo._set_value(name, val)
print(repo.dump())
def add_repo(self):
--
2.21.0
From f096fe3e88884f8cc212bfcee5549bfc6b8a3ad0 Mon Sep 17 00:00:00 2001
From: Jaroslav Rohel <jrohel@redhat.com>
Date: Wed, 10 Jul 2019 09:21:37 +0200
Subject: [PATCH 2/6] [config-manager] --setopt: Add globs support to repoid
(RhBug:1702678)
Set key in all repositories whose id starts with "updates-testing":
dnf config-manager --save --setopt=updates-testing*.skip_if_unavailable=true
---
plugins/config_manager.py | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/plugins/config_manager.py b/plugins/config_manager.py
index 6db1bcb..dedcc82 100644
--- a/plugins/config_manager.py
+++ b/plugins/config_manager.py
@@ -23,6 +23,7 @@ from dnfpluginscore import _, logger, P_
import dnf
import dnf.cli
import dnf.pycomp
+import fnmatch
import os
import re
import shutil
@@ -111,9 +112,10 @@ class ConfigManagerCommand(dnf.cli.Command):
repo_modify['enabled'] = "1"
elif self.opts.set_disabled:
repo_modify['enabled'] = "0"
- if (hasattr(self.opts, 'repo_setopts')
- and repo.id in self.opts.repo_setopts):
- repo_modify.update(self.opts.repo_setopts[repo.id])
+ if hasattr(self.opts, 'repo_setopts'):
+ for repoid, setopts in self.opts.repo_setopts.items():
+ if fnmatch.fnmatch(repo.id, repoid):
+ repo_modify.update(setopts)
if self.opts.save and repo_modify:
self.base.conf.write_raw_configfile(repo.repofile, repo.id, sbc.substitutions, repo_modify)
if self.opts.dump:
--
2.21.0
From c2ef00188a7ec911a5efc36d3df0cceae5a682c1 Mon Sep 17 00:00:00 2001
From: Jaroslav Rohel <jrohel@redhat.com>
Date: Tue, 16 Jul 2019 13:32:39 +0200
Subject: [PATCH 3/6] [config-manager] --setopt=key=value is not applied to
repositories config (RhBug:1702678)
The command "dnf config-manager --setopt=key=value repo1 main" set key value
in repo1 and global config before the patch. It was inconsistent with the rest
of DNF because "--setopt=key=value" means to set key in global config only.
To set key in repos we can use "--setopt=*.key=value".
---
plugins/config_manager.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/config_manager.py b/plugins/config_manager.py
index dedcc82..1dcf085 100644
--- a/plugins/config_manager.py
+++ b/plugins/config_manager.py
@@ -107,7 +107,7 @@ class ConfigManagerCommand(dnf.cli.Command):
raise dnf.exceptions.Error(_("No matching repo to modify: %s.")
% ', '.join(self.opts.crepo))
for repo in sorted(matched):
- repo_modify = dict(modify) # create local copy
+ repo_modify = {}
if self.opts.set_enabled:
repo_modify['enabled'] = "1"
elif self.opts.set_disabled:
--
2.21.0
From 3af60a1613877ad2fd090a83ba9da00623a00818 Mon Sep 17 00:00:00 2001
From: Jaroslav Rohel <jrohel@redhat.com>
Date: Tue, 16 Jul 2019 14:05:54 +0200
Subject: [PATCH 4/6] [config-manager] --setopt and empty list of repositories
(RhBug:1702678)
This:
"dnf config-manager --save --setopts=repo1.key1=value1 --setopt=repo2.key2=value2 repo1 repo2"
can be replaced by this now:
"dnf config-manager --save --setopts=repo1.key1=value1 --setopt=repo2.key2=value2"
Empty list of repositories allowed to change only the global configuration
before. Now empty list of repositories means that setopt works
for any repository too.
Better compatibility with YUM.
It solves : https://bugzilla.redhat.com/show_bug.cgi?id=1702678
---
plugins/config_manager.py | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/plugins/config_manager.py b/plugins/config_manager.py
index 1dcf085..41b36fa 100644
--- a/plugins/config_manager.py
+++ b/plugins/config_manager.py
@@ -96,12 +96,16 @@ class ConfigManagerCommand(dnf.cli.Command):
if self.opts.set_enabled or self.opts.set_disabled:
self.opts.save = True
+ matched = []
if self.opts.crepo:
- matched = []
for name in self.opts.crepo:
matched.extend(self.base.repos.get_matching(name))
else:
- return
+ if hasattr(self.opts, 'repo_setopts'):
+ for name in self.opts.repo_setopts.keys():
+ matched.extend(self.base.repos.get_matching(name))
+ if not matched:
+ return
if not matched:
raise dnf.exceptions.Error(_("No matching repo to modify: %s.")
--
2.21.0
From 27205851a592a3383a7592d87ceee5b69c9dfb70 Mon Sep 17 00:00:00 2001
From: Jaroslav Rohel <jrohel@redhat.com>
Date: Tue, 16 Jul 2019 15:51:38 +0200
Subject: [PATCH 5/6] [config-manager] --setopt: Add check for existence of
input repositories (RhBug:1702678)
Examples:
dnf config-manager --save --setopt=non_existent.key=value
Error: No matching repo to modify: non_existent.
dnf config-manager --save --setopt=non_existent*.key=value
Error: No matching repo to modify: non_existent*.
None change in configuration is done after the error.
---
plugins/config_manager.py | 44 ++++++++++++++++++++++++++-------------
1 file changed, 29 insertions(+), 15 deletions(-)
diff --git a/plugins/config_manager.py b/plugins/config_manager.py
index 41b36fa..83d58be 100644
--- a/plugins/config_manager.py
+++ b/plugins/config_manager.py
@@ -78,6 +78,31 @@ class ConfigManagerCommand(dnf.cli.Command):
def modify_repo(self):
""" process --set-enabled, --set-disabled and --setopt options """
+ matching_repos = [] # list of matched repositories
+ not_matching_repos_id = set() # IDs of not matched repositories
+
+ def match_repos(key, add_matching_repos):
+ matching = self.base.repos.get_matching(key)
+ if not matching:
+ not_matching_repos_id.add(name)
+ elif add_matching_repos:
+ matching_repos.extend(matching)
+
+ if self.opts.crepo:
+ for name in self.opts.crepo:
+ match_repos(name, True)
+ if hasattr(self.opts, 'repo_setopts'):
+ for name in self.opts.repo_setopts.keys():
+ match_repos(name, False)
+ else:
+ if hasattr(self.opts, 'repo_setopts'):
+ for name in self.opts.repo_setopts.keys():
+ match_repos(name, True)
+
+ if not_matching_repos_id:
+ raise dnf.exceptions.Error(_("No matching repo to modify: %s.")
+ % ', '.join(not_matching_repos_id))
+
sbc = self.base.conf
modify = {}
if hasattr(self.opts, 'main_setopts') and self.opts.main_setopts:
@@ -93,24 +118,13 @@ class ConfigManagerCommand(dnf.cli.Command):
print(self.base.output.fmtSection('main'))
print(self.base.conf.dump())
+ if not matching_repos:
+ return
+
if self.opts.set_enabled or self.opts.set_disabled:
self.opts.save = True
- matched = []
- if self.opts.crepo:
- for name in self.opts.crepo:
- matched.extend(self.base.repos.get_matching(name))
- else:
- if hasattr(self.opts, 'repo_setopts'):
- for name in self.opts.repo_setopts.keys():
- matched.extend(self.base.repos.get_matching(name))
- if not matched:
- return
-
- if not matched:
- raise dnf.exceptions.Error(_("No matching repo to modify: %s.")
- % ', '.join(self.opts.crepo))
- for repo in sorted(matched):
+ for repo in sorted(matching_repos):
repo_modify = {}
if self.opts.set_enabled:
repo_modify['enabled'] = "1"
--
2.21.0
From f7d1fa8e5f657b3cc8ed60acdeaa02f6b725312a Mon Sep 17 00:00:00 2001
From: Jaroslav Rohel <jrohel@redhat.com>
Date: Thu, 18 Jul 2019 12:13:43 +0200
Subject: [PATCH 6/6] [config-manager] Update documentation (RhBug:1702678)
---
doc/config_manager.rst | 32 +++++++++++++++++++++-----------
1 file changed, 21 insertions(+), 11 deletions(-)
diff --git a/doc/config_manager.rst b/doc/config_manager.rst
index 2feafcb..80ee0fa 100644
--- a/doc/config_manager.rst
+++ b/doc/config_manager.rst
@@ -19,22 +19,25 @@
DNF config-manager Plugin
==========================
-Manage main DNF configuration options, toggle which
+Manage main and repository DNF configuration options, toggle which
repositories are enabled or disabled, and add new repositories.
--------
Synopsis
--------
-``dnf config-manager [options] <repoid>...``
+``dnf config-manager [options] <section>...``
---------
Arguments
---------
-``<repoid>``
- Display / modify a repository identified by <repoid>. If not specified, display / modify
- main DNF configuration. Repositories can be specified using globs.
+``<section>``
+ This argument can be used to explicitly select the configuration sections to manage.
+ A section can either be ``main`` or a repoid.
+ If not specified, the program will select the ``main`` section and each repoid
+ used within any ``--setopt`` options.
+ A repoid can be specified using globs.
-------
Options
@@ -51,13 +54,17 @@ Options
Print dump of current configuration values to stdout.
``--set-disabled``, ``--disable``
- Disable the specified repos (automatically saves).
+ Disable the specified repos (implies ``--save``).
``--set-enabled``, ``--enable``
- Enable the specified repos (automatically saves).
+ Enable the specified repos (implies ``--save``).
``--save``
- Save the current options (useful with --setopt).
+ Save the current options (useful with ``--setopt``).
+
+``--setopt=<option>=<value>``
+ Set a configuration option. To set configuration options for repositories, use
+ ``repoid.option`` for the ``<option>``. Globs are supported in repoid.
--------
Examples
@@ -71,12 +78,15 @@ Examples
``dnf config-manager --dump``
Display main DNF configuration.
-``dnf config-manager <repoid> --dump``
- Display configuration of a repository identified by <repoid>.
+``dnf config-manager --dump <section>``
+ Display configuration of a repository identified by <section>.
``dnf config-manager --set-enabled <repoid>``
Enable repository identified by <repoid> and make the change permanent.
-``dnf config-manager --setopt proxy=http://proxy.example.com:3128/ <repo1> <repo2> --save``
+``dnf config-manager --save --setopt=*.proxy=http://proxy.example.com:3128/ <repo1> <repo2>``
Update proxy setting in repositories with repoid <repo1> and <repo2> and make the change
permanent.
+
+``dnf config-manager --save --setopt=*-debuginfo.gpgcheck=0``
+ Update gpgcheck setting in all repositories whose id ends with -debuginfo and make the change permanent.
--
2.21.0

File diff suppressed because it is too large Load Diff

View File

@ -1,82 +0,0 @@
From 134d5405d024e6e313e24062ed92fa2a946e0287 Mon Sep 17 00:00:00 2001
From: Michal Domonkos <mdomonko@redhat.com>
Date: Fri, 9 Aug 2019 17:34:58 +0200
Subject: [PATCH] [spec] Generate yum-utils(1) instead of symlinking (RhBug:1676418)
This ensures that the man page actually says "yum-utils" instead of
"dnf-utils" in the beginning.
---
dnf-plugins-core.spec | 12 ++++++------
doc/CMakeLists.txt | 1 +
doc/conf.py | 2 ++
3 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/dnf-plugins-core.spec b/dnf-plugins-core.spec
index b84477f..a072438 100644
--- a/dnf-plugins-core.spec
+++ b/dnf-plugins-core.spec
@@ -428,11 +428,10 @@ ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/yum-debug-dump
ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/yum-debug-restore
ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/yumdownloader
# These commands don't have a dedicated man page, so let's just point them to
-# dnf-utils(1) which contains the descriptions.
-ln -sf %{_mandir}/man1/dnf-utils.1.gz %{buildroot}%{_mandir}/man1/find-repos-of-install.1.gz
-ln -sf %{_mandir}/man1/dnf-utils.1.gz %{buildroot}%{_mandir}/man1/repoquery.1.gz
-ln -sf %{_mandir}/man1/dnf-utils.1.gz %{buildroot}%{_mandir}/man1/repotrack.1.gz
-ln -sf %{_mandir}/man1/dnf-utils.1.gz %{buildroot}%{_mandir}/man1/yum-utils.1.gz
+# to the utils page which contains their descriptions.
+ln -sf %{_mandir}/man1/%{yum_utils_subpackage_name}.1.gz %{buildroot}%{_mandir}/man1/find-repos-of-install.1.gz
+ln -sf %{_mandir}/man1/%{yum_utils_subpackage_name}.1.gz %{buildroot}%{_mandir}/man1/repoquery.1.gz
+ln -sf %{_mandir}/man1/%{yum_utils_subpackage_name}.1.gz %{buildroot}%{_mandir}/man1/repotrack.1.gz
%endif
%check
@@ -563,11 +562,11 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
%{_mandir}/man1/yumdownloader.*
%{_mandir}/man1/package-cleanup.*
%{_mandir}/man1/dnf-utils.*
+%{_mandir}/man1/yum-utils.*
# These are only built with yumutils bcond.
%{_mandir}/man1/find-repos-of-install.*
%{_mandir}/man1/repoquery.*
%{_mandir}/man1/repotrack.*
-%{_mandir}/man1/yum-utils.*
%else
# These are built regardless of yumutils bcond so we need to exclude them.
%exclude %{_mandir}/man1/debuginfo-install.*
@@ -584,6 +583,7 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
%exclude %{_mandir}/man1/yumdownloader.*
%exclude %{_mandir}/man1/package-cleanup.*
%exclude %{_mandir}/man1/dnf-utils.*
+%exclude %{_mandir}/man1/yum-utils.*
%endif
%if 0%{?rhel} == 0
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
index b4ba2d5..b258c84 100644
--- a/doc/CMakeLists.txt
+++ b/doc/CMakeLists.txt
@@ -60,6 +60,7 @@ INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/debuginfo-install.1
${CMAKE_CURRENT_BINARY_DIR}/yumdownloader.1
${CMAKE_CURRENT_BINARY_DIR}/package-cleanup.1
${CMAKE_CURRENT_BINARY_DIR}/dnf-utils.1
+ ${CMAKE_CURRENT_BINARY_DIR}/yum-utils.1
DESTINATION share/man/man1)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/yum-versionlock.conf.5
diff --git a/doc/conf.py b/doc/conf.py
index b4bbba5..fd6d28c 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -293,6 +293,8 @@ man_pages = [
'orphaned packages.', AUTHORS, 1),
('dnf-utils', 'dnf-utils', u'classic YUM utilities implemented as CLI shims on top of DNF',
AUTHORS, 1),
+ ('dnf-utils', 'yum-utils', u'classic YUM utilities implemented as CLI shims on top of DNF',
+ AUTHORS, 1),
]
# If true, show URL addresses after external links.
--
libgit2 0.28.2

View File

@ -1,7 +1,10 @@
%{?!dnf_lowest_compatible: %global dnf_lowest_compatible 4.2.7-3}
%{?!dnf_lowest_compatible: %global dnf_lowest_compatible 4.2.17}
%global dnf_plugins_extra 2.0.0
%global hawkey_version 0.34.0
%global hawkey_version 0.37.0
%global yum_utils_subpackage_name dnf-utils
%if 0%{?rhel} > 7
%global yum_utils_subpackage_name yum-utils
%endif
%if 0%{?rhel} && 0%{?rhel} <= 7
%bcond_with python3
@ -16,7 +19,6 @@
%endif
%if 0%{?rhel} > 7 || 0%{?fedora} > 30
%global yum_utils_subpackage_name yum-utils
%bcond_without yumcompatibility
%else
%bcond_with yumcompatibility
@ -29,17 +31,16 @@
%endif
Name: dnf-plugins-core
Version: 4.0.8
Version: 4.0.12
Release: 3%{?dist}
Summary: Core Plugins for DNF
License: GPLv2+
URL: https://github.com/rpm-software-management/dnf-plugins-core
Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz
Patch0: 0001-Update-localizations-from-zanata-RhBug1689984.patch
Patch1: 0002-Rename-dnf-utils-to-yum-utils-RhBug1722093.patch
Patch2: 0003-builddep-Report-all-rpm-errors-RhBug166361916582921724668.patch
Patch3: 0004-Behaviour-of--setopt-in-config-manager-plugin-RhBug1702678.patch
Patch4: 0005-spec-Generate-yum-utils1-instead-of-symlinking-RhBug1676418.patch
Patch1: 0001-reposync-Fix-delete-with-multiple-repos-RhBug1774103.patch
Patch2: 0002-Redesign-reposync-latest-for-modular-system-RhBug1775434.patch
Patch3: 0003-config-manager-Allow-use-of-set-enabled-without-arguments-RhBug1679213.patch
Patch4: 0004-Update-translations-from-zanata-RhBug-1754960.patch
BuildArch: noarch
BuildRequires: cmake
@ -172,10 +173,9 @@ Additionally provides generate_completion_cache passive plugin.
%if %{with yumutils}
%package -n %{yum_utils_subpackage_name}
%if "%{yum_utils_subpackage_name}" == "dnf-utils"
Conflicts: yum-utils < 1.1.31-513
Conflicts: yum-utils < 1.1.31-520
%if 0%{?rhel} != 7
Provides: yum-utils = %{version}-%{release}
Obsoletes: yum-utils < 1.1.31-513
%endif
%else
Provides: dnf-utils = %{version}-%{release}
@ -286,6 +286,34 @@ Obsoletes: python-dnf-plugins-extras-migrate < %{dnf_plugins_extra}
Migrate Plugin for DNF, Python 2 version. Migrates history, group and yumdb data from yum to dnf.
%endif
%if %{with python2}
%package -n python2-dnf-plugin-post-transaction-actions
Summary: Post transaction actions Plugin for DNF
Requires: python2-%{name} = %{version}-%{release}
%if !%{with python3}
Provides: dnf-plugin-post-transaction-actions = %{version}-%{release}
%endif
Conflicts: python3-dnf-plugin-post-transaction-actions < %{version}-%{release}
%description -n python2-dnf-plugin-post-transaction-actions
Post transaction actions Plugin for DNF, Python 2 version. Plugin runs actions
(shell commands) after transaction is completed. Actions are defined in action
files.
%endif
%if %{with python3}
%package -n python3-dnf-plugin-post-transaction-actions
Summary: Post transaction actions Plugin for DNF
Requires: python3-%{name} = %{version}-%{release}
Provides: dnf-plugin-post-transaction-actions = %{version}-%{release}
Conflicts: python2-dnf-plugin-post-transaction-actions < %{version}-%{release}
%description -n python3-dnf-plugin-post-transaction-actions
Post transaction actions Plugin for DNF, Python 3 version. Plugin runs actions
(shell commands) after transaction is completed. Actions are defined in action
files.
%endif
%if 0%{?rhel} == 0 && %{with python2}
%package -n python2-dnf-plugin-show-leaves
Summary: Leaves Plugin for DNF
@ -434,7 +462,7 @@ ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/yum-config-manager
ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/yum-debug-dump
ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/yum-debug-restore
ln -sf %{_libexecdir}/dnf-utils %{buildroot}%{_bindir}/yumdownloader
# These commands don't have a dedicated man page, so let's just point them to
# These commands don't have a dedicated man page, so let's just point them
# to the utils page which contains their descriptions.
ln -sf %{_mandir}/man1/%{yum_utils_subpackage_name}.1.gz %{buildroot}%{_mandir}/man1/find-repos-of-install.1.gz
ln -sf %{_mandir}/man1/%{yum_utils_subpackage_name}.1.gz %{buildroot}%{_mandir}/man1/repoquery.1.gz
@ -450,20 +478,20 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
%endif
%files
%{_mandir}/man8/dnf.plugin.builddep.*
%{_mandir}/man8/dnf.plugin.changelog.*
%{_mandir}/man8/dnf.plugin.config_manager.*
%{_mandir}/man8/dnf.plugin.copr.*
%{_mandir}/man8/dnf.plugin.debug.*
%{_mandir}/man8/dnf.plugin.debuginfo-install.*
%{_mandir}/man8/dnf.plugin.download.*
%{_mandir}/man8/dnf.plugin.generate_completion_cache.*
%{_mandir}/man8/dnf.plugin.needs_restarting.*
%{_mandir}/man8/dnf.plugin.repoclosure.*
%{_mandir}/man8/dnf.plugin.repodiff.*
%{_mandir}/man8/dnf.plugin.repograph.*
%{_mandir}/man8/dnf.plugin.repomanage.*
%{_mandir}/man8/dnf.plugin.reposync.*
%{_mandir}/man8/dnf-builddep.*
%{_mandir}/man8/dnf-changelog.*
%{_mandir}/man8/dnf-config-manager.*
%{_mandir}/man8/dnf-copr.*
%{_mandir}/man8/dnf-debug.*
%{_mandir}/man8/dnf-debuginfo-install.*
%{_mandir}/man8/dnf-download.*
%{_mandir}/man8/dnf-generate_completion_cache.*
%{_mandir}/man8/dnf-needs-restarting.*
%{_mandir}/man8/dnf-repoclosure.*
%{_mandir}/man8/dnf-repodiff.*
%{_mandir}/man8/dnf-repograph.*
%{_mandir}/man8/dnf-repomanage.*
%{_mandir}/man8/dnf-reposync.*
%if %{with yumcompatibility}
%{_mandir}/man1/yum-changelog.*
%{_mandir}/man8/yum-copr.*
@ -476,7 +504,7 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
%files -n python2-%{name} -f %{name}.lang
%license COPYING
%doc AUTHORS README.rst
%ghost %{_var}/cache/dnf/packages.db
%ghost %attr(644,-,-) %{_var}/cache/dnf/packages.db
%config(noreplace) %{_sysconfdir}/dnf/plugins/copr.conf
%config(noreplace) %{_sysconfdir}/dnf/plugins/copr.d
%config(noreplace) %{_sysconfdir}/dnf/plugins/debuginfo-install.conf
@ -501,7 +529,7 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
%files -n python3-%{name} -f %{name}.lang
%license COPYING
%doc AUTHORS README.rst
%ghost %{_var}/cache/dnf/packages.db
%ghost %attr(644,-,-) %{_var}/cache/dnf/packages.db
%config(noreplace) %{_sysconfdir}/dnf/plugins/copr.conf
%config(noreplace) %{_sysconfdir}/dnf/plugins/copr.d
%config(noreplace) %{_sysconfdir}/dnf/plugins/debuginfo-install.conf
@ -598,18 +626,18 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
%if %{with python2}
%files -n python2-dnf-plugin-leaves
%{python2_sitelib}/dnf-plugins/leaves.*
%{_mandir}/man8/dnf.plugin.leaves.*
%{_mandir}/man8/dnf-leaves.*
%endif
%if %{with python3}
%files -n python3-dnf-plugin-leaves
%{python3_sitelib}/dnf-plugins/leaves.*
%{python3_sitelib}/dnf-plugins/__pycache__/leaves.*
%{_mandir}/man8/dnf.plugin.leaves.*
%{_mandir}/man8/dnf-leaves.*
%endif
%else
%exclude %{_mandir}/man8/dnf.plugin.leaves.*
%exclude %{_mandir}/man8/dnf-leaves.*
%if %{with python2}
%exclude %{python2_sitelib}/dnf-plugins/leaves.*
%endif
@ -623,7 +651,7 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
%files -n python2-dnf-plugin-local
%config(noreplace) %{_sysconfdir}/dnf/plugins/local.conf
%{python2_sitelib}/dnf-plugins/local.*
%{_mandir}/man8/dnf.plugin.local.*
%{_mandir}/man8/dnf-local.*
%endif
%if %{with python3} && 0%{?rhel} == 0
@ -631,15 +659,32 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
%config(noreplace) %{_sysconfdir}/dnf/plugins/local.conf
%{python3_sitelib}/dnf-plugins/local.*
%{python3_sitelib}/dnf-plugins/__pycache__/local.*
%{_mandir}/man8/dnf.plugin.local.*
%{_mandir}/man8/dnf-local.*
%endif
%if %{with python2}
%files -n python2-dnf-plugin-migrate
%{python2_sitelib}/dnf-plugins/migrate.*
%{_mandir}/man8/dnf.plugin.migrate.*
%{_mandir}/man8/dnf-migrate.*
%else
%exclude %{_mandir}/man8/dnf.plugin.migrate.*
%exclude %{_mandir}/man8/dnf-migrate.*
%endif
%if %{with python2}
%files -n python2-dnf-plugin-post-transaction-actions
%config(noreplace) %{_sysconfdir}/dnf/plugins/post-transaction-actions.conf
%config(noreplace) %{_sysconfdir}/dnf/plugins/post-transaction-actions.d
%{python2_sitelib}/dnf-plugins/post-transaction-actions.*
%{_mandir}/man8/dnf-post-transaction-actions.*
%endif
%if %{with python3}
%files -n python3-dnf-plugin-post-transaction-actions
%config(noreplace) %{_sysconfdir}/dnf/plugins/post-transaction-actions.conf
%config(noreplace) %{_sysconfdir}/dnf/plugins/post-transaction-actions.d
%{python3_sitelib}/dnf-plugins/post-transaction-actions.*
%{python3_sitelib}/dnf-plugins/__pycache__/post-transaction-actions.*
%{_mandir}/man8/dnf-post-transaction-actions.*
%endif
%if 0%{?rhel} == 0
@ -647,18 +692,18 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
%if %{with python2}
%files -n python2-dnf-plugin-show-leaves
%{python2_sitelib}/dnf-plugins/show_leaves.*
%{_mandir}/man8/dnf.plugin.show-leaves.*
%{_mandir}/man8/dnf-show-leaves.*
%endif
%if %{with python3}
%files -n python3-dnf-plugin-show-leaves
%{python3_sitelib}/dnf-plugins/show_leaves.*
%{python3_sitelib}/dnf-plugins/__pycache__/show_leaves.*
%{_mandir}/man8/dnf.plugin.show-leaves.*
%{_mandir}/man8/dnf-show-leaves.*
%endif
%else
%exclude %{_mandir}/man8/dnf.plugin.show-leaves.*
%exclude %{_mandir}/man8/dnf-show-leaves.*
%if %{with python2}
%exclude %{python2_sitelib}/dnf-plugins/show_leaves.*
%endif
@ -673,7 +718,7 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
%config(noreplace) %{_sysconfdir}/dnf/plugins/versionlock.conf
%config(noreplace) %{_sysconfdir}/dnf/plugins/versionlock.list
%{python2_sitelib}/dnf-plugins/versionlock.*
%{_mandir}/man8/dnf.plugin.versionlock.*
%{_mandir}/man8/dnf-versionlock.*
%if %{with yumcompatibility}
%{_mandir}/man8/yum-versionlock.*
%{_mandir}/man5/yum-versionlock.*
@ -689,7 +734,7 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
%config(noreplace) %{_sysconfdir}/dnf/plugins/versionlock.list
%{python3_sitelib}/dnf-plugins/versionlock.*
%{python3_sitelib}/dnf-plugins/__pycache__/versionlock.*
%{_mandir}/man8/dnf.plugin.versionlock.*
%{_mandir}/man8/dnf-versionlock.*
%if %{with yumcompatibility}
%{_mandir}/man8/yum-versionlock.*
%{_mandir}/man5/yum-versionlock.*
@ -700,6 +745,37 @@ PYTHONPATH=./plugins nosetests-%{python3_version} -s tests/
%endif
%changelog
* Fri Jan 31 2020 Marek Blaha <mblaha@redhat.com> - 4.0.12-3
- [translations] Update translations from zanata (RhBug:1754960)
* Mon Jan 13 2020 Ales Matej <amatej@redhat.com> - 4.0.12-2
- [config-manager] Allow use of --set-enabled without arguments (RhBug:1679213)
- [reposync] Fix --delete with multiple repos (RhBug:1774103)
- Redesign reposync --latest for modular system (RhBug:1775434)
* Mon Nov 25 2019 Ales Matej <amatej@redhat.com> - 4.0.12-1
- Update to 4.0.12
- [reposync] Add --urls option (RhBug:1686602)
- [versionlock] Add --raw option (RhBug:1645564)
- [doc] move manpages for plugins to "dnf-PLUGIN" (RhBug:1706386)
- Add new plugin post-transaction-actions (RhBug:967264)
- [builddep] Add --skip-unavailable switch (RhBug:1628634)
- [versionlock] Don't apply excludes on @System (RhBug:1726712)
- [reposync] Ignore only modular excludes (RhBug:1750273)
* Thu Nov 14 2019 Ales Matej <amatej@redhat.com> - 4.0.11-1
- Update to 4.0.11
- [spec] Specify attributes for ghost file (RhBug:1754463)
- download: add the --debugsource option (RhBug:1637008)
- Fix incorrect handling richdeps in buildep (RhBug:1756902)
* Tue Oct 22 2019 Ales Matej <amatej@redhat.com> - 4.0.10-1
- Update to 4.0.10
- debuginfo-install: Update both debuginfo and debugsource for updated package (RhBug:1586084)
- copr: Support multilib repofiles (RhBug:1393664)
- copr: Fix disable if copr instance has non-default port
- copr: Fix repoid when using subdirectories in copr project
* Wed Aug 14 2019 Pavla Kratochvilova <pkratoch@redhat.com> - 4.0.8-3
- Generate yum-utils(1) instead of symlinking (RhBug:1676418)