You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.9 KiB
Bash

#!/bin/sh
set -eu
depends=$@
edspfile=$(mktemp)
solution=$(mktemp)
trap "rm -r \"$edspfile\" \"$solution\"" EXIT
# simulate installation of a random package - we choose apt because that has to exist
#
# we expect the dump solver to fail with exit 100
APT_EDSP_DUMP_FILENAME="$edspfile" apt-get --simulate install --solver dump apt >/dev/null 2>&1 && [ $? -eq 100 ]
request=$(grep-dctrl -F Request '' -s Request -n "$edspfile")
architecture=$(grep-dctrl -F Request '' -s Architecture -n "$edspfile")
architectures=$(grep-dctrl -F Request '' -s Architectures -n "$edspfile")
# generate the APT-ID of the dummy package from the largest id plus one
newid=$(grep-dctrl -F Package '' -s APT-ID -n "$edspfile" | sort -n | tail -1)
newid=$((newid+1))
# Replace the EDSP header and add a dummy package at the top
#
# We pass some custom options to /usr/lib/apt/solvers/apt because while it
# still needs access to the system's apt config, the presence of some settings
# will let it error out.
{
cat << END
Request: $request
Architecture: $architecture
Architectures: $architectures
Install: apt-satisfy-dummy:$architecture
Package: apt-satisfy-dummy
Architecture: $architecture
Version: 1
APT-ID: $newid
Depends: $depends
APT-Pin: 990
END
grep-dctrl -F Package '' "$edspfile";
} | /usr/lib/apt/solvers/apt -o APT::Default-Release="" > "$solution"
# FIXME: instead of using grep and cat we want to use grep-dctrl but
# unfortunately the EDSP that /usr/lib/apt/solvers/apt outputs is not valid
# deb822
if grep Error: "$solution"; then
cat "$solution"
exit
fi
selector=$(grep-dctrl -F Install '' -n -s Install "$solution" | paste -s -d"|")
install=$(grep-dctrl --eregex -F APT-ID "^($selector)$" -n -s Package,Architecture,Version "$edspfile" \
| paste -sd ":= " )
echo apt install $install
auto=$(grep-dctrl --eregex -F APT-ID "^($selector)$" -n -s Package,Architecture "$edspfile" \
| paste -sd ": " )
echo apt-mark auto $auto