[devtools,2/3] makerepropkg: add support to check unreproducible packages using diffoscope

Message ID 20191216204609.111647-3-eschwartz@archlinux.org
State Accepted
Headers show
Series
  • makerepropkg improvements
Related show

Commit Message

Michael Straube via arch-projects Dec. 16, 2019, 8:46 p.m. UTC
Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
---
 doc/makerepropkg.1.asciidoc |  3 +++
 makerepropkg.in             | 14 +++++++++++---
 2 files changed, 14 insertions(+), 3 deletions(-)

Comments

Michael Straube via arch-projects Dec. 16, 2019, 8:53 p.m. UTC | #1
Please add the new option to zsh_completions.in

Patch

diff --git a/doc/makerepropkg.1.asciidoc b/doc/makerepropkg.1.asciidoc
index 7d68e5e..301b73e 100644
--- a/doc/makerepropkg.1.asciidoc
+++ b/doc/makerepropkg.1.asciidoc
@@ -26,6 +26,9 @@  link:https://reproducible-builds.org/[Reproducible Builds] project.
 Options
 -------
 
+*-d*::
+	If packages are not reproducible, compare them using diffoscope.
+
 *-c*::
 	Set the pacman cache directory.
 
diff --git a/makerepropkg.in b/makerepropkg.in
index 2b0945e..60fee95 100755
--- a/makerepropkg.in
+++ b/makerepropkg.in
@@ -29,6 +29,7 @@  declare -a buildenv buildopts installed installpkgs
 archiveurl='https://archive.archlinux.org/packages'
 buildroot=/var/lib/archbuild/reproducible
 chroot=testenv
+diffoscope=0
 
 parse_buildinfo() {
     local line var val
@@ -94,14 +95,16 @@  package, including the .PKGINFO as well as the buildinfo.
 For more details see https://reproducible-builds.org/
 
 OPTIONS
+    -d            Run diffoscope if the package is unreproducible
     -c <dir>      Set pacman cache
     -M <file>     Location of a makepkg config file
     -h            Show this usage message
 __EOF__
 }
 
-while getopts 'M:c:h' arg; do
+while getopts 'dM:c:h' arg; do
     case "$arg" in
+        d) diffoscope=1 ;;
         M) archroot_args+=(-M "$OPTARG") ;;
         c) cache_dirs+=("$OPTARG") ;;
         h) usage; exit 0 ;;
@@ -177,12 +180,17 @@  arch-nspawn "${buildroot}/${chroot}" \
 if (( $? == 0 )); then
     msg2 "built succeeded! built packages can be found in ${buildroot}/${chroot}/pkgdest"
     msg "comparing artifacts..."
-    if cmp -s "${pkgfile}" "${buildroot}/${chroot}/pkgdest/${pkgfile##*/}"; then
+
+    comparefiles=("${pkgfile}" "${buildroot}/${chroot}/pkgdest/${pkgfile##*/}")
+    if cmp -s "${comparefiles[@]}"; then
         msg2 "Package successfully reproduced!"
         exit 0
     else
         warning "Package is not reproducible. :("
-        sha256sum "${pkgfile}" "${buildroot}/${chroot}/pkgdest/${pkgfile##*/}"
+        sha256sum "${comparefiles[@]}"
+        if (( diffoscope )); then
+            diffoscope "${comparefiles[@]}"
+        fi
     fi
 fi