pkgtreediff: RPM package tree diff tool

[ gpl, library, program, utility ] [ Propose Tags ]

Tool for comparing RPM packages and versions in OS dist trees or instances.


[Skip to Readme]
Versions [RSS] [faq] 0.1, 0.2, 0.2.1, 0.3, 0.4, 0.4.1, 0.5.0
Change log CHANGELOG.md
Dependencies async, base (<5), directory, extra, filepath, Glob, http-client (>=0.5.0), http-client-tls, http-common (<0.8.3.4), http-directory (>=0.1.4 && <0.1.6 || >=0.1.8), koji, pkgtreediff, rpm-nvr (>=0.1.1), semigroups, simple-cmd (>=0.1.4), simple-cmd-args, text [details]
License GPL-3.0-only
Copyright 2019-2021 Jens Petersen
Author Jens Petersen
Maintainer juhpetersen@gmail.com
Category Utility
Home page https://github.com/juhp/pkgtreediff
Bug tracker https://github.com/juhp/pkgtreediff/issues
Source repo head: git clone https://github.com/juhp/pkgtreediff.git
Uploaded by JensPetersen at 2021-11-03T06:17:00Z
Distributions Fedora:0.4.1, LTSHaskell:0.4.1, NixOS:0.4.1, Stackage:0.5.0
Executables pkgtreediff
Downloads 1716 total (43 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2021-11-03 [all 1 reports]

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Candidates


Readme for pkgtreediff-0.5.0

[back to package description]

pkgtreediff

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

Containers

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"
libfsverity-1.4-4.fc35.x86_64
mpdecimal-2.5.1-2.fc35.x86_64

Package trees

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

$ pkgtreediff --ignore-release https://dl.fedoraproject.org/pub/fedora/linux/releases/{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-1.2.162.0-2.fc34.src
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

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

Hosts

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.

Koji

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.

Builds

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 https://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/. For example "1.2.1~rc1" < "1.2.1" (greater for ^).