# DNF Release Notes

## 4.24.0 Release Notes

Enhancements:

- For all transactions on a Bootc system, store whether the transaction was persistent or transient in the history database. This flags is visible in "dnf history info" output.

- Before performing a transient transaction on a Bootc system DNF checks for changed files that could cause problems when discarding transient transactions on the next reboot. The names of the files can be configured using globs in paths configured in a new "usr_drift_protected_paths" option, defaulting to "glob:/etc/dnf/usr-drift-protected-paths.d/*.conf". Be ware that if the "usr_drift_protected_paths" option is set, filelist are always downloaded.

- Don't call scriptout() of TransactionProgress object with non-actionable None argument.

- Improve the included spec file to allow building with Ninja build system.

- Document that modularity support, including "module" command, is deprecated.

- Document scriptout() hook of TransactionProgress class.

Changes:

- Minimal required libdnf version changed to 0.75.0.

- Automatic plugin: Expand email_to variable in command_email emitter to individual arguments. This is required to support s-nail. It is compatible with mailx.

- Remove support for building DNF for RHEL <= 7 from the included spec file. This brings the spec file in line with DNF code which has been unbuildable there for a long time.

Bug fixes:

- Check all installed versions of a package for the newest change log date. This corrects obtaining a change log entry for packages which can be installed in multiple versions (like kernel).

- Fix detecting releasever_minor variable value in dnf-automatic tool.

- Fix building on CentOS 9.

- Fix packaging the dnf-automatic.timer to keep the systemd timer enabled when when upgrading to DNF5.

- Document changes in exit codes of some history subcommands between YUM and DNF.

- Correct a documentation of "--disableexcludes" and "--disableexcludepkgs" options so that its clear that their values are not optional.

- Fix incorrect Bootc documentation link.

- Correct documentation to point to #dnf channel on Libera.Chat IRC network.

- Close file handles during tests.

Internal changes:

- Allow using destdir option for the new manifest plugin.

## 4.23.0 Release Notes

- spec: toggle dnf5_obsoletes_dnf for RHEL 11

- automatic: Enhance errors reporting

- automatic: Fix incorrect Error class instantiation

- doc: --disableexcludepkgs=all doesn't affect just file configuration

- Update ko.po

- Update README.rst started 1

- Tests: Avoid the multiprocessing forkserver method

- cli: Print a plugin suggestion on installed but expired pgp key

- spec: Provide dnf4 by python3-dnf

- copr: Add Copr build files

- Add support for --transient

- bootc: Document --transient and persistence

- bootc: Use ostree GObject API to get deployment status

- bootc: "Re-locking": use ostree admin unlock --transient

- spec: Add dnf-bootc subpackage

- Require libdnf >= 0.74.0 with persistence option

- Derive releasever_{major,minor} in conf, not substitutions

- Override releasever_{major,minor} with provides

- Add --releasever-major and --releasever-minor options

- doc: Document detect_releasevers and update example

- tests: Patch detect_releasevers, not detect_releasever

- Document how --releasever, --releasever_{major,minor} affect each other

- Move releasever_minor setter docstring to the correct function

- Enable automatic PR reviews

- Usage help: don't mark mandatory option parameters as optional

## 4.22.0 Release Notes

- doc: Naming of source and debug repos

- spec: Move /var/cache/dnf from dnf to python3-dnf

- spec: Remove preview yum_compat_level

- spec: Simplify %files dnf section for both yum_compat_levels

- spec: Fix ownership of /etc/yum tree

- Allow --installroot on read-only bootc system

- spec: If DNF5 obsoletes DNF, do not build dnf and yum packages

- spec: If DNF5 obsoletes DNF, do not build dnf-automatic

- Allow --downloadonly on read-only bootc system

- base: Add kernel-core to reboot_needed list

- AUTHORS: Add myself

- Update need_reboot for dnf-automatic

- doc: Example send_error_messages in /etc/dnf/automatic.conf

- automatic: Check availability of config file

- Updated conf_ref to reflect change in fastestmirror behavior

- Fix display issue of a code snippet.

- New features: - Print rpm package unpack errors to the user (RhBug:2312906)

- Bug fixes: - Fix package location if baseurl is present in the metadata

Bugs fixed in 4.22.0:

- Bug 2312906 - Unable to update the filesystem package

## 4.21.1 Release Notes

- doc: minor formatting and consistency fixes

- Allow local downloads to same downloaddir

- Fix "console" width on non real terminals (pipe)

- Update ostree/bootc host system check.

- Update bootc hosts message to point to bootc --help

- tests: Use PGP keys without SHA-1

## 4.21.0 Release Notes

- Add detection for ostree-based systems and warn users about losing changes

- Fix: No traceback when Python interpreter is running with -P

- Allow %py3_shebang_fix macro to add -P argument to shebang lines

- man: Improve upgrade-minimal command docs (RHEL-6417)

- Limit queries to nevra forms when provided by command

- [doc] Remove provide of spec definition for repoquery command

- Update the man page entry for the countme option

- Drop collect file for ABRT

## 4.20.0 Release Notes

- repoquery: Fix loading filelists when -f is used (RhBug:2276012)

- remove: --duplicates and --oldinstallonly exit with 0 when nothing to do (RHEL-6424)

- spec: Do not add user site-packages directory to sys.path (RHEL-26646)

- man: Prepare pages for dnf5 switch

- spec: Prepare for switch of dnf5 in Rawhide

Bugs fixed in 4.20.0:

- Bug 2276012 - "Do not download filelists by default" change broke `dnf repoquery -f`

## 4.19.2 Release Notes

- Bump libdnf requirement to 0.73.1

## 4.19.1 Release Notes

- Add required .readthedocs.yaml, conf.py and set sphinx_rtd_theme

- Drop dnf obsoletion temporarily

- doc: Update FAQ entry on filelists

- build: Adapt to changes in Fedora packaging of bash-completion

- Support RPMTRANS_FLAG_DEPLOOPS

- Add all candidates for reinstall to solver

- Fix handling installonly packages reasons

- Remove confusing sentence from documentation

- Remove "leaf" word from documentation

- Update documentation of history userinstalled command

- Onboard packit tests

- doc: Makecache with timer tries only one mirror

- ELN: Don't obsolete DNF with DNF5 yet

- bash-completion: Complete dnf command only if we own it

- bash-completion: Prepare ownerships for dnf5 switch

## 4.19.0 Release Notes

- Major changes: - filelists metadata not loaded by default - deltarpm disabled by default

- New features: - conf: Introduce new optional_metadata_types option to load filelists on demand - cli: Add a hint for user on transaction file dependency failure - cli: Setup filelists metadata for commands that need them - util: Add function for detecting file in specs

- Bug fixes: - Fix failing API unit test on rawhide (RhBug:2261066) - automatic: Use add_security_filters, not _update_security_filters

Bugs fixed in 4.19.0:

- Bug 2252128 - set "deltarpm=False" in default dnf.conf on Fedora 40+

- Bug 2254789 - DNF: Do not download filelists by default

- Bug 2261066 - dnf: FTBFS in Fedora rawhide/f40

## 4.18.2 Release Notes

- New features: - automatic: Add feature to allow emitters to invoke on dnf error

- Bug fixes: - dnssec: Fix parsing PGP keys for DNS validation (RhBug:2249380)

Bugs fixed in 4.18.2:

- Bug 2249380 - Setting gpgkey_dns_verification=yes triggers a warning: DNSSEC extension: GPG Key fedora-39-primary has been revoked and should be removed immediately

## 4.18.1 Release Notes

- Bug fixes: - Do not translate repoquery time format strings (RhBug:2245773) - automatic: Fix applying the color option

Bugs fixed in 4.18.1:

- Bug 2245773 - dnf 4.18 broke fedora-update-feedback

## 4.18.0 Release Notes

- New features: - Do not print details of verifying (RhBug:1908253) - Add Recommends %{_bindir}/sqlite3 for bash-completion for Fedora - conf: Split $releasever to $releasever_major and $releasever_minor (RhBug:1789346)

- Bug fixes: - base: Add obsoleters of only latest versions (RhBug:2183279,2176263) - comps: Fix marking a group package as installed (RhBug:2066638) - distro-sync: Print better info message when no match (RhBug:2011850) - Include dist-info for python3-dnf (RhBug:2239323) - Revert "Block signals during RPM transaction processing" (RhBug:2133398)

- Others: - Allow DNF to be removed by DNF 5 (RhBug:2221907) - Update translations

Bugs fixed in 4.18.0:

- Bug 2183279 - systemd-udev resolving to systemd-boot-unsigned after split

- Bug 2176263 - Attempting to run "dnf install systemd-udev" no longer installs systemd-udev on F37 container

- Bug 2066638 - "dnf group remove" removes packages that belong to another installed group

- Bug 2011850 - dnf distro-sync says a pkg isn’t installed even when it is

- Bug 2239323 - Missing Provides: python3dist on python3-dnf

- Bug 2133398 - dnf unfinished transaction when upgrading via SSH session

- Bug 1908253 - RFE: do not print details of Verifying

- Bug 1789346 - RFE: Add support for $releasever_major, $releasever_minor, and limited shell expansion for zypp yum repo file compatibility

- Bug 2221907 - dnf5 is not marked as protected, removal leaves system more or less bricked

## 4.17.0 Release Notes

- New features: - crypto: Use libdnf crypto API instead of using GnuPG/GpgME - automatic: allow use of STARTTLS/TLS - automatic: use email_port specified in config

- Bug fixes: - Block signals during RPM transaction processing (RhBug:2133398) - Fix bash completion due to sqlite changes (RhBug:2232052)

- Others: - Reprotect dnf, unprotect python3-dnf (RhBug:2221905)

Bugs fixed in 4.17.0:

- Bug 2221905 - python3-dnf is needlessly marked as protected

- Bug 2133398 - dnf unfinished transaction when upgrading via SSH session

- Bug 2232052 - Bash completion no longer works due to sqlite upstream changes

## 4.16.2 Release Notes

- dnf-data: depend on /etc/dnf/dnf.conf, not libdnf5

- Update repo metadata cache pattern to include zstd

- typo in doc/command_ref.rst

- Add provide exception handling

- When parsing over a KVP list, do not return till the whole list is parsed

- Add to authors

- python3-dnf: Provide /usr/bin/dnf4 symlink to /usr/bin/dnf-3

- Bug fixes: - Document the symbols in the output of dnf history list (RhBug:2172067)

Bugs fixed in 4.16.2:

- Bug 2172067 - Missing a description of symbols in dnf history list output

## 4.16.1 Release Notes

- DNF5 should not deprecate DNF on Fedora 38

## 4.16.0 Release Notes

- Prepare for updating to DNF5: - Remove ownership of dnf.conf, protected.d, vars - Add requirement of libdnf5 to dnf-data - dnf-automatic: require python3-dnf, not dnf

## 4.15.1 Release Notes

- Bug fixes: - automatic: Fix online detection with proxy (RhBug:2022440) - automatic: Return an error when transaction fails (RhBug:2170093) - repoquery: Allow uppercased query tags (RhBug:2185239)

- Others: - Unprotect dnf and yum, protect python3-dnf

Bugs fixed in 4.15.1:

- Bug 2022440 - dnf-automatic ignore proxy setting

- Bug 2170093 - dnf-automatic returns "success" ( zero exit status return ) even if the called dnf command returns error

- Bug 2185239 - dnf 4.15 broke repoquery's "%{INSTALLTIME}" queryformat

## 4.15.0 Release Notes

- New features: - Add reboot option to DNF Automatic (RhBug:2124793) - cli: Allow = in setopt values - Mark strftime format specifiers for translation

- Bug fixes: - Add support for rollback of group upgrade rollback (RhBug:2016070) - Omit src RPMs from check-update (RhBug:2151910) - repoquery: Properly sanitize queryformat strings (RhBug:2140884) - Don't double-encode RPM URLs passed on CLI (RhBug:2103015) - Allow passing CLI options when loading remote cfg (RhBug:2060127) - Ignore processing variable files with unsupported encoding (RhBug:2141215) - Fix AttributeError when IO busy and press ctrl+c (RhBug:2172433) - Unload plugins upon their deletion - Fixes in docs and help command - Fix plugins unit tests - Add unit tests for dnf mark - smtplib: catch OSError, not SMTPException

Bugs fixed in 4.15.0:

- Bug 2124793 - automatic reboot in dnf-automatic in RHEL 9

- Bug 2016070 - dnf rollback of a transaction with a group upgrade in it causes errors when trying to downgrade group

- Bug 2151910 - yum check-update incorrectly reports source packages as updates

- Bug 2140884 - dnf repoquery --qf doesn't properly sanitize values

- Bug 2103015 - yum install URL fails do download RPM due to urlencoding provided URL

- Bug 2141215 - dnf dies with "Config error: 'utf-8' codec can't decode byte" when a vim swp file exists

## 4.14.0 Release Notes

- doc: Describe how gpg keys are stored for repo_ggpcheck (RhBug:2020678)

- Set default value for variable to prevent crash (RhBug:2091636)

- Add only relevant pkgs to upgrade transaction (RhBug:2097757)

- Use installed_all because installed_query is filtered user input

- Don't include resolved advisories for obsoletes filtering with security filters (RhBug:2101421)

- Allow passing plugin parameters with dashes in names (RhBug:1980712)

- Fix upgrade from file to noarch pkg (RhBug:2006018)

- Translations update

- Expose plugin unload method to API (RhBug:2047251)

- Add support for group upgrade rollback (RhBug:2016070)

- Fix broken dependencies error reporting (RhBug:2088422)

- Add doc related to --destdir and --downloadonly options (RhBug:2100811)

- Bug fixes: - Bugs fixed (RhBug:1980712,2016070,2047251,2088422,2100811,2101421) - Fix upgrade pkg from file when installed pkg is noarch and upgrades to a different arch

Bugs fixed in 4.14.0:

- Bug 2088422 - dnf install should report an error when it cannot resolve the dependencies of a package to install, even when strict=False and best=True

- Bug 2020678 - [conn] reposync with installroot fails when repo_gpgcheck is True

- Bug 1980712 - dnf --enableplugin and --disableplugin issues

- Bug 2016070 - dnf rollback of a transaction with a group upgrade in it causes errors when trying to downgrade group

- Bug 2100811 - A yum install command success will delete the content of the previous command downloadonly destdir

- Bug 2047251 - dnf api is missing a method to unload plugins

- Bug 2091636 - python3-dnf wrong indentation level in substitutions.py:64

- Bug 2097757 - yum update --security

- Bug 2101421 - yum check-update --security shows obsoleting packages when no security updates apply

## 4.13.0 Release Notes

- Base.reset: plug (temporary) leak of libsolv's page file descriptors

- Don't use undocumented re.template()

- Small change to better present the option

- New features: - Use sqlite cache to make bash completion snappier (RhBug:1815895)

Bugs fixed in 4.13.0:

- Bug 1815895 - dnf autocomplete too slow

## 4.12.0 Release Notes

- dnf.conf: hint users where to find more info about defaults and other options

- Fix unittests that relied on checksum being at the end of solvfiles

- completion: remove unnecessary echo

- Fix remove when no repos are enabled (RhBug:2064341)

- Add loongarch support for dnf

- Add spaces between words to fix typos (RhBug:2077296)

- [doc] Improve "proxy" configuration option documentation (RhBug:2072332)

- Bug fixes: - Fix download errors handling in non-english locales (RhBug:2024527)

Bugs fixed in 4.12.0:

- Bug 2064341 - dnf group remove will not remove a group if repositories are disabled

- Bug 2077296 - dnf --help is missing spaces for --enablerepo and --disablerepo

- Bug 2072332 - YUM option proxy=_none_ not correctly handled when setup global proxy

- Bug 2024527 - dnf breaks updateprocess with "already downloaded"

## 4.11.1 Release Notes

- Bump version, so that 4.11.0 can be released separately

## 4.11.0 Release Notes

- New features: - Allow destdir option with modulesync command - Add documentation for query api flags (RhBug:2035577)

- Bug fixes: - Fix swap command to work with local rpm files correctly (RhBug:2036434) - Don't recommend %{_bindir}/sqlite3 for bash-completion (RhBug:1947925) - Don't recommend python3-unbound on RHEL (RhBug:1947924) - Recommend rpm-plugin-systemd-inhibit only if systemd (RhBug:1947924) - Fix regression in verifying signatures using rpmkeys - Use rpm.TransactionSet.dbCookie() to determining if rpmdb has changed (RhBug:2043476) - Fix decompression of groups.xml (RhBug:2030255) - Fix history undo on a Reason Change (RhBug:2010259,2053014) - Remove /usr/bin from sys.path to avoid accidentally importing garbage - Fix: Python dnf API does not respect cacheonly (RhBug:1862970) - Fix python3.11 build: remove deprecated, update traceback regex - fix dnf mark error when history sqlite missing - [doc] Improve description of multilib_policy=all (RhBug:1996681,1995630) - [doc] clarify effect of --enablerepo and --disablerepo options (RhBug:2031414) - [doc] default values for module_obsoletes and module_stream_switch (RhBug: 2051846)

Bugs fixed in 4.11.0:

- Bug 2051846 - dnf.conf(5) does not document a default value for module_obsoletes and module_stream_switch

- Bug 1996681 - yum tries to install packages with incompatible architecture when multilib_policy=all

- Bug 1995630 - yum tries to install packages with incompatible architecture when multilib_policy=all

- Bug 2030255 - Intermittent failure of `dnf --cacheonly`

- Bug 2036434 - dnf swap with local rpm produces Error: Cannot add local packages, because transaction job already exists

- Bug 2010259 - [abrt] dnf: _revert_transaction(): history.py:233:_revert_transaction:KeyError: 'Reason Change'

