#!/bin/bash -e # -*- coding: utf-8 -*- # Copyright (C) 2011, 2012 Michał Masłowski # # 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 . . $(librelib conf.sh) load_files libretools check_vars libretools WORKDIR for arg in "$@" ; do case "$arg" in -h|--h|--he|--hel|--help|-\?) echo 'Usage: libreaddiff repo [arch] 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" -o "$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'