64 lines
1.4 KiB
Bash
64 lines
1.4 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Optionaler Dev-Installationsmodus
|
|
dev_mode=false
|
|
if [[ "${1:-}" == "-dev" ]]; then
|
|
dev_mode=true
|
|
fi
|
|
|
|
shopt -s nullglob
|
|
|
|
# Wähle die passende Requirements-Datei
|
|
pattern='requirements.txt'
|
|
msg_hint='src/*/requirements.txt'
|
|
if $dev_mode; then
|
|
pattern='requirements.dev.txt'
|
|
msg_hint='src/*/requirements.dev.txt'
|
|
fi
|
|
|
|
req_files=(src/*/"$pattern")
|
|
if ((${#req_files[@]} == 0)); then
|
|
echo "Keine Requirements-Dateien gefunden unter '$msg_hint'" >&2
|
|
exit 1
|
|
fi
|
|
|
|
tmp_combined="$(mktemp)"
|
|
trap 'rm -f "$tmp_combined"' EXIT
|
|
|
|
# Kombiniere, filtere Kommentare/Whitespace, entferne cpl-*, dedupliziere.
|
|
awk '
|
|
function trim(s){ sub(/^[[:space:]]+/,"",s); sub(/[[:space:]]+$/,"",s); return s }
|
|
|
|
{
|
|
line=$0
|
|
if (line ~ /^[[:space:]]*#/) next
|
|
sub(/#[^!].*$/,"",line)
|
|
line=trim(line)
|
|
if (line == "") next
|
|
|
|
e = line
|
|
sub(/^-e[[:space:]]+/,"",e)
|
|
token = e
|
|
sub(/\[.*/,"",token)
|
|
n = split(token, a, /[<>=!~;@[:space:]]/)
|
|
name = tolower(a[1])
|
|
|
|
if (name ~ /^cpl-/) next
|
|
print line
|
|
}
|
|
' "${req_files[@]}" | sort -u > "$tmp_combined"
|
|
|
|
if ! [ -s "$tmp_combined" ]; then
|
|
echo "Nichts zu installieren nach dem Entfernen von cpl-* Paketen." >&2
|
|
exit 0
|
|
fi
|
|
|
|
echo "Installiere Abhängigkeiten (ohne cpl-*) aus:"
|
|
printf ' - %s\n' "${req_files[@]}"
|
|
echo
|
|
echo "Finale Menge zur Installation:"
|
|
cat "$tmp_combined"
|
|
echo
|
|
|
|
python -m pip install -r "$tmp_combined" |