diff --git a/deploy/update.sh b/deploy/update.sh index bfe003c..a77e44c 100755 --- a/deploy/update.sh +++ b/deploy/update.sh @@ -51,10 +51,33 @@ if [[ "$DO_PULL" -eq 1 ]]; then else info "Hole Updates aus Git …" before="$(git -C "$REPO_DIR" rev-parse --short HEAD 2>/dev/null || echo '?')" - if ! git -C "$REPO_DIR" pull --ff-only; then - error "git pull fehlgeschlagen (lokale Änderungen?)." - echo " Lokalen Stand ansehen: git -C \"$REPO_DIR\" status" - echo " Lokale Änderungen weg: git -C \"$REPO_DIR\" checkout -- ." + # Die Ausgabe wird eingefangen, um die Ursache zu benennen. Frueher hiess + # JEDER Fehlschlag "lokale Änderungen?" – bei einem Netzproblem war der + # Ratschlag "checkout -- ." dann nicht nur nutzlos, sondern gefaehrlich. + if ! pull_ausgabe="$(git -C "$REPO_DIR" pull --ff-only 2>&1)"; then + printf '%s\n' "$pull_ausgabe" >&2 + remote_url="$(git -C "$REPO_DIR" remote get-url origin 2>/dev/null || echo '?')" + # Nur der Rechnername aus der Adresse - den braucht die Fehlersuche. + remote_host="$(sed -E 's#^[a-z+]+://##; s#^[^/@]*@##; s#[/:].*$##' <<<"$remote_url")" + if grep -qiE 'could not resolve|name or service not known|temporary failure in name resolution' <<<"$pull_ausgabe"; then + error "Der Git-Server ist namentlich nicht auflösbar – ein DNS-Problem." + echo " Betroffen: $remote_url" + echo " Auflösung prüfen: getent hosts $remote_host" + echo " Nameserver ansehen: cat /etc/resolv.conf" + echo " Deine Dateien sind unberührt – nach dem Beheben einfach erneut starten." + elif grep -qiE 'connection refused|connection timed out|network is unreachable|failed to connect|could not read from remote|authentication failed|403 forbidden' <<<"$pull_ausgabe"; then + error "Der Git-Server ist nicht erreichbar oder verweigert den Zugriff." + echo " Betroffen: $remote_url" + echo " Deine Dateien sind unberührt – nach dem Beheben einfach erneut starten." + elif grep -qiE 'local changes|would be overwritten|commit your changes|nicht vorspulen|not possible to fast-forward|divergent' <<<"$pull_ausgabe"; then + error "git pull fehlgeschlagen – der lokale Stand weicht ab." + echo " Lokalen Stand ansehen: git -C \"$REPO_DIR\" status" + echo " Lokale Änderungen weg: git -C \"$REPO_DIR\" checkout -- ." + else + error "git pull fehlgeschlagen. Die Meldung steht oben." + echo " Lokalen Stand ansehen: git -C \"$REPO_DIR\" status" + fi + echo " Ohne Update neu bauen: ./update.sh --no-pull" exit 1 fi after="$(git -C "$REPO_DIR" rev-parse --short HEAD)"