#!/usr/bin/env bash # -*- coding: utf-8 -*- # Copyright (C) 2011-2012 Michał Masłowski # Copyright (C) 2012 Daniel Molina (lluvia) # # License: GNU GPLv3+ # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . set -e . $(librelib conf.sh) load_files libretools check_vars libretools WORKDIR for arg in "$@" ; do case "$arg" in -h|--h|--he|--hel|--help|-\?) { print 'Usage: %s repo [arch]' "${0##*/}" echo prose "This script outputs a diff of package names and versions in repo between pacman's sync db and abslibre checkout." } >&2 exit 0 ;; esac done # The repo to find missing packages in. repo=$1 # The arch to check in Arch repos, other will have all arches checked. arch=${2:-mips64el} # A Python tuple of repos which don't have arch=any packages. archrepos='("core", "extra", "community")' diff -U0 \ <( ( cd /var/lib/pacman/sync for f in $repo.db ; do tar xOf $f | python -c 'import sys arch = None name = None version = None it = iter(sys.stdin) try: while True: line = next(it) if line == "%ARCH%\n": arch = next(it) if arch == "'"$arch"'\n" or "'$repo'" not in '"$archrepos"': print("%s-%s" % (name.strip(), version.strip())) if line == "%NAME%\n": name = next(it) if line == "%VERSION%\n": version = next(it) except StopIteration: pass ' done ) | sort ) \ <( ( cd "${WORKDIR}/abslibre" # Needed to not include pkgnames specific to other arches. CARCH=$arch for f in $repo/* ; do load_PKGBUILD "$f/PKGBUILD" || continue is_here=false for arc in ${arch[@]} ; do if [[ "$arc" == "any" ]] || [[ "$arc" == "$CARCH" ]] ; then is_here=true break fi done if [[ "$is_here" == "true" ]] ; then for name in "${pkgname[@]}" ; do if [[ -z "$epoch" ]] ; then echo $name-$pkgver-$pkgrel else echo $name-$epoch:$pkgver-$pkgrel fi done fi done ) | sort ) | sed -rn 's/^[+-][^+-].+$/&/p'