- Bug 1947924 - python3-dnf uses Recommends for python3-unbound and rpm-plugin-systemd-inhibit

- Bug 1947925 - dnf uses Recommends for /usr/bin/sqlite3 if bash-completion and python3-dbus if NetworkManager

- Bug 2053014 - Undoing an undo produces a python backtrace

- Bug 2035577 - sack.query() does not contain full package set

- Bug 1862970 - python3-dnf does not respect cacheonly

- Bug 2031414 - `dnf --disablerepo`/`dnf --enablerepo` documentation is confusing

## 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:

- Bug 1699672 - RFE: dnf should not pull (already broken) weak dependencies on updates

- Bug 1947958 - DNF no longer raises an error when an unknown group is installed

## 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:

- Bug 1993899 - 4.8.0: sphinx warnings

- Bug 1805260 - Old module packages still show as default

- Bug 1938352 - Fix documentation: repository-packages

- Bug 1967925 - [RFE] Provide API to set repo configuration options as string

- Bug 1963704 - `dnf provides` requires a wildcard or else it only matches full paths

- Bug 1938333 - [rfe] Add aliases if and ar

## 4.8.0 Release Notes

- Do not assume that a remote rpm is complete if present

- Use positive percentage for "Failed delta RPMs" message

- Remove redundant new line in Groups output

- Format empty group names outputs to <name-unset>

- [doc] Document default colors

- Use rpmkeys alone to verify signature

- Bug fixes: - Bugs fixed (RhBug:1946975,1955309) - Add dnf.error message to explain rpm.error traceback when package not found after resolving a transaction (RhBug:1815327,1887293,1909845)

Bugs fixed in 4.8.0:

- Bug 1955309 - Improperly formatted text string in dnf package_install

- Bug 1950229 - dnf with Python 3.10: DeprecationWarning: The distutils package is deprecated

- Bug 1887293 - [abrt] dnf: addErase(): transaction.py:103:addErase:_rpm.error: package not installed

- Bug 1946975 - dnf installs old version of dependency even though --best is used

## 4.7.0 Release Notes

- Improve repo config path ordering to fix a comps merging issue (RhBug:1928181)

- Keep reason when package is removed (RhBug:1921063)

- Improve mechanism for application of security filters (RhBug:1918475)

- [doc] Add description for new API

- [API] Add new method for reset of security filters

- [doc] Improve documentation for Hotfix repositories

- [doc] fix: "makecache" command downloads only enabled repositories

- Use libdnf.utils.checksum_{check,value}

- [doc] Add info that maximum parallel downloads is 20

- Increase loglevel in case of invalid config options

- [doc] installonly_limit documentation follows behavior

- Prevent traceback (catch ValueError) if pkg is from cmdline

- Add documentation for config option sslverifystatus (RhBug:1814383)

- Security fixes: - Check for specific key string when verifing signatures (RhBug:1915990) - Use rpmkeys binary to verify package signature (RhBug:1915990)

- Bug fixes: - Bugs fixed (RhBug:1916783) - Preserve file mode during log rotation (RhBug:1910084)

Bugs fixed in 4.7.0:

- Bug 1910084 - hardcoded logfile permissions

- Bug 1921063 - dnf autoremove wants to remove "kernel-modules-extra" if you have a rawhide kernel installed

- Bug 1918475 - dnf --security pulling in packages without security advisory

- Bug 1814383 - librepo does not do TLS certificate revocation checking

- Bug 1928181 - comps from the updates repo don't override comps from the fedora repo

## 4.6.1 Release Notes

- Fix recreate script

- Add unit test for fill_sack_from_repos_in_cache (RhBug:1865803)

- Add docs and examples for fill_sack_from_repos_in_cache (RhBug:1865803)

- [spec] remove python2 support

- Remove problematic language

- The noroot plugin no longer exists, remove mention

- Run tests for fill_sack_from_repos_in_cache in installroot (RhBug:1865803)

- expand history to full term size when output is redirected (RhBug:1852577) (RhBug:1852577,1906970)

- [doc] Fix: "sslcacert" contains path to the file

- [doc] Added proxy ssl configuration options, increase libdnf require

- Set persistdir and substitutions for fill_sack_from_repos_in_cache tests (RhBug:1865803)

- Update documentation for module_obsoletes and module_stream_switch

- print additional information when verifying GPG key using DNS

- Bug fixes: - Bugs fixed (RhBug:1897573) - Remove hardcoded logfile permissions (RhBug:1910084) - Enhanced detection of plugins removed in transaction (RhBug:1929163)

Bugs fixed in 4.6.1:

- Bug 1852577 - "dnf history list" displays an erratic output

- Bug 1910084 - hardcoded logfile permissions

- Bug 1897573 - [spec] Make new cmake macros optional

- Bug 1929163 - problem with transaction() hook

- Bug 1865803 - [RFE] allow dnf to run with solv* files only

- Bug 1906970 - dnf history wrong output if piped through more or redirected to file

## 4.6.0 Release Notes

- Log scriptlets output also for API users (RhBug:1847340)

- Fix module remove --all when no match spec (RhBug:1904490)

- yum.misc.decompress() to handle uncompressed files (RhBug:1895059)

- Make an error message more informative (RhBug:1814831)

- Add deprecation notice to help messages of deplist

- Remove Base._history_undo_operations() as it was replaced with transaction_sr code

- cli/output: Return number of listed packages from listPkgs()

- Clean up history command error handling

- [doc] Describe install with just a name and obsoletes (RhBug:1902279)

- Add api function fill_sack_from_repos_in_cache to allow loading a repo cache with repomd and (solv file or primary xml) only (RhBug:1865803)

- Packages installed/removed via DNF API are logged into dnf.log (RhBug:1855158)

- Support comps groups in history redo (RhBug:1657123,1809565,1809639)

- Support comps groups in history rollback (RhBug:1657123,1809565,1809639)

- Support comps groups in history undo (RhBug:1657123,1809565,1809639)

- New optional parameter for filter_modules enables following modular obsoletes based on a config option module_obsoletes

- Add get_header() method to the Package class (RhBug:1876606)

- Fix documentation of globs not supporting curly brackets (RhBug:1913418)

- New features: - Add api function fill_sack_from_repos_in_cache to allow loading a repo cache with repomd and (solv file or primary xml) only (RhBug:1865803) - Packages installed/removed via DNF API are logged into dnf.log (RhBug:1855158) - Support comps groups in history redo (RhBug:1657123,1809565,1809639) - Support comps groups in history rollback (RhBug:1657123,1809565,1809639) - Support comps groups in history undo (RhBug:1657123,1809565,1809639) - New optional parameter for filter_modules enables following modular obsoletes based on a config option module_obsoletes - Add get_header() method to the Package class (RhBug:1876606)

- Bug fixes: - Fix documentation of globs not supporting curly brackets (RhBug:1913418)

Bugs fixed in 4.6.0:

- Bug 1657123 - Cannot undo a group install or remove

- Bug 1809639 - Can't undo a transaction that installed a package group

- Bug 1913418 - dnf API glob filter does not support brace expansion

- Bug 1865803 - [RFE] allow dnf to run with solv* files only

- Bug 1904490 - Backtrace when performing "yum module remove --all perl:common"

- Bug 1847340 - RPM scriptlet output is not logged to /var/log/dnf.rpm.log when installed via DNF Python api

- Bug 1814831 - dnf error when enabling a module with multiple streams is unclear

- Bug 1895059 - reposync -m --downloadcomps does not download a comps.xml file

- Bug 1855158 - Packages installed / removed via DNF Python api are not logged to /var/log/dnf.log

- Bug 1873146 - package.remote_location() tracebacks for @commandline package

- Bug 1809565 - Can't undo a group operation

- Bug 1876606 - dnf python API does not provide an rpm header of a package (as yum API does)

## 4.5.2 Release Notes

- Change behaviour of Package().from_repo

Bugs fixed in 4.5.2:

## 4.5.1 Release Notes

- Add a get_current() method to SwdbInterface

- Add from_repo attribute for Package class (RhBug:1898968,1879168)

- Correct description of Package().reponane attribute

- Add unittest for new API

- Make rotated log file (mode, owner, group) match previous log settings (RhBug:1894344)

- [doc] Improve description of modular filtering

- [doc] add documentation for from_repo

- [doc] deprecated alias for dnf repoquery --deplist <deplist_option-label>

- New features: - New config option module_allow_stream_switch allows switching enabled streams

Bugs fixed in 4.5.1:

- Bug 1894344 - Permissions in /etc/logrotate.d/dnf do not match the rpm permissions

- Bug 1898548 - "dnf install @perl-App-cpanminus:1.7044/common" fails on installing a source package

- Bug 1879168 - dnf.package.Package.reponame is always "@System"

- Bug 1898968 - Listing an installed package from a specific repository not operational

## 4.4.2 Release Notes

- spec: Fix building with new cmake macros (backport from downstream)

- Warn about key retrieval over http:

- Fix --setopt=cachedir writing outside of installroot

- Add vendor to dnf API (RhBug:1876561)

- Add allow_vendor_change option (RhBug:1788371) (RhBug:1788371)

Bugs fixed in 4.4.2:

- Bug 1876561 - dnf python API does not provide a package vendor (as yum API does)

- Bug 1788371 - [Feature Request] Package vendor stickiness as available in Zypper

## 4.4.0 Release Notes

- Handle empty comps group name (RhBug:1826198)

- Remove dead history info code (RhBug:1845800)

- Improve command emmitter in dnf-automatic

- Enhance --querytags and --qf help output

- [history] add option --reverse to history list (RhBug:1846692)

- Add logfilelevel configuration (RhBug:1802074)

- Don't turn off stdout/stderr logging longer than necessary (RhBug:1843280)

- Mention the date/time that updates were applied

- [dnf-automatic] Wait for internet connection (RhBug:1816308)

- [doc] Enhance repo variables documentation (RhBug:1848161,1848615)

- Add librepo logger for handling messages from librepo (RhBug:1816573)

- [doc] Add package-name-spec to the list of possible specs

- [doc] Do not use <package-nevr-spec>

- [doc] Add section to explain -n, -na and -nevra suffixes

- Add alias 'ls' for list command

- README: Reference Fedora Weblate instead of Zanata

- remove log_lock.pid after reboot(Rhbug:1863006)

- comps: Raise CompsError when removing a non-existent group

- Add methods for working with comps to RPMTransactionItemWrapper

- Implement storing and replaying a transaction

- Log failure to access last makecache time as warning

- [doc] Document Substitutions class

- Dont document removed attribute `reports` for get_best_selector

- Change the debug log timestamps from UTC to local time

Bugs fixed in 4.4.0:

- Bug 1698145 - dnf protects certain packages in container, when it should not

- Bug 1848161 - Custom DNF variables which worked in CentOS 8.1.1911 are broken in 8.2.2004

- Bug 1846692 - dnf should offer a 'history list' in reverse order

- Bug 1857029 - dnf-makecache.timer make my network bandwidth higher than my prediction

- Bug 1853349 - Cannot install package from local repository when there is encoded character in path

- Bug 1848615 - dnf numeric variable substitutions are undocumented

- Bug 1845800 - History info tracebacks when group is upgraded/downgraded

- Bug 1872586 - Environment upgrade fails when one of its groups is removed

- Bug 1839951 - shorter aliases for popular options (eg dnf i == dnf install)

- Bug 1843280 - Discrepancies in permission related problems not/reporting

- Bug 1862739 - dnf-automatic command_email example will not work

- Bug 1816308 - dnf-automatic.timer runs before the computer can connect to the internet

- Bug 1802074 - Excessive and non configurable logging in /var/log/dnf.log

- Bug 1858491 - `dnf list-sec` output is the same as `dnf list-updateinfo`

- Bug 1816573 - [RHEL8/RFE] dnf logrotation experience differs from RHEL7 (yum)

## 4.2.23 Release Notes

- Fix behavior of install-n, autoremove-n, remove-n, repoquery-n

- Fix behavior of localinstall and list-updateinfo aliases

- Add updated field to verbose output of updateinfo list (RhBug: 1801092)

- Add comment option to transaction (RhBug:1773679)

- Add new API for handling gpg signatures (RhBug:1339617)

- Verify GPG signatures when running dnf-automatic (RhBug:1793298)

- Fix up Conflicts: on python-dnf-plugins-extras

- [doc] Move yum-plugin-post-transaction-actions to dnf-plugins-core

- Remove args "--set-enabled", "--set-disabled" from DNF (RhBug:1727882)

- Search command is now alphabetical (RhBug:1811802)

- Fix downloading packages with full URL as their location

- repo: catch libdnf.error.Error in addition to RuntimeError in load() (RhBug:1788182)

- History table to max size when redirect to file (RhBug:1786335,1786316)

Bugs fixed in 4.2.23:

- Bug 1339617 - [RFE] api for handling of gpg signature check and fetching keys

- Bug 1801092 - [RFE] getting a list of all CVE availble for the system with their respective release date .

- Bug 1727882 - yum-config-manager cannot update repos on RHEL8

- Bug 1786316 - dnf history command output is trimmed because of hardcoded 79 cols limit

- Bug 1773679 - add option to include comments when running DNF/YUM transaction

- Bug 1793298 - dnf-automatic upgrade packages that does not have the signing key accepted

- Bug 1788182 - [abrt] DNF raises RuntimeError when passing invalid values to `--repofrompath`

- Bug 1811802 - [RFE] Sort alphabetically yum/dnf results as in RHEL7

- Bug 1813244 - gpgkey_dns_verification=True does not handle

- Bug 1786335 - dnf history command output is trimmed because of hardcoded 79 cols limit

## 4.2.21 Release Notes

- Fix completion helper if solv files not in roon cache (RhBug:1714376)

- Add bash completion for 'dnf module' (RhBug:1565614)

- Check command no longer reports missing %pre and %post deps (RhBug:1543449)

- Check if arguments can be encoded in 'utf-8'

- [doc] Remove incorrect information about includepkgs (RhBug:1813460)

- Fix crash with "dnf -d 6 repolist" (RhBug:1812682)

- Do not print the first empty line for repoinfo

- Redirect logger and repo download progress when --verbose

- Respect repo priority when listing packages (RhBug:1800342)

- [doc] Document that list and info commands respect repo priority

- [repoquery] Do not protect running kernel for --unsafisfied (RhBug:1750745)

- Remove misleading green color from the "broken dependencies" lines (RhBug:1814192)

- [doc] Document color options

Bugs fixed in 4.2.21:

- Bug 1814192 - "Skipping packages with conflicts" should not be green

- Bug 1809600 - Tracebacks in transaction callbacks

- Bug 1565614 - [RFE] BASH autocompletion for 'dnf module'

- Bug 1812682 - "dnf -d 6 repolist" fails with AttributeError: 'NoneType' object has no attribute 'query'

- Bug 1750745 - dnf repoquery --unsatisfied: Problem: The operation would result in removing the following protected packages

- Bug 1813460 - Incorrect information about "includepkgs" in the yum2dnf man page

- Bug 1543449 - 'dnf check --dependencies' incorrectly reports missing requires

- Bug 1800342 - dnf download and list do not respect repo priority

- Bug 1812693 - DNF doesn't use new translations coming from Weblate

## 4.2.19 Release Notes

- match RHEL behavior for CentOS and do not require deltarpm

- List arguments: only first empty value is used (RhBug:1788154)

- Report missing profiles or default as broken module (RhBug:1790967)

- repoquery: fix rich deps matching by using provide expansion from libdnf (RhBug:1534123)

- [documentation] repoquery --what* with multiple arguments (RhBug:1790262)

- Format history table to use actual terminal width (RhBug:1786316)

- Update dnf alias documentation

- Handle custom exceptions from libdnf

- Fix _skipped_packages to return only skipped (RhBug:1774617)

- Add setter for tsi.reason

- Add new hook for commands: Run_resolved

- Add doc entry: include url (RhBug 1786072)

- Clean also .yaml repository metadata

- New API function base.setup_loggers() (RhBug:1788212)

- Use WantedBy=timers.target for all dnf timers (RhBug:1798475)

Bugs fixed in 4.2.19:

- Bug 1798475 - [RHEL8/Bug] dnf-makecache timer not on timers.target

- Bug 1788212 - Packages installed via DNF Python api are not logged to /var/log/dnf.rpm.log or /var/log/dnf.log

- Bug 1677774 - dnf aborts trying to remove some packages

- Bug 1786316 - dnf history command output is trimmed because of hardcoded 79 cols limit

- Bug 1790967 - Misleading Error message when trying to install module without default stream and profile: "missing groups or modules: <module-name>"

- Bug 1774617 - mpv reported as package to be installed and skipped at the same time

- Bug 1534123 - repoquery: --whatrequires is broken with rich deps

- Bug 1790262 - dnf repoquery --whatprovides does not support multi paremeters

- Bug 1788154 - Adding a trailing comma to excludes option causes all items listed for exclusion to be ignored.

## 4.2.18 Release Notes

- [doc] Remove note about user-agent whitelist

- Do a substitution of variables in repo_id (RhBug:1748841)

- Respect order of config files in aliases.d (RhBug:1680489)

- Unify downgrade exit codes with upgrade (RhBug:1759847)

- Improve help for 'dnf module' command (RhBug:1758447)

- Add shell restriction for local packages (RhBug:1773483)

- Fix detection of the latest module (RhBug:1781769)

- Document the retries config option only works for packages (RhBug:1783041)

- Sort packages in transaction output by nevra (RhBug:1773436)

- Honor repo priority with check-update (RhBug:1769466)

- Strip '' from aliases when processing (RhBug:1680482)

- Print the whole alias definition in case of infinite recursion (RhBug:1680488)

