--force reparieren, Tests ergänzen, Aufräumen

- --force erlaubt jetzt tatsächlich das Downgrade auf Stable/Beta
  (der Downgrade-Block war vorher unerreichbar)
- test.sh: Tests für cmp_versions und die Update-Entscheidung
  (gefakete curl/ollama, kein Netz nötig)
- --help: stdout + Exit 0; unbekannte Argumente werden benannt
- tote Zeilen entfernt (nullglob, basename-Zeremonie)
- README: Nummerierung und nullglob-Erwähnung korrigiert
This commit is contained in:
Tim committed 2026-10-18 00:06:38 +02:00
1 parent bca72afbe8
commit 2aa9b70b29
4 files changed
+124 -14

No files matched your search

+22 -9
View File
@@ -3,16 +3,14 @@
# updateOllama: Lädt und installiert die aktuelle Ollama-Version (stable oder beta).
set -euo pipefail
shopt -s nullglob
readonly GITHUB_API="https://api.github.com/repos/ollama/ollama"
readonly INSTALL_URL="https://ollama.com/install.sh"
PROG_NAME=$(basename "$0") || { printf 'Fehler: basename fehlgeschlagen\n' >&2; exit 1; }
PROG_NAME=$(basename "$0")
readonly PROG_NAME
usage() {
printf 'Verwendung: %s [--beta|-b] [--force|-f]\n' "$PROG_NAME" >&2
exit 2
print_usage() {
printf 'Verwendung: %s [--beta|-b] [--force|-f]\n' "$PROG_NAME"
}
check_dependencies() {
@@ -40,8 +38,12 @@ parse_args() {
case "$1" in
--beta|-b) use_beta_value=true ;;
--force|-f) force_value=true ;;
-h|--help) usage ;;
*) usage ;;
-h|--help) print_usage; exit 0 ;;
*)
printf 'Unbekanntes Argument: %s\n' "$1" >&2
print_usage >&2
exit 2
;;
esac
shift
done
@@ -85,7 +87,7 @@ get_latest_version() {
printf '%s\n' "$json" | sed -nE 's/.*"tag_name": *"v?([^"]+)".*/\1/p' | head -n1
}
# Vergleicht zwei Versionsstrings (SemVer-ähnlich, Suffixe alphabetisch).
# Vergleicht zwei Versionsstrings (SemVer-ähnlich, Suffixe per 'sort -V').
# Gibt -1, 0 oder 1 aus.
cmp_versions() {
local a=${1#v} b=${2#v}
@@ -223,6 +225,11 @@ main() {
elif [[ "$(cmp_versions "$stable_ver" "$local_ver")" == 1 ]]; then
target_ver="$stable_ver"
printf 'Stable-Update verfuegbar: %s -> %s\n' "$local_ver" "$target_ver"
elif [[ "$force_downgrade" == true && "$(cmp_versions "$beta_ver" "$local_ver")" == -1 ]]; then
# Kein neueres Release; --force erlaubt das Downgrade auf die Beta.
target_ver="$beta_ver"
elif [[ "$force_downgrade" == true && "$(cmp_versions "$stable_ver" "$local_ver")" == -1 ]]; then
target_ver="$stable_ver"
else
printf 'Kein Update erforderlich.\n'
return 0
@@ -231,6 +238,9 @@ main() {
if [[ "$(cmp_versions "$stable_ver" "$local_ver")" == 1 ]]; then
target_ver="$stable_ver"
printf 'Update verfuegbar: %s -> %s\n' "$local_ver" "$target_ver"
elif [[ "$force_downgrade" == true && "$(cmp_versions "$stable_ver" "$local_ver")" == -1 ]]; then
# Kein neueres Release; --force erlaubt das Downgrade auf Stable.
target_ver="$stable_ver"
else
printf 'Kein Update erforderlich.\n'
return 0
@@ -256,4 +266,7 @@ main() {
fi
}
main "$@"
# Nur ausführen, wenn direkt aufgerufen — beim Sourcing (test.sh) nicht starten.
if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
main "$@"
fi