diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-14 13:42:30 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-14 13:42:30 +0000 |
commit | 75808db17caf8b960b351e3408e74142f4c85aac (patch) | |
tree | 7989e9c09a4240248bf4658a22208a0a52d991c4 /private/refresh-virtual-packages-data | |
parent | Initial commit. (diff) | |
download | lintian-75808db17caf8b960b351e3408e74142f4c85aac.tar.xz lintian-75808db17caf8b960b351e3408e74142f4c85aac.zip |
Adding upstream version 2.117.0.upstream/2.117.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'private/refresh-virtual-packages-data')
-rwxr-xr-x | private/refresh-virtual-packages-data | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/private/refresh-virtual-packages-data b/private/refresh-virtual-packages-data new file mode 100755 index 0000000..d301373 --- /dev/null +++ b/private/refresh-virtual-packages-data @@ -0,0 +1,147 @@ +#!/bin/sh +# refresh-virtual-packages-data -- Refresh data about font packages in Debian + +# Copyright (C) 2008, 2009 Raphael Geissert <atomo64@gmail.com> +# Copyright (C) 2017 Chris Lamb <lamby@debian.org> +# +# This file 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 2 of the License, or +# (at your option) any later version. +# +# This file 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 +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this file. If not, see <http://www.gnu.org/licenses/>. + +set -e + +# Ensure the sort order is stable. +LC_ALL=C; export LC_ALL + +if [ -z "$1" ]; then + printf "Usage: %s <path-to-data> [<packages>]\n" "$(basename "$0")" + cat <<INFO + +If <packages> is specified, it should be the path to the Packages file +from the current unstable distribution. It will be used to find all +font files already packaged for Debian and update the list of known +font files and the packages that contain them. <path-to-data> should +be the path to the root of the Lintian data directory to update. + +If the Packages file is not specified, the script will download the +following files from a mirror. The mirror can be specified with the +DEB_MIRROR environment variable. If it is not set, the default is +http://deb.debian.org/debian. + +* main/binary-i386/Packages.gz + +Any necessary special parameters for wget can be set via the +environment variable WGET_ARGS. The default arguments are -nv. + +To set additional virtual packages to be added to the list as Keep entries +list them in the VIRTUAL_PACKAGES environment variable. + +INFO + exit +fi + +readonly lintian_data="$(readlink -f "$1")" +if [ -n "$2" ] ; then + packages="$(readlink -f "$2")" +fi + +[ -d "$lintian_data" ] || { + printf "%s is not a directory, aborting" "$lintian_data" >&2 + exit 1 +} + +readonly workdir="$(mktemp -d)" + +cleanup () { + [ ! -d "$workdir" ] || rm -rf "$workdir" +}; trap cleanup EXIT + +mirror="${DEB_MIRROR:=http://deb.debian.org/debian}" +WGET_ARGS="${WGET_ARGS:=-nv}" +wget() { + echo wget "$mirror"/"$1" + /usr/bin/wget $WGET_ARGS -O "$workdir/$(basename "$1")" "$mirror"/"$1" +} +mkdir -p "$lintian_data/fields" + +cat > "$workdir/virtual-packages" <<EOF +# The list of virtual packages in Debian that are provided by two or more +# packages. +# +# Packages that should be listed but are not found by this script can be +# listed in a special comment in this file. They will then be preserved when +# the list is regenerated. Such packages must be listed in a comment line +# staring with "Keep:". Multiple packages can be specified in the same line, +# separated by comma and/or white space. Multiple "Keep: " lines can be used +# as well. +# +# Last updated: $(date -u +'%Y-%m-%d') + +EOF + +[ -f "$lintian_data/fields/virtual-packages" ] && { + grep -E '^#\s*Keep:\s*.+$' "$lintian_data/fields/virtual-packages" \ + >> "$workdir/virtual-packages" || true +} +[ -z "$VIRTUAL_PACKAGES" ] || { + printf "# Keep: %s\n" "$VIRTUAL_PACKAGES" >> "$workdir/virtual-packages" +} + +echo >> "$workdir/virtual-packages" + +if [ -z "$packages" ] ; then + wget dists/sid/main/binary-i386/Packages.gz + packages="$workdir/Packages.gz" +fi + +case "$packages" in + *.gz) + CAT=zcat + ;; + *) + CAT=cat + ;; +esac + +# We have to repeat all the Keep packages twice, since we filter out any +# virtual packages that are only used once in the archive. +{ $CAT "$packages" + sed -rn 's/^#\s*Keep:\s*/Provides: /;T;s/([^,:])\s+([^,])/\1, \2/g;p' \ + "$workdir/virtual-packages" + sed -rn 's/^#\s*Keep:\s*/Provides: /;T;s/([^,:])\s+([^,])/\1, \2/g;p' \ + "$workdir/virtual-packages" +} | + perl -w -E 'my (%seen, %pkgs); + while (<>) { + chomp; + if (m/^Package:\s*(.+)$/) { + $pkgs{$1} = 1; + next; + } + next unless (s/^Provides:\s*//); + for my $pkg (split /\s*,\s*/) { + $seen{$pkg}++; + } + } + for my $pkg (keys %seen) { + print "$pkg\n" + unless ($seen{$pkg} == 1 or exists($pkgs{$pkg})); + }' \ + | sort -u >> "$workdir/virtual-packages" + +mv "$workdir/virtual-packages" "$lintian_data/fields/" + + +# Local Variables: +# indent-tabs-mode: nil +# End: +# vim: syntax=sh sw=4 sts=4 sr et |