- Add support of commandline packages by repoquery (RhBug:1784148)

- Running with tsflags=test doesn't update log files

- Restore functionality of remove --oldinstallonly

- Allow disabling individual aliases config files (RhBug:1680566)

Bugs fixed in 4.2.18:

- Bug 1773483 - The dnf shell will fail to load multiple transactions when using locally downloaded packages.

- Bug 1758447 - dnf module disable <module:stream> disables all streams

- Bug 1748841 - dnf: Bad id for repo when dnf variables are used inside repoid field of repo file

- Bug 1679008 - no auto completion with dnf

- Bug 1680482 - dnf update alias from man page doesn't work

- Bug 1680566 - cannot disable an alias

- Bug 1784148 - dnf deplist is not returning linux-firmware dependency

- Bug 1680488 - dnf alias infinite recursion processing

- Bug 1759847 - command `dnf downgrade pkg` emits Error: No packages marked for downgrade

- Bug 1773436 - dnf update no longer sorts the list of rpms being updated.

- Bug 1783041 - dnf seems to ignore retries and skip_if_unavailable when reading repo cache

- Bug 1680489 - dnf alias does not define order of alias config files

- Bug 1781769 - Dnf does not correctly detect the latest version of the module stream

## 4.2.17 Release Notes

- Enable versionlock for check-update command (RhBug:1750620)

- Add error message when no active modules matched (RhBug:1696204)

- Log mirror failures as warning when repo load fails (RhBug:1713627)

- dnf-automatic: Change all systemd timers to a fixed time of day (RhBug:1754609)

- DNF can use config from the remote location (RhBug:1721091)

- [doc] update reference to plugin documentation (RhBug:1706386)

- [yum compatibility] Report all packages in repoinfo

- [doc] Add definition of active/inactive module stream

- repoquery: Add a switch to disable modular excludes

- Report more informative messages when no match for argument (RhBug:1709563)

- [doc] Add description of excludes in dnf

- Report more descriptive message when removed package is excluded

- Add module repoquery command

- Fix assumptions about ARMv8 and the way the rpm features work (RhBug:1691430)

- Add Requires information into module info commands

- Enhance inheritance of transaction reasons (RhBug:1672618,1769788)

Bugs fixed in 4.2.17:

- Bug 1696204 - dnf should enable parent-required-modules if user specify exact module version to install. Or print missing installed modules.

- Bug 1709563 - yum operations on disabled appstreams should have more targeted error messages

- Bug 1721091 - yum doesn't read config file via http any more

- Bug 1769788 - dnf autoremove tries to remove kernel

- Bug 1706386 - [RFE] Discoverable man page names for DNF plugins

- Bug 1750620 - dnf check-update not honouring versionlock

- Bug 1713627 - dnf exits with "Error: Failed to synchronize cache for repo 'xxx'" without further details

- Bug 1672618 - Upgrading obsoleted package doesn't keep reason

- Bug 1754609 - Modify default dnf-automatic unit timers

- Bug 1691430 - dnf.exceptions.Error: Incorrect or unknown "arch": armv7hcnl

## 4.2.16 Release Notes

- Make DNF compatible with FIPS mode (RhBug:1762032)

- Return always alphabetically sorted modular profiles

- Revert "Fix messages for starting and failing scriptlets"

## 4.2.15 Release Notes

- Fix downloading local packages into destdir (RhBug:1727137)

- Report skipped packages with identical nevra only once (RhBug:1643109)

- Restore functionality of dnf remove --duplicates (RhBug:1674296)

- Improve API documentation

- Document NEVRA parsing in the man page

- Do not wrap output when no terminal (RhBug:1577889)

- Allow to ship alternative dnf.conf (RhBug:1752249)

- Don't check if repo is expired if it doesn't have loaded metadata (RhBug:1745170)

- Remove duplicate entries from "dnf search" output (RhBug:1742926)

- Set default value of repo name attribute to repo id (RhBug:1669711)

- Allow searching in disabled modules using "dnf module provides" (RhBug:1629667)

- Group install takes obsoletes into account (RhBug:1761137)

- Improve handling of vars

- Do not load metadata for repolist commands (RhBug:1697472,1713055,1728894)

- Fix messages for starting and failing scriptlets (RhBug:1724779)

- Don't show older install-only pkgs updates in updateinfo (RhBug:1649383,1728004)

- Add --ids option to the group command (RhBug:1706382)

- Add --with_cve and --with_bz options to the updateinfo command (RhBug:1750528)

Bugs fixed in 4.2.15:

- Bug 1738837 - man dnf.conf mentions best=False as default

- Bug 1674296 - package-cleanup doesn't work as expected

- Bug 1577889 - Description in search output is wrapped when stdout isn't terminal

- Bug 1669711 - kickstart install: additional nfs repos are not accepted

- Bug 1643109 - dnf should not list redundant entries in "Skipping packages with conflicts:" formatted output

- Bug 1649383 - dnf update updateinfo shows up-to-date packages

- Bug 1666236 - dnf(8) does not document module provides subcommand

- Bug 1728894 - dnf repolist should be very fast

- Bug 1727137 - dnf download ignores destdir argument for some packages

- Bug 1689645 - Out of date manual for dnf download

- Bug 1742926 - search yields duplicate entries

- Bug 1761137 - Conflicting request while trying to install xfce-desktop-environment in Fedora 30

- Bug 1706382 - Group subcommand should support listing IDs

- Bug 1761518 - dnf.conf.Conf strict option is not honored

- Bug 1752249 - Revert skip_if_unavailable default back to true

- Bug 1760937 - dnf-yum in F30 is now higher versioned than F31+ yum's "Obsoletes" (affects upgrades)

- Bug 1713055 - dnf repolist should not update metadata or anything else

- Bug 1724779 - Incorrect logging of post-transaction scripts

- Bug 1745170 - dnf ignores repo expiration limit set by metadata-expire in /etc/dnf/dnf.conf, updates repo data unless -C added

- Bug 1750528 - "yum updateinfo list cves" does not list cves

## 4.2.11 Release Notes

- Improve modularity documentation (RhBug:1730162,1730162,1730807,1734081)

- Fix detection whether system is running on battery (used by metadata caching timer) (RhBug:1498680)

- New repoquery queryformat: %{reason}

- Print rpm errors during test transaction (RhBug:1730348)

- Fix: --setopt and repo with dots

- Fix incorrectly marked profile and stream after failed rpm transaction check (RhBug:1719679)

- Show transaction errors inside dnf shell (RhBug:1743644)

- Don't reinstall modified packages with the same NEVRA (RhBug:1644241)

- dnf-automatic now respects versionlock excludes (RhBug:1746562)

Bugs fixed in 4.2.11:

- Bug 1498680 - dnf makecache timer is confused about batteries

- Bug 1730348 - installroot fails with no info when run under fakeroot

- Bug 1719679 - Module is marked as installed even if the rpm transaction check failed

- Bug 1601741 - [ja] "dnf updateinfo info" not formatted well in Japanese

- Bug 1665636 - dnf history userinstalled doesn't account packages which are installed after question if it should be installed

- Bug 1739457 - double logging

- Bug 1715807 - man page dnf.conf weak about proxy settings and other proxy issues

- Bug 1734081 - No way to ignore "is excluded" packages

- Bug 1739773 - Wrong behavior using dnf update for downloaded package

- Bug 1730807 - Behavior of dnf module remove

- Bug 1728252 - dnf should not take buildtime into account when upgrading packages

- Bug 1746562 - dnf-automatic (and dnf list) ignores versionlock

- Bug 1730162 - "dnf module reset" will clear the "install" information

- Bug 1743644 - dnf shell failes to commit transaction?

- Bug 1737201 - man dnf.conf has no mention of 'zchunk=True|False' option

- Bug 1689645 - Out of date manual for dnf download

- Bug 1741381 - DNF wants to remove kernel-core

## 4.2.9 Release Notes

- Prevent printing empty Error Summary (RhBug: 1690414)

- [doc] Add user_agent and countme options

## 4.2.8 Release Notes

- Enhance synchronization of rpm transaction to swdb

- Accept multiple specs in repoquery options (RhBug:1667898)

- Prevent switching modules in all cases (RhBug:1706215)

- [history] Don't store failed transactions as succeeded

- [history] Do not require root for informative commands

- [dnssec] Fix UnicodeWarning when using new rpm (RhBug:1699650)

- Print rpm error messages during transaction (RhBug:1677199)

- Report missing default profile as an error (RhBug:1669527)

- Apply excludes before modular excludes (RhBug:1709453)

- Improve help for command line arguments (RhBug:1659328)

- [doc] Describe a behavior when plugin is removed (RhBug:1700741)

- Add new modular API method ModuleBase.get_modules

- Mark features used by ansible, anaconda and subscription-manager as an API

Bugs fixed in 4.2.8:

- Bug 1630113 - Transaction callbacks use action constants that aren't part of the callback API

- Bug 1653736 - Options deplist, repoquery do not return expected packages

- Bug 1669527 - dnf module install <module> - just enable it, without installing it.

- Bug 1661814 - DNF return a VectorString instead of a Python List

- Bug 1667898 - repoquery --whatrequires only accepts one pkgspec

- Bug 1673075 - The base.sack.query().available() example does not seem to work out of box

- Bug 1677199 - Fail to obtian the transaction lock after change of SELinux policy type

- Bug 1699650 - warnings from dnssec

- Bug 1700741 - When dnf plugin is upgraded via Obsolete, it is not run in the transaction phase

- Bug 1706215 - using the @ module syntax for yum4 avoids the stream switching error protection

- Bug 1709453 - Re-emergence of a old (unreported?) bug: Modular dependency problems

## 4.2.7 Release Notes

- Set default to skip_if_unavailable=false (RhBug:1679509)

- Fix package reinstalls during yum module remove (RhBug:1700529)

- Fail when "-c" option is given nonexistent file (RhBug:1512457)

- Reuse empty lock file instead of stopping dnf (RhBug:1581824)

- Propagate comps 'default' value correctly (RhBug:1674562)

- Better search of provides in /(s)bin/ (RhBug:1657993)

- Add detection for armv7hcnl (RhBug:1691430)

- Fix group install/upgrade when group is not available (RhBug:1707624)

- Report not matching plugins when using --enableplugin/--disableplugin (RhBug:1673289) (RhBug:1467304)

- Add support of modular FailSafe (RhBug:1623128)

- Replace logrotate with build-in log rotation for dnf.log and dnf.rpm.log (RhBug:1702690)

Bugs fixed in 4.2.7:

- Bug 1702690 - implement built-in log rotation

- Bug 1672649 - Add dnf.package.Package API for getting pkgid of package from repo in DNF plugin

- Bug 1467304 - RFE: --disableplugin should print error/warning on non-existing plugin

- Bug 1673289 - dnf enableplugin/disableplugin does not report unknown plugin

- Bug 1674562 - dnf not parsing default state of comps group correctly

- Bug 1581824 - Malformed lock file found: /var/cache/dnf/metadata_lock.pid.

- Bug 1709783 - [api] dnf.callback.Payload.download_size incorrectly documented

- Bug 1512457 - when you feed "-c" option with nonexistent file, dnf still returns 0

- Bug 1673913 - option tsflags missing in dnf.conf

## 4.2.6 Release Notes

- librepo: Turn on debug logging only if debuglevel is greater than 2 (RhBug:1355764,1580022)

- Fix issues with terminal hangs when attempting bash completion (RhBug:1702854)

- Rename man page from dnf.automatic to dnf-automatic to match command name

- [provides] Enhanced detecting of file provides (RhBug:1702621)

- [provides] Sort the output packages alphabetically

Bugs fixed in 4.2.6:

- Bug 1355764 - Excessive DNF logging (all messages - including debug - from dnf, libdnf, librepo and rpm interface logged to file by default, not configurable)

- Bug 1580022 - /var/log/dnf.librepo.log way too verbose and big

- Bug 1702621 - 'dnf provides' wildcard search doesn't show the actual matched file

- Bug 1702854 - Tab completion attempts with dnf cause terminal to hang.

## 4.2.5 Release Notes

- Fix multilib obsoletes (RhBug:1672947)

- Do not remove group package if other packages depend on it

- Remove duplicates from "dnf list" and "dnf info" outputs

- Installroot now requires absolute path

- Fix the installation of completion_helper.py

- Allow globs in setopt in repoid part

- Fix formatting of message about free space required

- [doc] Add info of relation update_cache with fill_sack (RhBug:1658694)

- Fix installation failure when duplicate RPMs are specified (RhBug:1687286)

- Add command abbreviations (RhBug:1634232)

- Allow plugins to terminate dnf (RhBug:1701807)

Bugs fixed in 4.2.5:

- Bug 1701807 - dnf ignores exception error raised by plugin etckeeper-dnf

- Bug 1634232 - dnf lost aliases for command arguments

- Bug 1687286 - Specifying same RPM filename in commandline breaks installation

- Bug 1658694 - DNF Python API update_cache() breaks transaction check

- Bug 1672947 - dnf prints tracebacks RuntimeError: TransactionItem not found for key

## 4.2.2 Release Notes

- [conf] Use environment variables prefixed with `DNF_VAR_`

- Enhance documentation of --whatdepends option (RhBug:1687070)

- Allow adjustment of repo from --repofrompath (RhBug:1689591)

- Document cachedir option (RhBug:1691365)

- Retain order of headers in search results (RhBug:1613860)

- Solve traceback with the "dnf install @module" (RhBug:1688823)

- Build "yum" instead of "dnf-yum" on Fedora 31

Bugs fixed in 4.2.2:

- Bug 1689591 - RFE: Add support for passing a gpgkey file path to --repofrompath

- Bug 1687070 - [REF] Provide single command, which tells what depends on specific package.

## 4.2.1 Release Notes

- Do not allow direct module switch (RhBug:1669491)

- Use improved config parser that preserves order of data

- Fix `alias list` command (RhBug:1666325)

- Postpone yum conflict to F31

- Update documentation: implemented plugins; options; deprecated commands (RhBug:1670835,1673278)

- Support zchunk (".zck") compression

- Fix behavior of `--bz` option when specifying more values

- Follow RPM security policy for package verification

- Update modules regardless of installed profiles

- Add protection of yum package (RhBug:1639363)

- Fix `list --showduplicates` (RhBug:1655605)

Bugs fixed in 4.2.1:

- Bug 1655605 - yum list available --showduplicates will list not only available packages but packages installed on the system.

- Bug 1669247 - dnf does not refresh expired repository metadata

- Bug 1670835 - [manpage] yum2dnf incorrect and missing info

- Bug 1673278 - [manpage] inconsistent cmdline options docs: dnf --help/man page

- Bug 1677640 - The module enable/disable works unexpectedly with slow/fast train virt module

- Bug 1597182 - rpmtrans says to use non-existent dnf.callback.PKG_ERASE

- Bug 1666325 - yum alias list does not work properly

- Bug 1678689 - dnf module --help refers to module_spec while man page uses module-spec

- Bug 1669491 - stream switching should be prevented with installed profiles

## 4.1.0 Release Notes

- Allow to enable modules that break default modules (RhBug:1648839)

- Enhance documentation - API examples

- Add best as default behavior (RhBug:1670776,1671683)

- Add --nobest option

Bugs fixed in 4.1.0:

- Bug 1585509 - Translation of "Size" in different contexts ought to be different.

- Bug 1672432 - Group and module operations in transaction table not marked for translation

- Bug 1509393 - Translation missing, when more than one process run

- Bug 1667423 - The doc/examples/install_plugin.py leads to traceback

- Bug 1656726 - Show excluded packages

- Bug 1671683 - dnf / libdnf should default to --best behavior

- Bug 1667426 - The doc/examples/list_obsoletes_plugin.py produces traceback

## 4.0.10 Release Notes

- Updated difference YUM vs. DNF for yum-updateonboot

- Added new command `dnf alias [options] [list|add|delete] [<name>...]` to allow the user to define and manage a list of aliases

- Enhanced documentation

- Unifying return codes for remove operations

- [transaction] Make transaction content available for commands

- Triggering transaction hooks if no transaction (RhBug:1650157)

- Add hotfix packages to install pool (RhBug:1654738)

- Report group operation in transaction table

- [sack] Change algorithm to calculate rpmdb_version

Bugs fixed in 4.0.10:

- Bug 1654738 - hotfix repository content is not used when installing a module stream

- Bug 1495482 - system-upgrade fails when snapper plugin installed

## 4.0.9 Release Notes

- Added `dnf.repo.Repo.get_http_headers()`

- Added `dnf.repo.Repo.set_http_headers()`

- Added `dnf.repo.Repo.add_metadata_type_to_download()`

- Added `dnf.repo.Repo.get_metadata_path()`

- Added `dnf.repo.Repo.get_metadata_content()`

- Added --changelogs option for check-update command

- [module] Add information about active modules

- Hide messages created only for logging

- Enhanced --setopt option

- [module] Fix dnf remove @<module>

- [transaction] Make transaction content available for plugins

Bugs fixed in 4.0.9:

- Bug 1541832 - Inconsistent return values

- Bug 1642796 - PackageKit terminated before end of offline update: TransactionItem state is not set (when any multiarch package is installed)

- Bug 1637148 - dnf doesn't resolve variables in mirrorlists

- Bug 1639998 - dnf 4 output changes

- Bug 1615164 - [abrt] python3-dnf: configure(): __init__.py:841:configure:dnf.cli.CliError: None

- Bug 1636480 - dnf-automatic timer files: Incorrect dependency WantedBy=basic.target causing ordering cycle for systemd

## 4.0.4 Release Notes

- Add dnssec extension

- Set termforce to AUTO to automatically detect if stdout is terminal

