summaryrefslogtreecommitdiffstats
path: root/vendor/getinfo
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 06:14:41 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 06:14:41 +0000
commit549a391d6438e828001eeeaf235b080c054a7bf3 (patch)
tree1bb6b1ea5987fa167a1d13abe82209cc882dd94b /vendor/getinfo
parentInitial commit. (diff)
downloadapt-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-xvendor/getinfo83
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