Compare commits

...

2 Commits

Author SHA1 Message Date
Daan De Meyer 43e935aedc
Merge 99fd958d52 into d80a9042ca 2024-09-17 12:23:27 +02:00
Daan De Meyer 99fd958d52 mkosi: Use pacman's new --print-format= switch to install dependencies
Not perfect yet, but it beats parsing non machine readable output from
pacman --info.
2024-09-15 11:53:47 +02:00
1 changed files with 10 additions and 20 deletions

View File

@ -8,28 +8,18 @@ fi
mapfile -t PACKAGES < <(jq --raw-output .VolatilePackages[] <"$MKOSI_CONFIG") mapfile -t PACKAGES < <(jq --raw-output .VolatilePackages[] <"$MKOSI_CONFIG")
DEPS="" DEPS="$(pacman --sync --print-format %D "${PACKAGES[@]}")"
# The optional dependencies are printed with their description as a whitespace delimited list, so we grep out
for PACKAGE in "${PACKAGES[@]}"; do # everything that ends with a colon to get the actual dependencies without descriptions, and then remove the
DEPS="$DEPS $( # colon with sed.
pacman --sync --info "$PACKAGE" | DEPS="$DEPS $(
sed '1,/^$/d' | # Only keep result from first repository (delete everything after first blank line). pacman --sync --print-format %O "${PACKAGES[@]}" |
sed --quiet 's/^Depends On *: //p' # Filter out everything except "Depends On:" line and fetch dependencies from it. grep --only-matching --extended-regexp "[0-9a-zA-Z\-]+:" |
)" sed 's/.$//'
)"
DEPS="$DEPS $(
pacman --sync --info "$PACKAGE" |
sed '1,/^$/d' | # Only keep result from first repository (delete everything after first blank line).
sed --quiet '/Optional Deps/,/Conflicts With/{/Conflicts With/!p}' | # Get every line from "Optional Deps" (inclusive) until "Conflicts With" (exclusive).
sed 's/Optional Deps *: //' | # Drop "Optional Deps :" from first line.
sed 's/ *\(.*\):.*/\1/' | # Drop descriptions (everything after first colon for all lines).
tr '\n' ' ' # Transform newlines to whitespace.
)"
done
echo "$DEPS" | echo "$DEPS" |
xargs | # Remove extra whitespace.
tr ' ' '\n' | tr ' ' '\n' |
grep --extended-regexp --invert-match --regexp "$(IFS=\| ; echo "${PACKAGES[*]}")" --regexp None | # systemd packages will be installed later on. grep --extended-regexp --invert-match --regexp "$(IFS=\| ; echo "${PACKAGES[*]}")" | # systemd packages will be installed later on.
sort --unique | sort --unique |
xargs --delimiter '\n' --no-run-if-empty mkosi-install xargs --delimiter '\n' --no-run-if-empty mkosi-install