- Repoquery command accepts --changelogs option (RhBug:1483458)

- Calculate sack version from all installed packages (RhBug:1624291)

- [module] Allow to enable module dependencies (RhBug:1622566)

Bugs fixed in 4.0.4:

- Bug 1508649 - quiet option, should quiet errors ?

- Bug 1590690 - dnf -q is not quiet

- Bug 1624291 - [sack] rpmdb version is incorrect when using excludes

- Bug 1631217 - unable to install stratis

- Bug 1489308 - [abrt] dnf: _progress_cb(): __init__.py:1366:log:SystemError: <built-in function isinstance> returned a result with an error set

- Bug 1625879 - advisory option not working with dnf install

- Bug 1483458 - RFE: add --changelog into dnf repoquery

- Bug 1497171 - [yum-compatibility] Prevent user from removing running kernel.

- Bug 1620242 - dnf repoquery --unsatisfied gives python traceback

## 3.6.1 Release Notes

- [module] Improved module commands list, info

- [module] Reports error from module solver

Bugs fixed in 3.6.1:

- Bug 1626011 - Don't print progress bar to stdout, and when there's no tty (dnf repoquery)

- Bug 1631458 - [abrt] dnf: build_format_fn(): repoquery.py:285:build_format_fn:KeyError: 'name'

- Bug 1305340 - DNF message "Upgrading" at Zanata translation defect. is this Present Progressive ? or , is Gerund? Grammar problem.

- Bug 1305340 - DNF message "Upgrading" at Zanata translation defect. is this Present Progressive ? or , is Gerund? Grammar problem.

- Bug 1623866 - dnf module provides not having consistent output

- Bug 1600444 - Wrong conflicts between dnf and yum prevents upgrade

- Bug 1628056 - dnf has problem when setting option fastestmirror

## 3.5.1 Release Notes

- [module] Fixed list and info subcommands

## 3.5.0 Release Notes

- New implementation of modularity

## 3.0.2 Release Notes

- Add limited compatibility with dnf-2.0 (constants)

## 3.0.1 Release Notes

- Support of MODULES - new DNF command module

- `dnf.conf.Conf.proxy_auth_method`

- New repoquery option --depends and --whatdepends

- Enhanced support of variables

- Enhanced documentation

Bugs fixed in 3.0.1:

- Bug 1565599 - IndexError: list index out of range when removing a module with a wrong stream specified

- Bug 1508839 - [modularity] list doesn't show enabled modules, but installed and locked only

- Bug 1506486 - [modularity] rpm install doesn't follow package versions from a locked module

- Bug 1506475 - [modularity] inconsistent ordering in module listing

- Bug 1505577 - [modularity] I can disable the locked module

- Bug 1505574 - [modularity] can't install additional profiles when module is locked

- Bug 1505573 - [modularity] module is not locked on the version installed but the latest

- Bug 1480481 - [modularity] can't remove a module

- Bug 1496732 - [modularity] Error: No such module on update locked module

- Bug 1497272 - [modularity] UX: Replace the "Group '...' does not exist." message

- Bug 1488100 - [modularity] do not show module version in dnf module list if showing only latest

- Bug 1488086 - [modularity] inform user that they are installing module

- Bug 1488112 - [modularity] introduce module provides

- Bug 1488105 - [modularity] introduce dnf module streams for showing enabled streams

- Bug 1488089 - [modularity] switching stream should erase info about installed profiles

- Bug 1488092 - [modularity] no info in dnf list about locked modules

- Bug 1486839 - [modularity] show content of profile

- Bug 1486839 - [modularity] show content of profile

- Bug 1486827 - [modularity] include profiles info in module list command

- Bug 1486816 - [modularity] show defaults in module list/info command

- Bug 1565647 - No match for a package that exists in the repo

- Bug 1583834 - dnf and deltarpm

- Bug 1576921 - RFE: dnf does not "remember" --forcearch=

- Bug 1270295 - dnf bash-completion is a bit flaky

- Bug 1361698 - dnf history bash completion

- Bug 1369847 - [completion] reinstall shows all packages from repo

- Bug 1368651 - Autocomplete not working after first option

- Bug 1563841 - --nogpgcheck should override localpkg_gpgcheck=True

- Bug 1387622 - add proxy auth method option

- Bug 1575998 - CentOS: dnf can't handle password-protected repos

- Bug 1577854 - DNF search should use logical conjunction of terms

- Bug 1387622 - add proxy auth method option

- Bug 1542416 - 'dnf updateinfo --info' provides incorrect output

- Bug 1542416 - 'dnf updateinfo --info' provides incorrect output

- Bug 1496153 - Extend DNF compatibility with YUM

- Bug 1568366 - detect_releasever is broken under python3

- Bug 1539803 - dnf repoquery --requires --resolve is very slow

- Bug 1552576 - repolist and info use expired cache

- Bug 1545075 - updateinfo tracebacks when an advisory consists of multiple repos

- Bug 1544359 - dnf fails with traceback for repos containing strange characters

- Bug 1547672 - wrong repoquery results

- Bug 1537957 - [abrt] dnf: _add_from_xml_filename(): comps.py:328:_add_from_xml_filename:_libpycomps.ParserError: Fatal parser error

- Bug 1542920 - dnf download fails for certain repos

- Bug 1507129 - DNF crashes on repositories without filelists

- Bug 1512956 - Incomplete listing for `dnf list installed`

- Bug 1512663 - dnf impossible to install docs if tsflags=nodocs is in dnf.conf, can't override settings from commandline

- Bug 1247083 - dnf timers require network access and thus should require systemd network target

- Bug 1247083 - dnf timers require network access and thus should require systemd network target

- Bug 1247083 - dnf timers require network access and thus should require systemd network target

- Bug 1519325 - dnf fails to install a package by a "provides" name

- Bug 1492036 - system-upgrade fails to connect to online mirrors during upgrade when caches are missing

- Bug 1391911 - [RFE] repoquery: get list of all dependent packages (with even soft dependencies)

- Bug 1391911 - [RFE] repoquery: get list of all dependent packages (with even soft dependencies)

- Bug 1479330 - DNF 2.0: bash-completion not working by default, until sqlite is installed

- Bug 1505185 - dnf incudepkgs broken

- Bug 1305232 - log currently processing package from rpm installation

## 2.7.5 Release Notes

- Improved performance for excludes and includes handling

- Fixed problem of handling checksums for local repositories

- Fix traceback when using dnf.Base.close()

Bugs fixed in 2.7.5:

- Bug 1502106 - dnf packages update breaks package removal via ansible

- Bug 1500361 - DNF in Fedora 26 is terrible slow

- Bug 1503575 - DNF breaks composes: AttributeError: 'NoneType' object has no attribute 'install_set'

## 2.7.4 Release Notes

- Enhanced performance for excludes and includes handling

- Solved memory leaks at time of closing of dnf.Base()

Bugs fixed in 2.7.4:

- Bug 1480979 - I thought it abnormal that dnf crashed.

- Bug 1461423 - Memory leak in python-dnf

- Bug 1499564 - dnf list installed crashes

- Bug 1499534 - dnf-2 is much slower than dnf-1 when handling groups

- Bug 1499623 - Mishandling stderr vs stdout (dnf search, dnf repoquery)

## 2.7.3 Release Notes

Bugs fixed in 2.7.3:

- Bug 1472847 - dnf install dosn't handle 'Location:' http header

- Bug 1498426 - dnf download does not download RPMs in fedora rawhide container image

- Bug 1427144 - libselinux-python not installed when @ansible-node in kickstart %packages

## 2.7.2 Release Notes

API additions in 2.7.2:

- Added new option `--comment=<comment>` that adds a comment to transaction in history

- `dnf.Base.pre_configure_plugin()` configure plugins by running their pre_configure() method

- Added pre_configure() method for plugins and commands to configure dnf before repos are loaded

Bugs fixed in 2.7.2:

- Bug 1421478 - dnf repository-packages: error: unrecognized arguments: -x rust-rpm-macros

- Bug 1491560 - 'dnf check' reports spurious "has missing requires of" errors

- Bug 1465292 - DNF remove protected duplicate package

- Bug 1279001 - [RFE] Missing dnf --downloaddir option

- Bug 1212341 - [RFE] Allow plugins to override the core configuration

- Bug 1299482 - mock --init fails with message "Failed calculating RPMDB checksum"

- Bug 1192811 - dnf whatprovides should show which provides matched a pattern

- Bug 1288845 - "dnf provides" wildcard matching is unreliable (not all packages with matches listed)

- Bug 1237349 - dnf autoremove not removing what dnf list extras shows

