GPL-3.0-only licensed by Jens Petersen
Maintained by
This version can be pinned in stack with:pkgtreediff-0.5.0@sha256:a608f4cfe4c722928d03fd73943f76188326837f5c791b82f10a0da7737d3287,2551

Module documentation for 0.5.0


Hackage GPL-3 license Stackage Lts Stackage Nightly

pkgtreediff compares the NVRs (name-version-release) of RPM packages in OS package trees and/or installations:

  • An OS tree can be referenced by an url or directory containing a tree of rpm files.
  • A file containing a list(s) of rpm NVRs can also be compared.
  • Commands can also be used to get installed RPMs, eg:
    • "rpm -qa"
    • "ssh myhost rpm -qa"
    • "podman run --rm myimage rpm -qa"
  • A koji tag: koji://tag@KojiHubUrl (or koji://tag@fedora)

Usage examples


Compare the content of two rpm based containers versions, filtering for new added packages:

$ pkgtreediff --new "podman run --rm fedora:34 rpm -qa" "podman run --rm fedora:35 rpm -qa"

Package trees

Package source changes between Fedora 33 and 34 Server at GA (ignoring release bumps):

$ pkgtreediff --ignore-release{33,34}/Server/source/tree/Packages/
ModemManager.src: 1.14.2-1.fc33 -> 1.14.10-2.fc34
NetworkManager.src: 1.26.2-2.fc33 -> 1.30.2-1.fc34
PackageKit.src: 1.2.1-1.fc33 -> 1.2.3-1.fc34
abrt.src: 2.14.4-6.fc33 -> 2.14.5-2.fc34
bash.src: 5.0.17-2.fc33 -> 5.1.0-2.fc34
bash-completion.src: 2.8-9.fc33 -> 2.11-2.fc34
- bcache-tools-1.0.8-19.fc33.src
bcm283x-firmware.src: 20201008-2.63b1922.fc33 -> 20210407-1.8c7c524.fc34
bind.src: 9.11.23-1.fc33 -> 9.16.11-5.fc34
binutils.src: 2.35-10.fc33 -> 2.35.1-41.fc34
cockpit.src: 229-1.fc33 -> 241-1.fc34
colord.src: 1.4.4-5.fc33 -> 1.4.5-2.fc34
+ compsize-1.5-1.fc34.src
conmon.src: 2.0.21-3.fc33 -> 2.0.27-1.fc34
container-selinux.src: 2.145.0-1.fc33 -> 2.158.0-1.gite78ac4f.fc34
containernetworking-plugins.src: 0.8.7-1.fc33 -> 0.9.1-4.fc34
+ containers-common-1-13.fc34.src
- copy-jdk-configs-3.7-7.fc33.src
- createrepo_c-0.15.11-4.fc33.src
+ criu-3.15-3.fc34.src
crun.src: 0.15-5.fc33 -> 0.18-5.fc34
vim.src: 8.2.1770-1.fc33 -> 8.2.2637-1.fc34
+ vulkan-loader-
wayland.src: 1.18.0-2.fc33 -> 1.19.0-1.fc34
webkit2gtk3.src: 2.30.1-1.fc33 -> 2.32.0-2.fc34
wget.src: 1.20.3-8.fc33 -> 1.21.1-2.fc34
zchunk.src: 1.1.5-3.fc33 -> 1.1.9-2.fc34
zstd.src: 1.4.5-5.fc33 -> 1.4.9-1.fc34

Updated: 330
Downgraded: 0
Added: 63
Deleted: 98
Arch changed: 0
Total packages: 932 -> 897


Compare the packages on local and another host:

pkgtreediff "rpm -qa" "ssh otherhost rpm -qa"

Any types of sources can be compared, together with the use of flags.


Compare koji tags using the koji://tag@kojihub syntax:

pkgtreediff koji://dist-c8-updates-build@centos koji://dist-c8_1-updates-build@centos

Please avoid using koji tag to compare full releases as it is more efficient to query URL or CMD trees.


pkgtreediff is packaged in Fedora.

Older builds are also available in copr for Fedora, EPEL, and OpenSuSE (more details).

RPM version ordering

pkgtreediff use the rpm-nvr library implementation of the rpmvercmp() algorithm, though it has not been verified to behave identically.

RPM version ordering is somewhat involved For example “1.2.1~rc1” < “1.2.1” (greater for ^).



0.5.0 (2021-11-03)

  • use rpm-nvr library for NVRA type (API changes) and rpmVerCompare to order ver-rel’s
  • add –downgraded filter
  • add –subdir
  • remove –ignore-arch

0.4.1 (2021-04-19)

  • expose a library in Distribution.RPM.PackageTreeDiff (@juhp)
  • full correct rpm version comparison (ie handling ^ and ~) (@juhp)
  • new koji://tag@koji.hub method (@TristanCacqueray)
  • rst summary output format (@TristanCacqueray)

0.4 (2020-03-13)

  • support files of lists of rpms
  • support commands for getting package NVRs
    • to run “rpm -qa” etc, locally or remotely
    • note commands must be quoted and include a space to be recognized
  • fix sorting of packages by rpmvercmp() style ordering (#3) (fixes cumulative trees like CentOS for example)
  • add –timeout option for http (#1)

0.3 (2019-06-06)

  • add –pattern for href filename globbing
  • use http-directory-0.1.4 for httpDirectory basic filtering

0.2.1 (2019-06-06)

  • better recursion handling and href filtering

0.2 (2019-06-05)

  • print summary
  • add –ignore-arch

0.1 (2019-06-04)

  • –ignore-version option

0.0 (2019-05-31)

  • Initially created.
  • –ignore-release option