diffpkg - diff repo vs. build package
Include a new tool as alternative to checkpkg, this runs diffoscope on a newly build package and the current repository package. This can be useful for finding new files / binaries.
This commit is contained in:
parent
f42b032c5e
commit
11edc45048
|
@ -6,6 +6,7 @@ archrelease
|
||||||
bash_completion
|
bash_completion
|
||||||
checkpkg
|
checkpkg
|
||||||
commitpkg
|
commitpkg
|
||||||
|
diffpkg
|
||||||
finddeps
|
finddeps
|
||||||
lddd
|
lddd
|
||||||
makechrootpkg
|
makechrootpkg
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -12,6 +12,7 @@ IN_PROGS = \
|
||||||
checkpkg \
|
checkpkg \
|
||||||
commitpkg \
|
commitpkg \
|
||||||
crossrepomove\
|
crossrepomove\
|
||||||
|
diffpkg \
|
||||||
finddeps \
|
finddeps \
|
||||||
find-libdeps \
|
find-libdeps \
|
||||||
lddd \
|
lddd \
|
||||||
|
@ -76,6 +77,7 @@ MANS = \
|
||||||
doc/makechrootpkg.1 \
|
doc/makechrootpkg.1 \
|
||||||
doc/lddd.1 \
|
doc/lddd.1 \
|
||||||
doc/checkpkg.1 \
|
doc/checkpkg.1 \
|
||||||
|
doc/diffpkg.1 \
|
||||||
doc/offload-build.1 \
|
doc/offload-build.1 \
|
||||||
doc/sogrep.1 \
|
doc/sogrep.1 \
|
||||||
doc/makerepropkg.1 \
|
doc/makerepropkg.1 \
|
||||||
|
|
|
@ -0,0 +1,125 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
shopt -s extglob
|
||||||
|
|
||||||
|
m4_include(lib/common.sh)
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<- _EOF_
|
||||||
|
Usage: ${BASH_SOURCE[0]##*/} [OPTIONS]
|
||||||
|
|
||||||
|
Searches for a locally built package corresponding to the PKGBUILD, and
|
||||||
|
downloads the last version of that package from the Pacman repositories.
|
||||||
|
It then compares them with diffoscope.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-M, --makepkg-config Set an alternate makepkg configuration file
|
||||||
|
-h, --help Show this help text
|
||||||
|
_EOF_
|
||||||
|
}
|
||||||
|
|
||||||
|
MAKEPKG_CONF=/etc/makepkg.conf
|
||||||
|
|
||||||
|
# option checking
|
||||||
|
while (( $# )); do
|
||||||
|
case $1 in
|
||||||
|
-h|--help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-M|--makepkg-config)
|
||||||
|
MAKEPKG_CONF="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
-*,--*)
|
||||||
|
die "invalid argument: %s" "$1"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Source makepkg.conf; fail if it is not found
|
||||||
|
if [[ -r "${MAKEPKG_CONF}" ]]; then
|
||||||
|
# shellcheck source=makepkg-x86_64.conf
|
||||||
|
source "${MAKEPKG_CONF}"
|
||||||
|
else
|
||||||
|
die "${MAKEPKG_CONF} not found!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Source user-specific makepkg.conf overrides
|
||||||
|
if [[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf" ]]; then
|
||||||
|
# shellcheck source=/dev/null
|
||||||
|
source "${XDG_CONFIG_HOME:-$HOME/.config}/pacman/makepkg.conf"
|
||||||
|
elif [[ -r "$HOME/.makepkg.conf" ]]; then
|
||||||
|
# shellcheck source=/dev/null
|
||||||
|
source "$HOME/.makepkg.conf"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f PKGBUILD ]]; then
|
||||||
|
die 'This must be run in the directory of a built package.'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# shellcheck source=PKGBUILD.proto
|
||||||
|
. ./PKGBUILD
|
||||||
|
if [[ ${arch[0]} == 'any' ]]; then
|
||||||
|
CARCH='any'
|
||||||
|
fi
|
||||||
|
|
||||||
|
STARTDIR=$(pwd)
|
||||||
|
trap 'rm -rf $TEMPDIR' EXIT INT TERM QUIT
|
||||||
|
TEMPDIR=$(mktemp -d --tmpdir diffpkg-script.XXXX)
|
||||||
|
|
||||||
|
for _pkgname in "${pkgname[@]}"; do
|
||||||
|
comparepkg=$_pkgname
|
||||||
|
pkgurl=
|
||||||
|
target_pkgver=$(get_full_version "$_pkgname")
|
||||||
|
if ! pkgfile=$(find_cached_package "$_pkgname" "$target_pkgver" "$CARCH"); then
|
||||||
|
die 'tarball not found for package: %s' "${_pkgname}-$target_pkgver"
|
||||||
|
fi
|
||||||
|
|
||||||
|
ln -s "$pkgfile" "$TEMPDIR"
|
||||||
|
|
||||||
|
if (( $# )); then
|
||||||
|
case $1 in
|
||||||
|
*://*)
|
||||||
|
pkgurl=$1 ;;
|
||||||
|
/*|*/*)
|
||||||
|
pkgurl=$(readlink -m "$1") ;;
|
||||||
|
*.pkg.tar*)
|
||||||
|
pkgurl=$1 ;;
|
||||||
|
'')
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
comparepkg=$1 ;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
[[ -n $pkgurl ]] || pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$comparepkg") ||
|
||||||
|
die "Couldn't download previous package for %s." "$comparepkg"
|
||||||
|
|
||||||
|
oldpkg=${pkgurl##*/}
|
||||||
|
|
||||||
|
if [[ ${oldpkg} = "${pkgfile##*/}" ]]; then
|
||||||
|
die "The built package (%s) is the one in the repo right now!" "$_pkgname"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $pkgurl = file://* || ( $pkgurl = /* && -f $pkgurl ) ]]; then
|
||||||
|
ln -s "${pkgurl#file://}" "$TEMPDIR/$oldpkg"
|
||||||
|
elif [[ -f "$PKGDEST/$oldpkg" ]]; then
|
||||||
|
ln -s "$PKGDEST/$oldpkg" "$TEMPDIR/$oldpkg"
|
||||||
|
elif [[ -f "$STARTDIR/$oldpkg" ]]; then
|
||||||
|
ln -s "$STARTDIR/$oldpkg" "$TEMPDIR/$oldpkg"
|
||||||
|
else
|
||||||
|
curl -fsLC - --retry 3 --retry-delay 3 -o "$TEMPDIR/$oldpkg" "$pkgurl"
|
||||||
|
fi
|
||||||
|
|
||||||
|
diffoscope $TEMPDIR/$oldpkg $pkgfile
|
||||||
|
done
|
|
@ -0,0 +1,33 @@
|
||||||
|
diffpkg(1)
|
||||||
|
===========
|
||||||
|
|
||||||
|
Name
|
||||||
|
----
|
||||||
|
diffpkg - Diffoscope the current build package with the repository version
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
--------
|
||||||
|
diffpkg
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Searches for a locally built package corresponding to the PKGBUILD, and
|
||||||
|
downloads the last version of that package from the Pacman repositories.
|
||||||
|
It then compares them with diffoscope.
|
||||||
|
|
||||||
|
Options
|
||||||
|
-------
|
||||||
|
|
||||||
|
*-M, --makepkg-config*::
|
||||||
|
Set an alternate makepkg configuration file.
|
||||||
|
|
||||||
|
*-h, --help*::
|
||||||
|
Show a help text
|
||||||
|
|
||||||
|
See Also
|
||||||
|
--------
|
||||||
|
|
||||||
|
linkman:find-libprovides[1]
|
||||||
|
|
||||||
|
include::footer.asciidoc[]
|
Loading…
Reference in New Issue