- Bug 1470050 - the 'priority=' option in /etc/yum.repos.d/*.repo is not respected

- Bug 1347927 - dnf --cacheonly downloads packages

- Bug 1478115 - [abrt] dnf: _hcmd_undo(): __init__.py:888:_hcmd_undo:IndexError: list index out of range

- Bug 1461171 - RFE: support --advisory= with install

- Bug 1495116 - Dnf version fails with traceback in container

- Bug 1448874 - "dnf needs-restarting" vanished from bash completion

## 2.6.3 Release Notes

API additions in 2.6.3:

- Added auto substitution for all variables used for repo creation by `dnf.repodict.RepoDict.add_new_repo()`

- Added description of `--downloaddir=<path>` dnf option

Bugs fixed in 2.6.3:

- Bug 1476215 - repoquery --location sometimes prints invalid URL

- Bug 1473964 - dnf -C (or dnf --cacheonly) does not work as documented for a regular user

- Bug 1359482 - Trying to remove 'KDE Plasma Workspaces' group using dnf tries to remove systemd and dnf

- Bug 1476834 - [abrt] dnf: arch(): config.py:908:arch:TypeError: unhashable type: 'list'

- Bug 1244755 - [UX] additional dependencies to be installed or removed are not listed separately

- Bug 1476748 - Boltron: yum-dnf wrapper breaks installation of modules

- Bug 1476464 - dnf download broken if repository is file:/// (ie. local)

- Bug 1464192 - rpm.RPMTRANS_FLAG_TEST prevents to save newly imported gpg key

- Bug 1463107 - Undoing a remove transaction marks packages as user installed

- Bug 1426196 - RFE: Change "upgraded X packages" to "download X packages" when dnf download is used

- Bug 1457507 - [api] Explicitly set metalink is not substituted

## 2.6.2 Release Notes

API additions in 2.6.2:

- `dnf.conf.Conf.basearch`

- `dnf.conf.Conf.arch`

- `dnf.conf.Conf.ignorearch`

- Introduced new configuration option `autocheck_running_kernel`

- `dnf.subject.Subject.get_best_selector()` can use three additional key words: `obsoletes`, `reports`, and `reponame`.

From commandline it is possible to use new option `--noautoremove` to disable removal of dependencies that are no longer used.

Bugs fixed in 2.6.2:

- Bug 1279001 - [RFE] Missing dnf --downloaddir option

- Bug 1397848 - UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf3 in position 1: invalid continuation byte

- Bug 1361424 - [RFE] add cli option for clean_requirements_on_remove=no

- Bug 1387925 - RFE: Display all unsigned package errors instead of only one

- Bug 1332099 - Installing packages produces a backtrace, installation goes ok

- Bug 1470116 - /etc/dnf/automatic.conf configuration for command_email is ignored

- Bug 1161950 - [visual] output and progress bar not visible during package downloads specified by remote url

- Bug 1320254 - [RFE] Support short abbrevations of commands like install in DNF

- Bug 1424723 - doc: Hard to find documentation for weak dependencies

- Bug 1462486 - RFE: Add support for groupmember on repoquery

- Bug 1314405 - No checksum check

- Bug 1457368 - dnf repoquery --obsoletes does not work

- Bug 1339280 - [rfe] Case insensitive match hint

- Bug 1138978 - [rfe] maybe you meant?

- Bug 1423472 - dnf list updates should only print newest version

- Bug 1427365 - DNF (and thus anaconda, livemedia-creator...) skips packages that are missing or cannot be installed due to conflicts or dependency issues with no warning, error or information

- Bug 1398871 - dnf group remove removes packages from other groups, and explicitly installed packages

- Bug 1432312 - removing MATE Desktop would remove dnf and systemd

## 2.5.1 Release Notes

API additions in 2.5.1:

- `dnf.Plugin.pre_transaction()` is a hook that is called just before transaction execution.

- `dnf.subject.Subject.get_nevra_possibilities()` returns generator for every possible nevra.

Bugs fixed in 2.5.1:

- Bug 1456419 - dnf update --refresh fails for repo_gpgcheck=1

- Bug 1445021 - Unlocalized date format

- Bug 1400714 - implement alwaysprompt=no option

- Bug 1250702 - dnf.Base.group_install does not honor multilib_policy=all

- Bug 1381988 - [RFE] output excluded packages during update

- Bug 1397848 - UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf3 in position 1: invalid continuation byte

- Bug 1321407 - ValueError: (2, 'LRO_MAXSPEED (400) is lower than LRO_LOWSPEEDLIMIT (1000)', 'Bad argument of a handle option')

- Bug 1291867 - [conn] show progress when repo has metalink

- Bug 1372895 - don't access network/load latest repo metadata when doing "list installed"

- Bug 1444751 - dnf repoquery allow --qf use with --tree

## 2.5.0 Release Notes

API additions in 2.5.0:

`dnf.callback.DownloadProgress.start()` can use one additional key word `total_drpms`.

Bugs fixed in 2.5.0:

- Bug 1350546 - print more useful info when package can not be installed

- Bug 1449618 - dnf won't explain conflicts even with --best

- Bug 1270451 - Don't show packages from lower priority repos which are masked/blocked by higher prority repo packages

- Bug 1254966 - [UX] dnf install tries to update the installed dependencies to newer version (at least message says that)

- Bug 1426787 - "add '--best' to command line to see why package dependency cannot be satisfied" doesn't help

- Bug 1293983 - [UX] show skipped packages during upgrade with pkg param

- Bug 1370062 - history userinstalled should not show NEVRA

- Bug 1293067 - RFE: dnf suggests --allowerasing even when it cannot help

- Bug 1393814 - dnf reports a lot of conflicting packages where there are no conflicts

- Bug 1398040 - dnf calls weak dependencies "Skipping packages with broken dependencies"

- Bug 1342157 - Search that does not match anything has odd "error" message

- Bug 1379906 - Traceback when dependency of plugin is removed and plugin calls the dependency

- Bug 1198975 - [UX] show progress for DRPM

## 2.4.1 Release Notes

DNF command additions in 2.4.1:

- `dnf [options] repoquery --userinstalled` limit the resulting set only to packages installed by user.

Bugs fixed in 2.4.1:

- Bug 1446756 - Msgid bug, the flag "supplements" is misspelled in a help text

- Bug 1446432 - Minimal install option install full gnome desktop

- Bug 1446641 - dnf repoquery --duplicates --latest-limit -1 -q does not work

- Bug 1278124 - RFE: Add new option to repoquery - user-installed

- Bug 1301868 - dnf search with multiple matches shows repeated grouping

## 2.4.0 Release Notes

API additions in 2.4.0:

- `dnf.subject.Subject.get_best_query()` can use two additional key words: `with_nevra`, and `with_filenames`.

- Added description of `dnf.repo.Repo.cost`

- Added description of `dnf.repo.Repo.excludepkgs`

- Added description of `dnf.repo.Repo.includepkgs`

DNF command additions in 2.4.0:

- `--enableplugin=<plugin names>` command line argument enable the listed plugins specified by names or globs.

- `--releasever=<release>` command line argument now autodetect releasever in installroot from host if `/` value is used as `<release>`.

Bugs fixed in 2.4.0:

- Bug 1302935 - Untranslatable element in the header

- Bug 1248684 - RFE: add exclude and cost properties to dnf.repo.Repo API

- Bug 1441636 - --installroot against non-existent rpm database no longer works

- Bug 1438438 - AssertionError from DNF

- Bug 1256313 - DNF should download packages specified by URL into the cache directory

- Bug 1161950 - [visual] output and progress bar not visible during package downloads specified by remote url

- Bug 1421244 - DNF keeps packages with broken scriptlets installed, although it claims they were removed.

## 2.3.0 Release Notes

API additions in 2.3.0:

- `dnf.package.Package.remote_location()` returns location from where the package can be downloaded from.

DNF command additions in 2.3.0:

- `dnf [options] repoquery --whatconflicts <capability>` limit the resulting set only to packages that conflict `<capability>`.

- `dnf [options] repoquery --whatobsoletes <capability>` limit the resulting set only to packages that obsolete `<capability>`.

- `dnf [options] repoquery --location` show a location where the package could be downloaded from.

- `dnf [options] repoquery --nvr` show found packages in format name-version-release.

- `dnf [options] repoquery --nevra` show found packages in format name-epoch:version-release.architecture (default).

- `dnf [options] repoquery --envra` show found packages in format epoch:name-version-release.architecture.

- `dnf [options] repoquery --recursive` query packages recursively. Can be used with `--whatrequires <REQ>` (optionally with --alldeps, but it has no effect with --exactdeps), or with `--requires <REQ> --resolve`.

Bugs fixed in 2.3.0:

- Bug 1290137 - RFE: dnf repoquery list not all available tags and there no full support of repoquery --location

- Bug 1349314 - Dnf autoremove removes kernel-modules-extra but dnf update reinstalls those kernel modules again.

- Bug 1247122 - implement --randomwait option

- Bug 1298717 - Translation missing, when package already downloaded.

## 2.2.0 Release Notes

API additions in 2.2.0:

- `dnf.callback.TransactionProgress.progress()` has new actions: TRANS_PREPARATION, TRANS_POST, and PKG_SCRIPTLET.

Bugs fixed in 2.2.0:

- Bug 1411432 - doc: Expected order of actions not documented for dnf.callback.TransactionProgress

- Bug 1406130 - Upgrade does not show progress between Cleanup and Verify

- Bug 1411423 - RFE: Add package scriptlet action to dnf.callback.TransactionProgress

- Bug 1369212 - dnf repolist with no repos

## 2.1.1 Release Notes

Bugs fixed in 2.1.1:

- Bug 1417542 - Dnf won't synchronize cache

- Bug 1401446 - dnf does not report cleaning packages

- Bug 1416699 - Error: Will not install a source rpm package

- Bug 1427132 - create an API for initializing repos

- Bug 1397047 - [abrt] dnf: _scriptError(): rpmtrans.py:550:_scriptError:AttributeError: 'NoneType' object has no attribute 'name'

- Bug 1379628 - [RFE] Add "--nodocs" option for install

- Bug 1424939 - L10N - explain "Login User"

- Bug 1396992 - dnf repoquery/whatrequires doesn't work correctly

- Bug 1412970 - [RFE] repoquery: Allow querying all packages

## 2.1.0 Release Notes

API additions in 2.1.0:

- `dnf.Base.update_cache()` downloads and caches in binary format metadata for all known repos.

Bugs fixed in 2.1.0:

- Bug 1421835 - dnf list command broken

- Bug 1415711 - DNF should not automatically download repodata over metered connections

- Bug 1417627 - RFE: show hint how to display why package was skipped

## 2.0.1 Release Notes

API changes in 2.0.1:

- `dnf.Base.package_downgrade()` now accept keyword strict to ignore problems with dep-solving

API additions in 2.0.1:

- `dnf.Base.autoremove()` removes all 'leaf' packages from the system that were originally installed as dependencies

- `dnf.cli.Cli.redirect_logger()` changes minimal logger level for terminal output to stdout and stderr

DNF command additions in 2.0.1:

- `dnf [options] shell [filename]` opens an interactive shell for conducting multiple commands during a single execution of DNF

- `dnf [options] swap <remove-spec> <install-spec>` removes spec and install spec in one transaction

Bugs fixed in 2.0.1:

- Bug 1409361 - [abrt] dnf: output.py:1508:historyInfoCmd:AttributeError: 'list' object has no attribute 'add'

- Bug 1414512 - [rfe] Add dnf api for autoremove

- Bug 1238808 - [UX] Negative percentage reported when delta rebuilds fail

- Bug 1386085 - L10N - Uncut sentence DepSolveProgressCallBack > pkg_added

- Bug 1286553 - [UX] Should say "Freed space" rather than "Installed size" when removing packages

- Bug 1337731 - Live image compose fails with dnf 1.1.9

- Bug 1336879 - dnf fails to respect conditional level in comps.xml

- Bug 1173349 - wildcard doesn't work properly when downgrade

- Bug 1329617 - Downgrade fails with broken dep with --setopt=strict=False

- Bug 1283255 - downgrade doesn't resolve dependencies automatically

- Bug 1369411 - information about metadata expiration should go into stderr

- Bug 1243393 - Query.filter(pkgs=XXX) is not documented

- Bug 1243393 - Query.filter(pkgs=XXX) is not documented

- Bug 1411349 - dnf makes wrong assumptions about metalinks

- Bug 1345976 - [UX] When no repo and --disablerepo=* - incorrect error message

- Bug 1369212 - dnf repolist with no repos

- Bug 1349247 - [doc] Document dnf grouplist hidden

- Bug 1403930 - dnf repoquery -f with multiple files doesn't seem to work

- Bug 1403465 - [RFE] Transaction modifiers for "dnf install" and "dnf remove"

- Bug 1110780 - dnf swap not supported

- Bug 1405333 - [RFE] add history to prompt line in dnf shell

- Bug 1254879 - dnf repoquery -l should display '(contains no files)' if there are no files

## 2.0.0 Release Notes

List of all incompatible changes can be found at: dnf-1 vs dnf-2

API changes in 2.0.0:

- `dnf.Base.add_remote_rpms()` now suppresses any error if `strict` equals to `False`.

- `dnf.Base.read_comps()` now limits results to system basearch if `arch_filter` equals to `True`.

- `dnf.cli.Cli.configure()` now doesn't take any additional arguments.

- `dnf.cli.Cli.run()` now doesn't take any additional arguments.

- `dnf.Plugin.read_config()` now doesn't take any name of config file.

- `dnf.Repo.__init__()` now takes parent_conf argument which is an instance of `dnf.conf.Conf` holding main dnf configuration instead of cachedir path.

- `exclude` and `include` configuration options change to `excludepkgs` and `includepkgs`.

API additions in 2.0.0:

- `dnf.Base.init_plugins()` initializes plugins. It is possible to disable some plugins by passing the list of their name patterns to `disabled_glob`.

- `dnf.Base.configure_plugins()` configures plugins by running their `configure()` method.

- `dnf.Base.urlopen()` opens the specified absolute `url` and returns a file object which respects proxy setting even for non-repo downloads

- Introduced new configuration options: `check_config_file_age`, `clean_requirements_on_remove`, `deltarpm_percentage`, `exit_on_lock`, `get_reposdir`, `group_package_types`, `installonlypkgs`, `keepcache`, `protected_packages`, `retries`, `type`, and `upgrade_group_objects_upgrade`. For detailed description see: DNF API.

- Introduced new configuration methods: `dump()` and `write_raw_configfile()`. For detailed description see: DNF API.

- Introduced `dnf.package.Package` attributes `debug_name`, `downloadsize`, `source_debug_name` and `source_name`. For detailed description see: DNF Package API.

- `dnf.query.Query.extras()` returns a new query that limits the result to installed packages that are not present in any repo.

- `dnf.repo.Repo.enable_debug_repos()` enables debug repos corresponding to already enabled binary repos.

- `dnf.repo.Repo.enable_source_repos()` enables source repos corresponding to already enabled binary repos.

- `dnf.repo.Repo.dump()` prints repository configuration, including inherited values.

- `dnf.query.Query.filter()` now accepts optional argument pkg.

DNF command changes in 2.0.0:

- `dnf [options] group install [with-optional] <group-spec>...` changes to `dnf [options] group install [--with-optional] <group-spec>...`.

- `dnf [options] list command [<package-name-specs>...]` changes to dnf [options] list --command [<package-name-specs>...]`.

- `dnf [options] makecache timer` changes to `dnf [options] makecache --timer`.

- `dnf [options] repolist [enabled|disabled|all]` changes to `dnf [options] repolist [--enabled|--disabled|--all]`.

- `dnf [options] repository-packages <repoid> info command [<package-name-spec>...]` changes to `dnf [options] repository-packages <repoid> info --command [<package-name-spec>...]`.

- `dnf repoquery --duplicated` changes to `dnf repoquery --duplicates`.

- `dnf [options] search [all] <keywords>...` changes to `dnf [options] search [--all] <keywords>...`.

- `dnf [options] updateinfo [<availability>] [<spec>...]` changes to `dnf [options] updateinfo [--summary|--list|--info] [<availability>] [<spec>...]`.

- `--disablerepo` command line argument is mutually exclusive with `--repo`.

- `--enablerepo` command line argument now appends repositories.

- `--installroot` command line argument. For detailed description see: DNF command API.

- `--releasever` command line argument now doesn't detect release number from running system.

- `--repofrompath` command line argument can now be combined with `--repo` instead of `--enablerepo`.

- Alternative of yum's `deplist` changes from `dnf repoquery --requires` to `dnf repoquery --deplist`.

- New systemd units dnf-automatic-notifyonly, dnf-automatic-download, dnf-automatic-download were added for a better customizability of dnf-automatic.

DNF command additions in 2.0.0:

- `dnf [options] remove --duplicates` removes older version of duplicated packages.

- `dnf [options] remove --oldinstallonly``removes old installonly packages keeping only ``installonly_limit` latest versions.

- `dnf [options] repoquery [<select-options>] [<query-options>] [<pkg-spec>]` searches the 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 --querytags` provides list of recognized tags by repoquery option --queryformat.

- `--repo` command line argument enables just specific repositories by an id or a glob. Can be used multiple times with accumulative effect. It is basically shortcut for `--disablerepo="*" --enablerepo=<repoid>` and is mutually exclusive with `--disablerepo` option.

- New commands have been introduced: `check` and `upgrade-minimal`.

- New security options introduced: `bugfix`, `enhancement`, `newpackage`, `security`, `advisory`, `bzs`, `cves`, `sec-severity` and `secseverity`.

Bugs fixed in 2.0.0:

- Bug 1229730 - dnf.subject.Subject() does not honour epoch

- Bug 1375277 - releasever in baseurl translated to major.minor, not just major (7.3 instead of 7, yum incompatibility)

- Bug 1384289 - dnf repoquery --quiet outputs "Last metadata expiration check:"

- Bug 1398272 - Dnf import of public keys causes stale rpmdb locks left behind

- Bug 1382224 - RFE: dnf transactions should run in a transient systemd service

- Bug 1177785 - add hawkey.Selector epoch support

- Bug 1272109 - Dnf very slow with wildcards.

- Bug 1234930 - [RFE] Add yum-security functionality to DNF

- Bug 1341086 - dnf install exists with 0 even if it did not install all packages

- Bug 1382247 - installonlypkgs doesn't work by provides

- Bug 1381216 - --nogpgcheck doesn't work properly

- Bug 1381432 - L10N - update DNF 2.0 strings in Zanata so we can translate and fix tiny localization issues

- Bug 1096506 - promoting 'install a' to 'install b' when b obsoletes a

- Bug 1332830 - DNF builddep is not consistently installing packages providing capabilities properly

- Bug 1348766 - "The operation would result in removing the booted kernel" when installonlypkgs is set in dnf.conf

- Bug 1337731 - Live image compose fails with dnf 1.1.9

- Bug 1333591 - F24 PAE kernel conflicts with F23 PAE kernel

- Bug 1314961 - dnf-automatic crashes when 'None' emitter is used

- Bug 1372307 - dnf-automatic does not run etckeeper's autocommit

- Bug 1373108 - Whitelist 'type=*' option in config

- Bug 1148627 - dnf doesn't provide enough info to understand the package dependencies

- Bug 1267298 - dnf doesn't handle uncompressed comps.xml

- Bug 1373591 - TypeError: decode() argument 1 must be string, not MagicMock

- Bug 1230355 - Running "dnf history" as non-root user produces unhelpful error message

- Bug 1366793 - Nothing obsoletes retired dnf-langpacks packages, breaks upgrade from Fedora 23 to 25+

- Bug 1369411 - information about metadata expiration should go into stderr

- Bug 1366793 - Nothing obsoletes retired dnf-langpacks packages, breaks upgrade from Fedora 23 to 25+

- Bug 1369459 - dnf repolist disabled doesn't show repository name

- Bug 1306096 - time zone not displayed

- Bug 1368832 - AttributeError: 'Repo' object has no attribute 'metalink_path'

- Bug 1366793 - Nothing obsoletes retired dnf-langpacks packages, breaks upgrade from Fedora 23 to 25+

- Bug 1359016 - Unknown configuration option: enabled_metadata = 1

- Bug 1365593 - dnf: misleading error message when trying to "upgrade" src.rpm

- Bug 1297087 - [RFE] Implementation of localpkg_gpgcheck option for checking gpg signature for local packages or packages specified by URL

- Bug 1227053 - '--exclude' option empties whole transaction

- Bug 1356926 - Results of 'dnf repoquery --whatprovides' and 'dnf provides' don't match

- Bug 1055910 - [rfe] includepkgs directive support

- Bug 1219867 - include option in repository should not effect the rest repos

- Bug 1226677 - dnf repoquery -f does not support wildcards

- Bug 1350604 - RFE: Add 'build-dep' and 'distrosync' aliases to 'builddep' and 'distro-sync'

- Bug 1253120 - dnf remove: when remove multiple versions of kernel packages, the "Erasing" result of "Running transaction" show duplicated lowest version number

- Bug 1158548 - [rfe] "dnf <plugin> --help" does not print plugin help

- Bug 1262878 - dnf --exclude doesn't work for local installed package

- Bug 1318852 - DNF doesn't install groups, reports the group is already installed.

- Bug 1327438 - make --available default in dnf repoquery

- Bug 1343880 - dnf.plugin.repoquery documentation should use/explain --alldeps

- Bug 1338921 - dnf removes sqlite-libs because plexmediaserver pretends it provides them

- Bug 1284349 - installed hipchat confuses dnf to remove sqlite (which destroys the system)

- Bug 1338921 - dnf removes sqlite-libs because plexmediaserver pretends it provides them

- Bug 1284349 - installed hipchat confuses dnf to remove sqlite (which destroys the system)

- Bug 1306096 - time zone not displayed

- Bug 1218071 - No API to enable/run plugins

- Bug 1193823 - [RFE] Plugins can't be disabled in config files

- Bug 1246211 - DNF Repoquery: Automatically enable repo selected by --repo

- Bug 1193851 - [RFE] Add support for --repoid parameter

- Bug 1158548 - [rfe] "dnf <plugin> --help" does not print plugin help

- Bug 1215208 - Double-dash ("--") argument separator is not supported

- Bug 1212693 - dnf does not consistently exit immediately when an invalid option is given

- Bug 1212341 - [RFE] Allow plugins to override the core configuration

- Bug 1306591 - when weak_install_weak_deps==False don't show weak dependencies in "Skipping packages with conflicts" section

- Bug 1227001 - Using DNF to with --installroot fails where yum works

- Bug 1163028 - [doc] Document behaviour of --installroot

- Bug 1279185 - dnf searches in /etc/yum.repos.d/*.repo when using --installroot

- Bug 1289067 - [RFE][UX] visual separation of autoremoved packages

- Bug 1328674 - diskspacecheck=0 in dnf.conf has no effect

- Bug 1380580 - dnf 2.0 doesn't accept type=rpm in repo files

- Bug 1327999 - "dnf upgrade-to" requiring full NEVRA

- Bug 1400081 - Crash with empty includepkgs list in repository configuration file

- Bug 1293782 - dnf clean all does not wait for current running upgrade

- Bug 1386078 - L10N - Explain repoquery strings

- Bug 1358245 - repoquery: valid use of stderr and stdout, use stdout only for requested data

- Bug 1243393 - Query.filter(pkgs=XXX) is not documented

- Bug 1339739 - Option --skip-broken is missing

## 1.1.10 Release Notes

Fixed unicode handling and fixing other bugs.

Bugs fixed in 1.1.10:

- Bug 1257965 - DNF doesn't treat the "xml:base" attribute in the primary.xml location tag correctly

- Bug 1352130 - dnf should not report errors to stdout, it's mildly dangerous

- Bug 1343764 - dnf reinstall deletes yumdb entry

- Bug 1308994 - After installing a package from local unicode directory a traceback is shown (UnicodeEncodeError)

- Bug 1230183 - Package update does not work when package changes from noarch <-> arch

- Bug 1295090 - [abrt] dnf: i18n.py:44:write:UnicodeEncodeError: 'ascii' codec can't encode character '\xe6' in position 54: ordinal not in range(128)

- Bug 1325869 - [abrt] dnf: config.py:91:__set__:ValueError: Error parsing "baseurl = repodata": URL must be http, ftp, file or https not ""

- Bug 1338046 - dnf will consume 100% CPU when there is no space left on device

- Bug 1214768 - history userinstalled lists should print NEVRAs instead of names

- Bug 1338504 - dnf upgrade (to 1.1.9) broke bash completion

- Bug 1338564 - Update fails with "AttributeError: 'Base' object has no attribute 'sigCheckPkg' (36)"

## 1.1.9 Release Notes

From this release if you use any non-API methods warning will be printed and bugfixes.

Bugs fixed in 1.1.9:

- Bug 1324086 - dnf "autoremove" command has no description in dnf --help

- Bug 1332012 - UnicodeEncodeError: 'ascii' codec can't encode characters in position 342-343: ordinal not in range(128)

- Bug 1292892 - dnf groupinstall ignores errors

- Bug 1328674 - diskspacecheck=0 in dnf.conf has no effect

- Bug 1286556 - /usr/lib64/python3.5/re.py:203: FutureWarning: split() requires a non-empty pattern match.

- Bug 1245121 - TypeError: unhashable type: 'YumHistoryPackageState'

## 1.1.8 Release Notes

Improvements in documentation, bugfixes, translation updates.

Bugs fixed in 1.1.8:

- Bug 1309408 - [RFE] Add docs that --best is showing more details on broken package dependencies

- Bug 1209649 - [UX] dnf group info (and other two word commands) give wrong mini_usage info

- Bug 1272977 - dnf waits 10 minutes for a single repo (for unresponsive ftp server?)

- Bug 1322226 - [pt-BR] some strings translated in zanata are missing in the terminal

- Bug 1315349 - dnf-makecache.service fills journal with useless lines because of verbose option

- Bug 1214562 - Config error: Error parsing "installonly_limit = u'1'": Out of range integer value.

- Bug 1313215 - got "IndexError: list index out of range " after ran dnf history command

- Bug 1306057 - [UX] different behaviour of installonly in yum/dnf

- Bug 1289164 - [RFE] positive prompt answer by default

## 1.1.7 Release Notes

Added `dnf.rpm.basearch()` method, intended for the detection of CPU base architecture.

The group list command was enriched with `installed` and `available` switches.

Documented a standard way of overriding autodetected architectures in DNF API.

Bugs fixed in 1.1.7:

- Bug 1286477 - DNF creates /etc/yum/repos.d instead of /etc/dnf/repos.d when no repodir is present/configured

- Bug 1305356 - dnf groupinstall does not install packages, only marks them

- Bug 1258503 - regression in dnf, requires network access for history

- Bug 1283432 - dnf group list --installed / --available

- Bug 1268818 - dnf -v group list not mentioned in man page

- Bug 1306304 - [perf] cache installed set of packages in query (for updates)

- Bug 1302934 - Malformed translations in 1.1.6

- Bug 1303149 - dnf history info failing

- Bug 1302217 - dnf metadata expiration message does not fit on screen

## 1.1.6 Release Notes

Added support of socks5 proxy.

Bugs fixed in 1.1.6:

- Bug 1291895 - DNF history failure if no history

- Bug 1256587 - The proxy option in dnf.conf doesn't support socks5

- Bug 1287221 - dnf stutters when writing in /var/log/dnf.rpm.log

- Bug 1277360 - doc: update specifying the packages in commands

- Bug 1294241 - file /var/lib/dnf/* is not owned by any package

- Bug 1289166 - dnf makecache triggers a python exception

- Bug 1294355 - German translation incomplete on delta RPMS

- Bug 1226322 - dnf clean all does not clean package metadata for local repos

- Bug 1275878 - [abrt] dnf: rpmsack.py:288:_delete:AttributeError: Cannot delete attribute installed_by on <dnf.yum.rpmsack.RPMDBAdditionalDataPackage object at 0x7f10c32f15d0>

- Bug 1239274 - dnf history does not show command line

## 1.1.5 Release Notes

Improved the start-up time of bash completion.

Reviewed documentation.

Bugs fixed in 1.1.5:

- Bug 1286619 - [abrt] dnf: group.py:253:_mark_install:AttributeError: 'GroupPersistor' object has no attribute 'environement'

- Bug 1229046 - mark group as installed only after successful transaction

- Bug 1282250 - RFE: don't consider remove operations as successful transactions

- Bug 1265391 - `dnf update @group` doesn't work

- Bug 1283017 - [rfe] support braces in variable substitution

- Bug 1278592 - Bad default for email_from in automatic.conf

- Bug 1260421 - [rfe] dnf should download drpms first

- Bug 1278382 - DNF python programming error when run from virt-builder

- Bug 1230820 - /usr/bin/dnf using -OO

- Bug 1280240 - dnf should warn if plugins are disabled and an unknown command is requested

## 1.1.4 Release Notes

API additions in 1.1.4:

- newly added `dnf.Query.duplicated()`

- extended `dnf.Query.latest()`

Bugs fixed in 1.1.4:

- Bug 1278031 - dnf fails to find system-upgrade plugin with certain locales (Chinese, Japanese and maybe more)

- Bug 1264032 - RFE: add "Skipped" into Transaction Summary

- Bug 1209056 - [UX] [TRANS] Plural strings are not extracted properly

- Bug 1274946 - [abrt] dnf: main.py:99:main:IOError: [Errno 5] Input/output error

## 1.1.3 Release Notes

Now `dnf.Base.group_install()` is able to exclude mandatory packages of the group from transaction.

## 1.1.2 Release Notes

Implemented --downloadonly command line option.

Bugs fixed in 1.1.2:

- Bug 1262082 - 'ascii' codec can't decode byte 0xc3 in position 40: ordinal not in range(128)

- Bug 1250038 - [abrt] python-dnf: completion_helper.py:84:run:IndexError: list index out of range

- Bug 1048433 - RFE --downloadonly

- Bug 1259650 - "dnf provides" or "dnf repoquery --whatprovides" does not support globs

- Bug 1260198 - python-dnf should provide python2-dnf

- Bug 1259657 - No dnf-command() provides for dnf commands

- Bug 1254982 - dnf-automatic generates emails with broken charset

- Bug 1261766 - RFE: way to force no metadata expiration system-wide

- Bug 1234491 - [UX] dnf list installed: show repo id the package was installed from

- Bug 1256531 - dnf install crashes if terminal window is too small

- Bug 1254687 - DNF does not display any translations

- Bug 1261656 - DNF group update doesn't work

- Bug 1258364 - Some important dnf output goes to STDERR and not to STDOUT

## 1.1.1 Release Notes

Implemented `dnf mark` command.

Bugs fixed in 1.1.1:

- Bug 1249319 - dnf says "downloaded packages were saved in cache" before actually downloading any packages

- Bug 1234763 - wildcard in dnf update/downgrade should match installed packages only

- Bug 1242946 - [depsolv] dnf prefers package names over provide names

- Bug 1225225 - [abrt] python-dnf: repo.py:774:load:RepoError: Cache-only enabled but no cache for 'fedora'

- Bug 1254687 - DNF does not display any translations

- Bug 1247766 - dnf logrotate.d rotates logs too fast in many cases

- Bug 1125925 - [RFE] provide a 'add to user-installed-list' command

- Bug 1210289 - RFE: Have a way to wait on dnf lock rather than terminate

## 1.1.0 Release Notes

API additions in 1.1.0:

`dnf.Base.do_transaction()` now accepts multiple displays.

Introduced `install_weak_deps` configuration option.

Implemented `strict` configuration option.

API deprecations in 1.1.0:

- `dnf.callback.LoggingTransactionDisplay` is deprecated now. It was considered part of API despite the fact that it has never been documented. Use `dnf.callback.TransactionProgress` instead.

Bugs fixed in 1.1.0

- Bug 1210445 - [rfe] report when skipping available updates due to dependency reasons

- Bug 1218401 - [doc] document history_list_view and set it to cmd by default

- Bug 1227952 - dnf update on a local directory does not handle mutliple versions of the same package

- Bug 1197456 - [RFE] implement `strict` config option (defaults=True)

- Bug 1236310 - dnf --quiet repolist doesn't output anything

- Bug 1219638 - DNF doesn't use xml:base in repodata

- Bug 1207981 - [UX] error during unpacking archive does not fail the installation

- Bug 1208918 - RFE: dnf shouldn't stop processing the command line at the first unknown package

- Bug 1221635 - add dnf config option to (not)obey weak deps

- Bug 1236306 - Some of dnf's subcommands can't handle pipe

- Bug 1234639 - dnf package actions triggered by dnf-automatic aren't logged to dnf.rpm.log

- Bug 1244486 - [doc] Add yum vs dnf hooks information in dnf documentation

- Bug 1224248 - [UX] Error message doesn't show names of packages well

- Bug 1243501 - `dnf downgrade' treats installed packages as not installed

- Bug 1225237 - [UX] [doc] FILES section missing from manual pages

## 1.0.2 Release Notes

When a transaction is not successfully finished, DNF preserves downloaded packages until the next successful transaction even if `keepcache` option is set to `False`.

Maximum number of simultaneous package downloads can be adjusted by newly added `max_parallel_downloads` configuration option.

`--repofrompath` command line argument was introduced for temporary configuration of repositories.

API additions in 1.0.2:

Newly added package attributes: `dnf.package.Package.obsoletes`, `dnf.package.Package.provides` and `dnf.package.Package.requires`.

`dnf.package.Query.filter`'s keys `requires` and `provides` now accepts list of `Hawkey.Reldep` type.

Bugs fixed in 1.0.2:

- Bug 1148630 - add --allowerasing hint for conflict problems

- Bug 1176351 - [RFC] print warning message when we're going to install not latest version

- Bug 1210445 - [rfe] report when skipping available updates due to dependency reasons

- Bug 1173107 - mock: use of "dnf --installroot ..." yields "releasever not given" error

- Bug 1219199 - Problem when using proxy authentication in dnf.conf

- Bug 1220040 - [abrt] python-dnf: completion_helper.py:92:run:UnboundLocalError: local variable 'pkgs' referenced before assignment

- Bug 1230975 - [rfe] configurable parallel downloads (like yum's max_connections)

- Bug 1232815 - 'dnf install @group' returns error code 1 if all packages are already installed

- Bug 1113384 - [rfe] repofrompath option to specify ad-hoc repo

- Bug 1133979 - yum/dnf --quiet option not working for check-update command

- Bug 1238958 - dnf-automatic fails to send mail

- Bug 1238252 - Typo in dnf man page

- Bug 1212320 - [metadata] dnf makecache never timeouts

## 1.0.1 Release Notes

DNF follows the Semantic Versioning as defined at http://semver.org/.

Documented SSL configuration and repository options.

Added virtual provides allowing installation of DNF commands by their name in the form of `dnf install dnf-command(name)`.

dnf-automatic now by default waits random interval between 0 and 300 seconds before any network communication is performed.

Bugs fixed in 1.0.1:

- Bug 1214968 - dnf reports installed group does not exist

- Bug 1222694 - [abrt] python-dnf: comps.py:86:install_or_skip:TypeError: unsupported operand type(s) for +=: 'int' and 'TransactionBunch'

- Bug 1225246 - yum2dnf manpage: too much underlining

- Bug 1213985 - [rfe] add equivalent of "random_sleep" to dnf-automatic

- Bug 1225277 - python(abi) = 3.3 is needed by (installed)

- Bug 1223932 - UnicodeEncodeError: 'ascii' codec can't encode character u'\xe1' in position 19: ordinal not in range(128)

- Bug 1223614 - dnf groupinstall fails and returns success

- Bug 1203661 - [CRY] sslclientcert and sslclientkey not supported

- Bug 1187741 - dnf should state if packages explicitly requested for update aren't installed

## 1.0.0 Release Notes

Improved documentation of YUM to DNF transition in Changes in DNF CLI compared to YUM.

Auto remove command does not remove installonly packages.

Downgrade command downgrades to specified package version if that is lower than currently installed one.

DNF now uses `dnf.repo.Repo.id` as a default value for `dnf.repo.Repo.name`.

Added support of repositories which use basic HTTP authentication.

API additions in 1.0.0:

configuration options username and password (HTTP authentication)

`dnf.repo.Repo.username` and `dnf.repo.Repo.password` (HTTP authentication)

Bugs fixed in 1.0.0:

- Bug 1215560 - [abrt] dnf: i18n.py:165:exact_width:TypeError: 'NoneType' object is not iterable

- Bug 1199648 - [UX] dnf groupinstall claims that installed group does not exist

- Bug 1208773 - [RFE] Define virtual provides for DNF commands and suggest installing the appropriate one if a command was not found

- Bug 1208018 - config-manager: enable won't work. TypeError: unorderable types: Repo() < Repo()

- Bug 1207861 - Python 3: historical transactions that had multiple problems causes tracebacks

- Bug 1201445 - "dnf autoremove" removes "user-installed" installonly packages installed using "dnf upgrade"

- Bug 1210275 - DNF doesn't support http authentication

- Bug 1191275 - dnf downgrade <target-nevra> fails

- Bug 1207965 - Improve yum deprecated message

- Bug 1215289 - bash completion file adds a shell alias for python

## 0.6.5 Release Notes

Python 3 version of DNF is now default in Fedora 23 and later.

yum-dnf package does not conflict with yum package.

dnf erase was deprecated in favor of dnf remove.

Extended documentation of handling non-existent packages and YUM to DNF transition in Changes in DNF CLI compared to YUM.

API additions in 0.6.5:

Newly added pluginconfpath option in configuration.

Exposed skip_if_unavailable attribute from Repository Configuration.

Documented IOError exception of method fill_sack from `dnf.Base`.

Bugs fixed in 0.6.5:

- Bug 1203151 - Duplicated output for already installed packages

- Bug 1187579 - dnf upgrade ./<TAB> doesn't autocomplete

- Bug 1185977 - [api] remove cached package file only after transaction()

- Bug 1195240 - dnf-automatic "how to use"

- Bug 1193914 - 'help history' does not correspond with supported commands

- Bug 1195385 - dnf regression: cannot resolve provides with slashes

- Bug 1160806 - DNF shoud not deprecate "remove" command

- Bug 1186710 - dnf --setopt exclude=XXX adds garbage to excludes

- Bug 1207726 - Update dnf and yum packages for proposed dnf default change

- Bug 1157233 - 'dnf download' cannot be run in parallel as non-root user

- Bug 1190671 - DNF ships bash completition file but lacks requirement on bash completion

- Bug 1191579 - python3-dnf cannot be used without python2

- Bug 1195325 - RFE: provide a way to configure the config directory used by plugins

- Bug 1154202 - [depsolv] removing a package results in downloading more packages

- Bug 1189083 - [doc] please document 'skip_if_unavailable' Repo flag

- Bug 1193915 - [abrt] dnf: output.py:1730:historySummaryCmd:ValueError: need more than 0 values to unpack

- Bug 1195661 - lock files cannot be created for non logged users

- Bug 1190458 - [abrt] dnf: cli.py:210:do_transaction:UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in position 196: ordinal not in range(128)

- Bug 1194685 - CACHEDIR_SUFFIX appended twice to cachedir when using dnf CLI.

- Bug 1160950 - "dnf install foo.rpm" doesn't upgrade "foo"

## 0.6.4 Release Notes

Added example code snippets into DNF Use Cases.

Shows ordered groups/environments by display_order tag from cli and Comps, or the Distribution Compose Metadata DNF API.

In commands the environment group is specified the same as group.

skip_if_unavailable configuration option affects the metadata only.

added enablegroups, minrate and timeout configuration options

API additions in 0.6.4:

Documented install_set and remove_set attributes from Transaction.

Exposed downloadsize, files, installsize attributes from Package.

Bugs fixed in 0.6.4:

- Bug 1155877 - [abrt] dnf: i18n.py:130:ucd:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128)

- Bug 1175466 - add timeout option to repo conf

- Bug 1175466 - add timeout option to repo conf

- Bug 1186461 - "file" filter in DNF

- Bug 1170156 - [RFE][UX] Display metadata timestamp

- Bug 1184943 - please enrich DNF API with a method for setting up base.conf.cachedir for non privileged users

- Bug 1177002 - comps display_order for environment groups not respected by installer with dnf payload (or dnf itself)

- Bug 1169165 - let glob pattern describing package to match multiple packages

- Bug 1167982 - dnf.conf man page is in the wrong section

- Bug 1157233 - 'dnf download' cannot be run in parallel as non-root user

- Bug 1138096 - [doc] add examples on install, resolve, do_transaction api usage

- Bug 1181189 - dnf downgrade ./<TAB> doesn't autocomplete

- Bug 1181397 - [abrt] dnf: output.py:683:_display_packages_verbose:KeyError: u'ppc64-utils'

- Bug 1175434 - Odd placement and no rotation of hawkey.log

- Bug 1162887 - [api] introspecting transaction package sets

- Bug 1156084 - dnf install @some-environment-id does not work

- Bug 1175098 - dnf: unowned dir /etc/dnf/protected.d

- Bug 1174136 - wrongly computed text width with nonascii characters

- Bug 1055910 - [rfe] includepkgs directive support

- Bug 1155918 - let "history list" show all records

- Bug 1119030 - skip_if_unavailable to correctly treat repos that are down during package download

- Bug 1177394 - Dnf specifies both "size" and an age in the logrotate configuration

- Bug 1154476 - [abrt] dnf: lock.py:64:_read_lock:ValueError: invalid literal for int() with base 10: ''

## 0.6.3 Release Notes

Deltarpm configuration option is set on by default.

API additions in 0.6.3:

- dnf-automatic adds motd emitter as an alternative output

Bugs fixed in 0.6.3:

- Bug 1153543 - dnf bash completion hangs when trying to complete local path

- Bug 1151231 - Broken bash completion (does not occur when dnf-plugins-core installed)

- Bug 1163063 - dnf install with glob pattern output should be similar to yum install with glob

- Bug 1151854 - --cacheonly is not being respected – will update the cache if expired

- Bug 1151740 - dnf base api should not use errorSummary from dnf.cli.BaseCli

- Bug 1110780 - dnf swap not supported

- Bug 1149972 - update command implicitly working as reinstall

- Bug 1150474 - dnf group install broken for locale other than en_US

- Bug 995537 - RFE: /etc/motd emitter for yum-cron

- Bug 1149952 - Python exception thrown when searching dnf history

- Bug 1149350 - Odd placement and no rotation of hawkey.log

- Bug 1170232 - dnf eats newlines from error message

- Bug 1147523 - missing group info environment group support

- Bug 1148208 - [rfe] enable deltarpm support by default

- Bug 1109927 - RFE: take systemd inhibitor lock while doing operations that shouldn't be interrupted by shutdown

## 0.6.2 Release Notes

API additions in 0.6.2:

- Now `dnf.Base.package_install()` method ignores already installed packages

- CliError exception from `dnf.cli` documented

- Autoerase, History, Info, List, Provides, Repolist commands do not force a sync of expired metadata

- Install command does installation only

Bugs fixed in 0.6.2:

- Bug 909856 - [rfe] lazy mode for metadata syncing

- Bug 1134893 - "dnf update" works as "dnf install" on local package files

- Bug 1138700 - dnf doesn't install all packages on command line

- Bug 1070902 - dnf autocomplete for install ./* + <TAB> takes ages

- Bug 1124316 - [locking] per-installroot metadata lock

- Bug 1136584 - [abrt] dnf: rpmsack.py:255:_read:AttributeError: <dnf.yum.rpmsack.RPMDBAdditionalDataPackage object at 0x7f10fed01b50> has no attribute reason

- Bug 1135861 - group erase libreoffice fails, package requires but none of the providers can be installed

- Bug 1136223 - [abrt] dnf: packages.py:76:parsePackages:TypeError: unsupported operand type(s) for |=: 'set' and 'list'

- Bug 1122617 - reinstall of local rpms gives traceback

- Bug 1133830 - Does not import gpg keys

- Bug 1121184 - dnf: shows fake download speed when not downloading anything

## 0.6.1 Release Notes

New release adds upgrade-type command to dnf-automatic for choosing specific advisory type updates.

Implemented missing history redo command for repeating transactions.

Supports gpgkey repo config, repo_gpgcheck and gpgcheck [main] and Repo configs.

Distributing new package dnf-yum that provides /usr/bin/yum as a symlink to /usr/bin/dnf.

API additions in 0.6.1:

- exclude, the third parameter of `dnf.Base.group_install()` now also accepts glob patterns of package names.

Bugs fixed in 0.6.1:

- Bug 1132335 - RFE [UX] - Give users hint on uknown command

- Bug 1071854 - dnf reinstall does not work as expected

- Bug 1131969 - [rfe] group_install: accepts package specs as excludes

- Bug 908764 - RFE: Support repo-pkgs command set

- Bug 1130878 - [abrt] dnf: persistor.py:60:_diff_dcts:AttributeError: 'NoneType' object has no attribute 'keys'

- Bug 1130432 - [abrt] dnf: locale.py:166:_group:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)

- Bug 1118236 - dnf doesn't seem to support repo_gpgcheck config

- Bug 1109915 - [rfe] yum-cron replacement

## 0.6.0 Release Notes

0.6.0 marks a new minor version of DNF and the first release to support advisories listing with the udpateinfo command.

Support for the include configuration directive has been added. Its functionality reflects YUM's `includepkgs` but it has been renamed to make it consistent with the `exclude` setting.

Group operations now produce a list of proposed marking changes to group objects and the user is given a chance to accept or reject them just like with an ordinary package transaction.

Bugs fixed in 0.6.0:

- Bug 850912 - RFE: support updateinfo

- Bug 1055910 - [rfe] includepkgs directive support

- Bug 1116666 - handling groups installed by Yum

- Bug 1118272 - search command show traceback when in a debug mode

- Bug 1127206 - [abrt] dnf: __init__.py:186:install:Exception: Goal operation failed.

## 0.5.5 Release Notes

The full proxy configuration, API extensions and several bugfixes are provided in this release.

API changes in 0.5.5:

- cachedir, the second parameter of `dnf.repo.Repo.__init__()` is not optional (the method has always been this way but the documentation was not matching)

API additions in 0.5.5:

- extended description and an example provided for `dnf.Base.fill_sack()`

- `dnf.conf.Conf.proxy`

- `dnf.conf.Conf.proxy_username`

- `dnf.conf.Conf.proxy_password`

- `dnf.repo.Repo.proxy`

- `dnf.repo.Repo.proxy_username`

- `dnf.repo.Repo.proxy_password`

Bugs fixed in 0.5.5:

- Bug 1100946 - dnf install <bin filename> installs both i686 and x86_64 packages for no reason

- Bug 1117789 - [doc] [api] custom repos

- Bug 1120583 - [api] full-featured proxy configuration

- Bug 1121280 - History list with login names fails with non-ascii names

- Bug 1122900 - [abrt] dnf: package.py:73:header:RuntimeError: (Rpm file does not exist)

- Bug 1123688 - dnf missing Requires on pyliblzma

## 0.5.4 Release Notes

Several encodings bugs were fixed in this release, along with some packaging issues and updates to DNF Configuration Reference.

Repository priority configuration setting has been added, providing similar functionality to YUM Utils' Priorities plugin.

Bugs fixed in 0.5.4:

- Bug 1048973 - [rfe] repo priorities

- Bug 1108908 - dnf dies immediately complaining that ascii codec can't decode 0xc3

- Bug 1116544 - [i18n] double width Unicode characters

- Bug 1116839 - CompsError: Group 'Core' is already installed.

- Bug 1116845 - dnf crashed when executing 'dnf -v repolist all'

- Bug 1117102 - [doc] configuring plugin search directories

- Bug 1117293 - --installroot proceeds with an undefined conf.releasever

- Bug 1117678 - [py3] proper binary for python3-dnf

- Bug 1118178 - should create /etc/dnf/plugins directory

- Bug 1118796 - TypeError: must be unicode, not str

- Bug 1119032 - python3-dnf-0.5.3 conflicts with dnf-0.5.2

## 0.5.3 Release Notes

A set of bugfixes related to i18n and Unicode handling. There is a `-4/-6` switch and a corresponding ip_resolve configuration option (both known from YUM) to force DNS resolving of hosts to IPv4 or IPv6 addresses.

0.5.3 comes with several extensions and clarifications in the API: notably `Transaction` is introspectable now, `Query.filter` is more useful with new types of arguments and we've hopefully shed more light on how a client is expected to setup the configuration `substitutions`.

Finally, plugin authors can now use a new `resolved()` hook.

API changes in 0.5.3:

- extended description given for `dnf.Base.fill_sack()`

- `dnf.Base.select_group()` has been dropped as announced in 0.4.18 Release Notes

API additions in 0.5.3:

- `dnf.conf.Conf.substitutions`

- `dnf.package.Package.arch`

- `dnf.package.Package.buildtime`

- `dnf.package.Package.epoch`

- `dnf.package.Package.installtime`

- `dnf.package.Package.name`

- `dnf.package.Package.release`

- `dnf.package.Package.sourcerpm`

- `dnf.package.Package.version`

- `dnf.Plugin.resolved()`

- `dnf.query.Query.filter()` accepts suffixes for its argument keys now which change the filter semantics.

- `dnf.rpm`

- `dnf.transaction.TransactionItem`

- `dnf.transaction.Transaction` is iterable now.

Bugs fixed in 0.5.3:

- Bug 1047049 - distroverpkg default should be the same in dnf as in yum

- Bug 1067156 - [api] introspecting transaction

- Bug 1093420 - Add to dnf.conf ip_resolve entry

- Bug 1104757 - [api] yumvars not set fail fedora metadata download

- Bug 1105009 - Please update the queries api documentation

- Bug 1110800 - [abrt] dnf: parser.py:59:varReplace:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 6: ordinal not in range(128)

- Bug 1111569 - make "Transaction couldn't start (no root?)" error more clear

- Bug 1111997 - [abrt] dnf: base.py:1894:_retrievePublicKey:TypeError: not all arguments converted during string formatting

- Bug 1112669 - commands from dnf-plugins-core not mentioned in man page

- Bug 1112704 - NameError: global name 'i18n' is not defined

## 0.5.2 Release Notes

This release brings autoremove command that removes any package that was originally installed as a dependency (e.g. had not been specified as an explicit argument to the install command) and is no longer needed.

Enforced verification of SSL connections can now be disabled with the sslverify setting.

We have been plagued with many crashes related to Unicode and encodings since the 0.5.0 release. These have been cleared out now.

There's more: improvement in startup time, extended globbing semantics for input arguments and better search relevance sorting.

Bugs fixed in 0.5.2:

- Bug 963345 - [rfe] autoremove

- Bug 1073457 - Auto-completion issue with sudo dnf install

- Bug 1076045 - [rfe] ssl support

- Bug 1083679 - dnf globbing does not really work

- Bug 1092006 - [abrt] dnf: __init__.py:1704:parse_extcmds:ValueError: need more than 0 values to unpack

- Bug 1092777 - [abrt] dnf: __init__.py:403:run:UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)

- Bug 1093888 - [search] put exact matches first

- Bug 1094594 - dnf history rollback tracebacks

- Bug 1095580 - [kernel] kernel-models-extra cannot be installed because a newer one is already installed

- Bug 1095861 - UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 21: ordinal not in range(128)

- Bug 1096506 - promoting 'install a' to 'install b' when b obsoletes a

## 0.5.1 Release Notes

Bugfix release with several internal cleanups. One outstanding change for CLI users is that DNF is a lot less verbose now during the dependency resolving phase.

Bugs fixed in 0.5.1:

- Bug 1065882 - [delta] delta rpm download size statistics

- Bug 1081753 - do not emit uncaught exceptions from automatic makecache runs

- Bug 1089864 - [api] group persistor is not saved when using group_* API

## 0.5.0 Release Notes

The biggest improvement in 0.5.0 is complete support for groups and environments, including internal database of installed groups independent of the actual packages (concept known as groups-as-objects from YUM). Upgrading groups is supported now with `group upgrade` too.

To force refreshing of metadata before an operation (even if the data is not expired yet), the refresh option has been added.

Internally, the CLI went through several changes to allow for better API accessibility like granular requesting of root permissions.

API has got many more extensions, focusing on better manipulation with comps and packages. There are new entries in Changes in DNF CLI compared to YUM and DNF User's FAQ too.

Several resource leaks (file descriptors, noncollectable Python objects) were found and fixed.

API changes in 0.5.0:

- it is now recommended that either `dnf.Base.close()` is used, or that `dnf.Base` instances are treated as a context manager.

API extensions in 0.5.0:

- `dnf.Base.add_remote_rpms()`

- `dnf.Base.close()`

- `dnf.Base.group_upgrade()`

- `dnf.Base.resolve()` optionally accepts allow_erasing arguments now.

- `dnf.Base.package_downgrade()`

- `dnf.Base.package_install()`

- `dnf.Base.package_upgrade()`

- `dnf.cli.demand.DemandSheet`

- `dnf.cli.Command.base`

- `dnf.cli.Command.cli`

- `dnf.cli.Command.summary`

- `dnf.cli.Command.usage`

- `dnf.cli.Command.configure()`

- `dnf.cli.Cli.demands`

- `dnf.comps.Package`

- `dnf.comps.Group.packages_iter()`

- `dnf.comps.MANDATORY` etc.

Bugs fixed in 0.5.0:

- Bug 1029022 - RFE: API for reverse group operations

- Bug 1051869 - [abrt] dnf: comps.py:62:_by_pattern:TypeError: expected string or buffer

- Bug 1061780 - Dnf allows installing conflicting packages

- Bug 1062884 - [api] Allow dnf plugin to set exit code

- Bug 1062889 - [RFE] [api] add class attribute to dnf.cli.Command which will say it is root-only plugin

- Bug 1063666 - [comps] [environments] dnf group remove "GNOME Desktop"

- Bug 1064211 - Dnf should provide logrotate script

- Bug 1064226 - [rfe] cmdline option forcing cache refresh

- Bug 1073859 - [api][rfe] access to dnf.Base.goal_parameters.allow_uninstall

- Bug 1076884 - [py3] highlight characters broken under py3

- Bug 1079519 - [api][rfe] install .rpm files with dnf API

- Bug 1079932 - [api][rfe] public api for getting all packages in a group

- Bug 1080331 - dnf group list fail to run with noroot plugin

- Bug 1080489 - [RFE] dnf exits with an error when at least one srpm is present on the command line

- Bug 1082230 - TypeError in dnf history info <id>

- Bug 1083432 - group is marked as installed, even if install of the packages failed

- Bug 1083767 - dnf documents cached packages in a way which does not agree with reality

- Bug 1084139 - dnf manpage "manipualte" typos

- Bug 1084553 - [doc] dnf docs describe '--best' option in undecipherabke manner

- Bug 1088166 - [doc] DNF doesn't say you need root rights to run dnf update

## 0.4.19 Release Notes

Arriving one week after 0.4.18, the 0.4.19 mainly provides a fix to a traceback in group operations under non-root users.

DNF starts to ship separate translation files (.mo) starting with this release.

Bugs fixed in 0.4.19:

- Bug 1077173 - IOError: [Errno 13] Permission denied: '/var/lib/dnf/groups.json'

- Bug 1078832 - TypeError: '_DownloadErrors' object is not iterable

- Bug 1079621 - Incorrect package count when some packages already downloaded

## 0.4.18 Release Notes

Support for `dnf distro-sync <spec>` finally arrives in this version.

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 deprecation policy.

API changes in 0.4.18:

- `dnf.queries` has been dropped as announced in 0.4.8 Release Notes

- `dnf.exceptions.PackageNotFoundError` has been dropped from API as announced in 0.4.9 Release Notes

- `dnf.Base.install()` no longer has to return the number of marked packages as announced in 0.4.9 Release Notes

API deprecations in 0.4.18:

- `dnf.Base.select_group()` is deprecated now. Please use `group_install()` instead.

API additions in 0.4.18:

- `dnf.Base.group_install()`

- `dnf.Base.group_remove()`

Bugs fixed in 0.4.18:

- Bug 963710 - RFE: allow package specs for distro-sync

- Bug 1067136 - [comps] no way to install optional packages from a group

- Bug 1071212 - dnf doesn't skip unreadable repository files

- Bug 1071501 - [drpm] fallback to full RPM download on drpm failure

## 0.4.17 Release Notes

This release fixes many bugs in the downloads/DRPM CLI area. A bug got fixed preventing a regular user from running read-only operations using `--cacheonly`. Another fix ensures that `metadata_expire=never` setting is respected. Lastly, the release provides three requested API calls in the repo management area.

API additions in 0.4.17:

- `dnf.repodict.RepoDict.all()`

- `dnf.repodict.RepoDict.get_matching()`

- `dnf.repo.Repo.set_progress_bar()`

Bugs fixed in 0.4.17:

- Bug 1059704 - [api] dnf.base.Base.read_comps() fails when there's no comps

- Bug 1058224 - the system cache should be world readable by default

- Bug 1069538 - DNF doesn't support "never" or "-1" for metadata_expire option unlike yum

- Bug 1070598 - problems downloading large files (and counting past 100%)

- Bug 1070710 - dnf.Base.read_comps() fails in Python3, works ok in Python2

- Bug 1071323 - [api] [rfe]: dnf.repo & dnf.repodict API extention

- Bug 1071455 - [i18n] Wrong characters in Japanese translatated message

- Bug 1071501 - [drpm] fallback to full RPM download on drpm failure

- Bug 1071518 - curl error

- Bug 1071677 - [doc] faq suggests it's a good idea to install rawhide packages on stable releases

## 0.4.16 Release Notes

The refactorings from 0.4.15 are introducing breakage causing the background `dnf makecache` runs traceback. This release fixes that.

Bugs fixed in 0.4.16:

- Bug 1069996 - [abrt] dnf: repo.py:312:start:AttributeError: 'NoneType' object has no attribute 'start'

## 0.4.15 Release Notes

Massive refactoring of the downloads handling to provide better API for reporting download progress and fixed bugs are the main things brought in 0.4.15.

API additions in 0.4.15:

- `dnf.exceptions.DownloadError`

- `dnf.Base.download_packages()` now takes the optional progress parameter and can raise `DownloadError`.

- `dnf.callback.Payload`

- `dnf.callback.DownloadProgress`

- `dnf.query.Query.filter()` now also recognizes `provides` as a filter name.

Bugs fixed in 0.4.15:

- Bug 1048788 - [abrt] dnf: __init__.py:183:install:ArchException: Used arch is unknown.

- Bug 1065728 - [doc] Metadata expire configurable per repository

- Bug 1065879 - [API] provides is missing in queries documentation

- Bug 1065959 - dnf tab completion should use "distro-sync" instead of "distribution-synchronization"

- Bug 1066743 - [doc] `dnf clean` should function or warn when run as normal user

## 0.4.14 Release Notes

This quickly follows 0.4.13 to address the issue of crashes when DNF output is piped into another program.

API additions in 0.4.14:

- `Repo.pkgdir`

Bugs fixed in 0.4.14:

- Bug 1062390 - dnf.rpmUtils.arch.getBaseArch() doesn't return identical results to yum's rpmUtils.arch.getBaseArch()

- Bug 1062847 - dnf man page errors

- Bug 1063022 - [abrt] dnf: i18n.py:38:write:UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 12: ordinal not in range(128)

- Bug 1064148 - DNF attempts to remove packages from local file-based repository

## 0.4.13 Release Notes

0.4.13 finally ships support for delta RPMS. Enabling this can save some bandwidth (and use some CPU time) when downloading packages for updates.

Support for bash completion is also included in this version. It is recommended to use the `generate_completion_cache` plugin to have the completion work fast. This plugin will be also shipped with `dnf-plugins-core-0.0.3`.

The keepcache config option has been readded.

Bugs fixed in 0.4.13:

- Bug 909468 - [rfe] delta rpm support

- Bug 1030440 - [RFE] bash completion support

- Bug 1046244 - dnf doesn't keep the downloaded packages in the cache

- Bug 1055051 - things like ' dnf install "kernel-devel-uname-r = 3.12.8-300.fc20.x86_64" ' don't work

- Bug 1056400 - DNF not support url installation for a package

## 0.4.12 Release Notes

This release disables fastestmirror by default as we received many complains about it. There are also several bugfixes, most importantly an issue has been fixed that caused packages installed by Anaconda be removed together with a depending package. It is now possible to use `bandwidth` and `throttle` config values too.

Bugs fixed in 0.4.12:

- Bug 1045737 - [RFE] 'throttle' option.

- Bug 1048468 - dnf --cacheonly list installed tries to download repodata

- Bug 1048488 - AssertionError on invalid error log level

- Bug 1049025 - Incorrect dependency check on removal

- Bug 1051554 - disable fastestmirror by default (and make it configurable)

## 0.4.11 Release Notes

This is mostly a bugfix release following quickly after 0.4.10, with many updates to documentation.

API additions in 0.4.11:

- `Plugin.read_config()`

- `repo.Metadata`

- `repo.Repo.metadata`

API changes in 0.4.11:

- `Conf.pluginpath` is no longer hard coded but depends on the major Python version.

Bugs fixed in 0.4.11:

- Bug 1048402 - [abrt] dnf: cli.py:1521:search:AttributeError: 'module' object has no attribute 'exception'

- Bug 1048572 - dnf resolve failure

- Bug 1048716 - man page does not mention sub command remove

- Bug 1048719 - Minor error in 'dnf --help', using the package name Yum instead of dnf

- Bug 1048988 - [plugins] [api] add a hook for MD refresh

## 0.4.10 Release Notes

0.4.10 is a bugfix release that also adds some long-requested CLI features and extends the plugin support with two new plugin hooks. An important feature for plugin developers is going to be the possibility to register plugin's own CLI command, available from this version.

`dnf history` now recognizes `last` as a special argument, just like other history commands.

`dnf install` now accepts group specifications via the `@` character.

Support for the `--setopt` option has been readded from YUM.

API additions in 0.4.10:

- Command Line Interface Hooks

- `Plugin.name`

- `Plugin.__init__()` now specifies the second parameter as an instance of .cli.Cli

- `Plugin.sack()`

- `Plugin.transaction()`

- `repo.repo_id_invalid()`

API changes in 0.4.10:

- Plugin authors must specify `Plugin.name` when authoring a plugin.

Bugs fixed in 0.4.10:

- Bug 967264 - [plugins] Support post-transaction actions

- Bug 1018284 - [rfe] [api] refactor check for valid id into separate function

- Bug 1035164 - [abrt] dnf-0.4.7-1.fc20: miscutils.py:61:checkSig:OSError: [Errno 2] Adresář nebo soubor neexistuje: '/var/cache/dnf/x86_64/20/updates-testing/packages/kernel-3.11.9-300.fc20.x86_64.rpm'

- Bug 1036147 - [locking] Traceback for dnf search if running under su - USER

- Bug 1036211 - Install groups using @ sign

- Bug 1038403 - [abrt] dnf-0.4.9-1.fc20: base.py:1832:handle_erase:AssertionError

- Bug 1038937 - [plugins] [api] Add hook for metadata download complete event

- Bug 1040255 - dnf show wrong Installed size when install packages

- Bug 1044502 - [abrt] dnf: base.py:125:_add_repo_to_sack:UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 113: ordinal not in range(128)

- Bug 1044981 - [doc] [rfe] support setopt

- Bug 1044999 - [doc] show dependencies during update

## 0.4.9 Release Notes

Several YUM features are revived in this release. `dnf history rollback` now works again. The `history userinstalled` has been added, it displays a list of packages that the user manually selected for installation on an installed system and does not include those packages that got installed as dependencies.

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: replacing a non-leaf package with a conflicting package is achieved by using the `--allowerasing` switch now.

API additions in 0.4.9:

- Plugin Interface

- Logging

- `Base.read_all_repos()`

- `Base.reset()`

- `Base.downgrade()`

- `Base.remove()`

- `Base.upgrade()`

- `Base.upgrade_all()`

- `Conf.pluginpath`

- `Conf.reposdir`

API deprecations in 0.4.9:

- `PackageNotFoundError` is deprecated for public use. Please catch `MarkingError` instead.

- It is deprecated to use `Base.install()` return value for anything. The method either returns or raises an exception.

Bugs fixed in 0.4.9:

- Bug 884615 - RFE: Provide list of packages installed on top of the system

- Bug 963137 - [rfe] perform complex packaging operations as a CLI user

- Bug 991038 - lacks history rollback

- Bug 1032455 - [abrt] dnf-0.4.7-1.fc20: decoder.py:383:raw_decode:ValueError: No JSON object could be decoded

- Bug 1034607 - dnf does not work with media repo

- Bug 1036116 - dnf install failed with exception

## 0.4.8 Release Notes

There are mainly internal changes, new API functions and bugfixes in this release.

Python 3 is fully supported now, the Fedora builds include the Py3 variant. The DNF program still runs under Python 2.7 but the extension authors can now choose what Python they prefer to use.

This is the first version of DNF that deprecates some of its API. Clients using deprecated code will see a message emitted to stderr using the standard Python warnings module. You can filter out `dnf.exceptions.DeprecationWarning` to suppress them.

API additions in 0.4.8:

- `dnf.Base.sack`

- `dnf.conf.Conf.cachedir`

- `dnf.conf.Conf.config_file_path`

- `dnf.conf.Conf.persistdir`

- `dnf.conf.Conf.read()`

- `dnf.package.Package`

- `dnf.query.Query`

- `dnf.subject.Subject`

- `dnf.repo.Repo.__init__()`

- `dnf.sack.Sack`

- `dnf.selector.Selector`

- `dnf.transaction.Transaction`

API deprecations in 0.4.8:

- `dnf.queries` is deprecated now. If you need to create instances of `Subject`, import it from `dnf.subject`. To create `Query` instances it is recommended to use `sack.query()`.

Bugs fixed in 0.4.8:

- Bug 1014563 - Support Python 3 in DNF

- Bug 1029948 - dnf does not show all desktop environments in dnf groups list output

- Bug 1030998 - install doesn't work for '*/binaryname' patterns

