#!/bin/zsh
setopt extendedglob nomatch

parse() {
  local pkgdata
  IFS=- read -A pkgdata <<<"${${1:t}%.pkg.tar.*z}"
  pkgname=${(j:-:)pkgdata[1,-4]}
  epoch=
  pkgver=${pkgdata[-3]}
  pkgrel=${pkgdata[-2]}
  arch=${pkgdata[-1]}

  IFS=: read -A pkgdata <<<$pkgver
  if (( ${#pkgdata} > 1 )); then
    epoch=${pkgdata[1]}:
    pkgver=${pkgdata[2]}
  fi
}

tartf() {
  local pkgname epoch pkgver pkgrel arch tag=$1 pkgfile="$2"
  parse $pkgfile
  echo "=== $tag $pkgname ${epoch}${pkgver}-${pkgrel} $arch ==="
  bsdtar tf $pkgfile | sort
}

function {
  local pkgname epoch pkgver pkgrel arch
  for pkg in *.pkg.tar.*z(N); do
    parse $pkg
    otherpkg=( /srv/repo/pool/*/${pkgname}-[^-]##-[^-]##-${arch}.pkg.tar.*z(Nom[1]) )
    if [[ -n $otherpkg ]]; then
      sdiff -sw $COLUMNS <(tartf Repo $otherpkg) <(tartf Our $pkg)
      echo
    fi
  done
}