diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 06:14:41 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 06:14:41 +0000 |
commit | 549a391d6438e828001eeeaf235b080c054a7bf3 (patch) | |
tree | 1bb6b1ea5987fa167a1d13abe82209cc882dd94b /vendor/getinfo | |
parent | Initial commit. (diff) | |
download | apt-upstream/2.2.4.tar.xz apt-upstream/2.2.4.zip |
Adding upstream version 2.2.4.upstream/2.2.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/getinfo')
-rwxr-xr-x | vendor/getinfo | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/vendor/getinfo b/vendor/getinfo new file mode 100755 index 0000000..2ef257c --- /dev/null +++ b/vendor/getinfo @@ -0,0 +1,83 @@ +#!/bin/sh +# small helper to extract information form *.ent files + +BASEDIR="$(readlink -f "$(dirname $0)")" + +getcurrent() { + # search for an exact match to use the correct sources.list example + cd $BASEDIR + DISTROS="$(find . -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f 2 | LC_ALL=C sort)" + for DISTRO in $DISTROS; do + if dpkg-vendor --is $DISTRO; then + echo $DISTRO + return 0 + fi + done + + # if we haven't found a specific, look for a deriving + # we do ubuntu and debian last as those are the biggest families + # and would therefore potentially 'shadow' smaller families + # (especially debian as it sorts quiet early) + for DISTRO in $DISTROS; do + if [ "$DISTRO" = 'debian' -o "$DISTRO" = 'ubuntu' ]; then continue; fi + if dpkg-vendor --derives-from $DISTRO; then + echo $DISTRO + return 0 + fi + done + + # Do the ubuntu/debian dance we talked about + if dpkg-vendor --derives-from ubuntu; then + echo ubuntu + return 0 + fi + + echo debian + return 0 +} + +if [ "$1" = "--vendor" ]; then + CURRENT_VENDOR="$2" + shift 2 +else + CURRENT_VENDOR=$(getcurrent) +fi +INFO="$(readlink -f "${BASEDIR}/$CURRENT_VENDOR/apt-vendor.ent")" +VERBATIM="${BASEDIR}/../doc/apt-verbatim.ent" + +if [ -z "$INFO" ] || [ ! -e "$INFO" ]; then + echo >&2 'The current vendor is not valid or not chosen by the buildsystem yet.' + exit 1 +fi + +getrawfield() { + awk "/<!ENTITY $1/ {f=NR} f && NR-1==f { print; exit 0 }" RS='"' "${2:-$INFO}" +} + +getfield() { + local FIELD="$(getrawfield "$@")" + FIELD="${FIELD#*>}" + echo "${FIELD%<*}" +} + +case "$1" in +debian-stable-codename|debian-oldstable-codename|debian-testing-codename|ubuntu-codename) + getrawfield "$1" "$VERBATIM" + ;; +sourceslist-list-format|keyring-package|keyring-filename|keyring-master-filename|keyring-removed-filename|keyring-uri|current-codename) + exec $0 --vendor $CURRENT_VENDOR 'vendor' "$@" + ;; +vendor) + getfield "$2" + ;; +verbatim) + getfield "$2" "$VERBATIM" + ;; +current) + echo $CURRENT_VENDOR + ;; +*) + echo >&2 "Unknown data field $1 requested" + exit 2 + ;; +esac |