- Bug 1030297 - dnf doesn't support http urls

- Bug 1030980 - dnf downgrade PACKAGE, misleading message about possible typo if PACKAGE is not installed

## 0.4.7 Release Notes

We start to publish the DNF API Reference with this release. It is largely incomprehensive at the moment, yet outlines the shape of the documentation and the process the project is going to use to maintain it.

The :ref:upgrade_requirements_on_install <upgrade_requirements_on_install_dropped> configuration option was dropped.

Bugs fixed in 0.4.7:

- Bug 1019170 - handling wildcards in the version

- Bug 1024776 - librepo version mismatch (no attribute 'LRO_FASTESTMIRRORCACHE')

- Bug 1025650 - [abrt] dnf-0.4.6-1.fc20: i18n.py:119:ucd:UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 51: ordinal not in range(128)

## 0.4.6 Release Notes

0.4.6 brings two new major features. Firstly, it is the revival of `history undo`, so transactions can be reverted now. Secondly, DNF will now limit the number of installed kernels and installonly packages in general to the number specified by installonly_limit configuration option.

DNF now supports the `group summary` command and one-word group commands no longer cause tracebacks, e.g. `dnf grouplist`.

There are vast internal changes to `dnf.cli`, the subpackage that provides CLI to DNF. In particular, it is now better separated from the core.

The hawkey library used against DNF from with this versions uses a recent RPMDB loading optimization in libsolv that shortens DNF startup by seconds when the cached RPMDB is invalid.

We have also added further fixes to support Python 3 and enabled librepo's fastestmirror caching optimization to tighten the download times even more.

Bugs fixed in 0.4.6:

- Bug 878348 - 'dnf history undo' support missing

- Bug 880524 - [kernel] managing multiple kernel packages

- Bug 1019957 - 'dnf groups summary' traceback (global name 'patterns' is not defined)

- Bug 1020101 - 'dnf grouplist' throws NameError

- Bug 1020934 - traceback in "dnf repolist"

- Bug 1023486 - groups operations failing due to a libcomps API change in its latest version (KeyError: 'en_US.UTF-8')

## 0.4.5 Release Notes

A serious bug causing tracebacks during package downloads made it into 0.4.4 and this release contains a fix for that. Also, a basic proxy support has been readded now.

Bugs fixed in 0.4.5:

- Bug 1021087 - traceback during download after a transaction with obsoletes

## 0.4.4 Release Notes

The initial support for Python 3 in DNF has been merged in this version. In practice one can not yet run the `dnf` command in Py3 but the unit tests already pass there. We expect to give Py3 and DNF heavy testing during the Fedora 21 development cycle and eventually switch to it as the default. The plan is to drop Python 2 support as soon as Anaconda is running in Python 3.

Minor adjustments to allow Anaconda support also happened during the last week, as well as a fix to a possibly severe bug that one is however not really likely to see with non-devel Fedora repos:

- Bug 1017278 - dnf does not notice file conflicts

## 0.4.3 Release Notes

This is an early release to get the latest DNF out with the latest librepo fixing the Too many open files bug.

In Fedora, the spec file has been updated to no longer depend on precise versions of the libraries so in the future they can be released independently.

This release sees the finished refactoring in error handling during basic operations and adds support for `group remove` and `group info` commands, i.e. the following two bugs:

- Bug 1013764 - DNF group remove doesn't work

- Bug 1013773 - DNF group info doesn't work

## 0.4.2 Release Notes

DNF now downloads packages for the transaction in parallel with progress bars updated to effectively represent this. Since so many things in the downloading code were changing, we figured it was a good idea to finally drop urlgrabber dependency at the same time. Indeed, this is the first version that doesn't require urlgrabber for neither build nor run.

Similarly, since librepo started to support this, downloads in DNF now use the fastest mirrors available by default.

The option to specify repositories' costs has been readded.

Internally, DNF has seen first part of ongoing refactorings of the basic operations (install, update) as well as a couple of new API methods supporting development of extensions.

These bugzillas are fixed in 0.4.2:

- Bug 909744 - [rfe] support parallel downloads

- Bug 984529 - [rfe] fastest mirror

- Bug 967798 - [RFE] repositories costs

- Bug 995459 - conflicting requests when trying to install locally available packages

## 0.4.1 Release Notes

The focus of this release was to support our efforts in implementing the DNF Payload for Anaconda, with changes on the API side of things (better logging, new `Base.reset()` method).

Support for some irrelevant config options has been dropped (`kernelpkgnames`, `exactarch`, `rpm_check_debug`). We also no longer detect metalinks in the `mirrorlist` option (see Fedora bug 948788).

DNF is on its way to drop the urlgrabber dependency and the first set of patches towards this goal is already in.

Expect the following bugs to go away with upgrade to 0.4.1:

- Bug 998859 - "dnf upgrade --best" will always install 64bits package when 32bit package is installed

- Bug 1006366 - dnf makecache runs on LiveCD

- Bug 1008444 - confusing message when removing packages

- Bug 1003220 - [abrt] dnf-0.3.11-1.git7d717c7.fc19: output.py:838:_enc:TypeError: object of type 'NoneType' has no len()

## 0.4.0 Release Notes

The new minor version brings many internal changes to the comps code, most comps parsing and processing is now delegated to libcomps by Jindřich Luža.

The `overwrite_groups` config option has been dropped in this version and DNF acts if it was 0, that is groups with the same name are merged together.

The currently supported groups commands (`group list` and `group install`) are documented on the manpage now.

The 0.4.0 version is the first one supported by the DNF Payload for Anaconda and many changes since 0.3.11 make that possible by cleaning up the API and making it more sane (cleanup of `yumvars` initialization API, unifying the RPM transaction callback objects hierarchy, slimming down `dnf.rpmUtils.arch`, improved logging).

Fixes for the following are contained in this version:

- Bug 997403 - Error message instructs users to invoke 'yum' rather than 'dnf' to fix a problem

- Bug 1002508 - Updated to install any packages "An Curl handle error: Unsupported protocol"

- Bug 1002798 - Error when checking librepo explicit requires

## 0.3.11 Release Notes

The default multilib policy configuration value is `best` now. This does not pose any change for the Fedora users because exactly the same default had been previously achieved by a setting in `/etc/dnf/dnf.conf` shipped with the Fedora package.

An important fix to the repo module speeds up package downloads again is present in this release. The full list of fixes is:

- Bug 979042 - Slow download of packages

- Bug 977753 - Repository "@System" instead of "fedora"

- Bug 996138 - [abrt] install_grouplist:UnicodeDecodeError during 'dnf group install'

- Bug 993916 - 'upgrade' command displays old version numbers in summary, rather than new version numbers

## 0.3.10 Release Notes

The only major change is that `skip_if_unavailable` is enabled by default now.

A minor release otherwise, mainly to get a new version of DNF out that uses a fresh librepo. The following issues are now a thing of the past:

- Bug 977661 - [abrt] Ctrl+C ends up with a TypeError traceback involving Base.__exit__() and Repo._handle_load()

- Bug 984483 - default to skip_if_unavailable=True

- Bug 986545 - dnf mismatching it's librepo dep in rawhide

## 0.3.9 Release Notes

This is a quick bugfix release dealing with reported bugs and tracebacks:

- Bug 964584 - dnf doesn't replace $releasever/$basearch in mirror url

- Bug 979942 - [abrt] cli.py:1015:_configure_repos:KeyError: <repo id>

- Bug 980227 - [locking] OSError when a long running transaction gets metadata files written over by a concurrent 'dnf makecache'

- Bug 981310 - NameError: global name 'to_utf8' is not defined

## 0.3.8 Release Notes

A new locking module has been integrated in this version, clients should see the message about DNF lock being taken less often.

Panu Matilainen has submitted many patches to this release to cleanup the RPM interfacing modules.

The following bugs are fixed in this release:

- Bug 908491 - [rfe] list recent

- Bug 968159 - repo_rpmmd.c: base:xml attr in <location> is ignored

- Bug 974427 - dnf fails on all commands with fatal error: "global name 'os' is not defined"

- Bug 974866 - dnf crashes if neither baseurl nor mirrorlist are defined

- Bug 976652 - [abrt] UnicodeEncodeError with 'dnf info checkpolicy'

- Bug 975858 - dnf can't install in an empty installroot

## 0.3.7 Release Notes

This is a bugfix release:

- Bug 916662 - dnf remove wants to install new packages

- Bug 967732 - [abrt] dnf-0.3.6-1.git24ce938.fc19: __init__.py:364:hashopen:DBNoSuchFileError: (2, 'Datei oder Verzeichnis nicht gefunden')

## 0.3.6 Release Notes

This is a bugfix release, including the following fixes:

- Bug 966372 - dnf prints an empty python list after running without root privileges

- Bug 965410 - "dnf clean expire-cache" does not have any effect

- Bug 963627 - dnf shows way over 100% in its progress bar

- Bug 965114 - When running dnf using file:/// as the media, it tries to erase packages in file:///

- Bug 964467 - group install is broken

- Bug 963680 - dnf dies with a traceback during update

- Bug 963133 - name is misprinted when package is not found

## 0.3.5 Release Notes

Besides few fixed bugs this version should not present any differences for the user. On the inside, the transaction managing mechanisms have changed drastically, bringing code simplification, better maintainability and better testability.

In Fedora, there is a change in the spec file effectively preventing the makecache timer from running immediately after installation. The timer service is still enabled by default, but unless the user starts it manually with `systemctl start dnf-makecache.timer` it will not run until after the first reboot. This is in alignment with Fedora packaging best practices.

The following bugfixes are included in 0.3.5:

- Bug 958452 - dnf update Produces Log Messages Involving "ts_done state"

- Bug 959990 - dnf dist-sync recommended in manual page but is missing from dnf's command line options

- Bug 961549 - [abrt] dnf-0.3.4-1.git03fd687.fc19: __init__.py:826:perform:Exception: (10, 'Error HTTP/FTP status code: 404', 404)

- Bug 962188 - obsoletes sometimes result in "ERROR with transaction check vs depsolve"

## 0.3.4 Release Notes

0.3.4 is the first DNF version since the fork from YUM that is able to manipulate the comps data. In practice, `dnf group install <group name>` works again. No other group commands are supported yet.

Support for `librepo-0.0.4` and related cleanups and extensions this new version allows are included (see the buglist below)

This version has also improved reporting of obsoleted packages in the CLI (the YUM-style "replacing <package-nevra>" appears in the textual transaction overview).

The following bugfixes are included in 0.3.4:

- Bug 887317 - Dnf should beter report upgrades via obsoletes.

- Bug 914919 - DNF does not have group install

- Bug 922667 - the cronned 'dnf makecache' runs should give up quickly if there's network/checksumming issues

## 0.3.3 Release Notes

The improvements in 0.3.3 are only API changes to the logging. There is a new module `dnf.logging` that defines simplified logging structure compared to YUM, with fewer logging levels and simpler usage for the developers. The RPM transaction logs are no longer in `/var/log/dnf.transaction.log` but in `/var/log/dnf.rpm.log` by default.

The exception classes were simplified and moved to `dnf.exceptions`.

The following bugs are fixed in 0.3.3:

- Bug 950722 - [abrt] dnf-0.3.2-1.gitf3818b4.fc20: queries.py:179:_construct_result:AttributeError: 'NoneType' object has no attribute 'query'

- Bug 903775 - Update command is deprecated but nomenclature still being used

## 0.3.2 Release Notes

The major improvement in this version is in speeding up syncing of repositories using metalink by looking at the repomd.xml checksums. This effectively lets DNF cheaply refresh expired repositories in cases where the original has not changed: for instance the main Fedora repository is refreshed with one 30 kB HTTP download. This functionality is present in the current YUM but hasn't worked in DNF since 3.0.0.

Otherwise this is mainly a release fixing bugs and tracebacks. The following reported bugs are fixed:

- Bug 947258 - dnf doesn't erase excluded packages

- Bug 889202 - [rfe] [repos] add support for skip_if_unavailable in repository config

- Bug 923384 - DNF uses yum web signature

## 0.3.1 Release Notes

0.3.1 brings mainly changes to the automatic metadata synchronization. In Fedora, `dnf makecache` is triggered via SystemD timers now and takes an optional `background` extra-argument to run in resource-considerate mode (no syncing when running on laptop battery, only actually performing the check at most once every three hours). Also, the IO and CPU priorities of the timer-triggered process are lowered now and shouldn't as noticeably impact the system's performance.

The administrator can also easily disable the automatic metadata updates by setting metadata_timer_sync to 0.

The default value of metadata_expire was increased from 6 hours to 48 hours. In Fedora, the repos usually set this explicitly so this change is not going to cause much impact.

The following reported issues are fixed in this release:

- Bug 916657 - dnf remove wants to downgrade packages; fails on transaction check

- Bug 921294 - dnf downgrade failure

- Bug 922521 - DNF crashes when passing packages to it via pipe

- Bug 926871 - [abrt] download_packages:AttributeError: 'Repo' object has no attribute 'cache'

- Bug 878826 - [rfe] dnf could use systemd timer unit rather than crontabs

- Bug 922664 - an option for disabling the regular metadata sync

- Bug 892064 - hourly dnf makecache too frequent, also consider using ionice

- Bug 919769 - dnf runs makecache hourly despite laptop power state