diff --git a/README.md b/README.md index f960292..1230e2b 100644 --- a/README.md +++ b/README.md @@ -612,6 +612,9 @@ sudo update-rpcs3 El updater extrae el AppImage nuevo aparte y solo reemplaza `/opt/RPCS3` si la extraccion salio bien. +Si ya tienes la ultima version (compara la URL del AppImage con la que guardo la +instalacion en `/opt/RPCS3/.rpcs3-url`), no descarga nada y avisa; `sudo update-rpcs3 --force` +la reinstala igual. Una instalacion anterior sin esa marca descarga una vez. ## Uso Despues De Instalar Cage/foot diff --git a/lib/rpcs3.sh b/lib/rpcs3.sh index 2a05a0d..479dbca 100644 --- a/lib/rpcs3.sh +++ b/lib/rpcs3.sh @@ -178,6 +178,8 @@ install_rpcs3() { return 1 fi + # Marca de version para que update-rpcs3 sepa si ya esta la ultima. + printf '%s\n' "$RPCS3_URL" > /mnt/opt/RPCS3/.rpcs3-url run_quiet arch-chroot /mnt chown -R "$KIOSK_USER:$KIOSK_USER" /opt/RPCS3 rm -f "$appimage" } @@ -429,6 +431,10 @@ RPCS3_API_URL="__RPCS3_API_URL__" RPCS3_ASSET_REGEX='__RPCS3_ASSET_REGEX__' INSTALL_DIR="/opt/RPCS3" OWNER="__OWNER__" +# URL del AppImage instalado; el nombre lleva la version. --force reinstala igual. +URL_MARK="$INSTALL_DIR/.rpcs3-url" +FORCE=false +[[ "${1:-}" == "--force" ]] && FORCE=true if [[ ${EUID} -ne 0 ]]; then echo "Este script debe ejecutarse como root." >&2 @@ -451,6 +457,12 @@ if [[ -z "$LATEST_URL" ]]; then LATEST_URL="$RPCS3_URL" fi +if [[ "$FORCE" != "true" && -r "$URL_MARK" && "$(cat "$URL_MARK")" == "$LATEST_URL" ]]; then + echo "RPCS3 ya esta en la ultima version ($(basename "$LATEST_URL")); no se descarga nada." + echo "Usa update-rpcs3 --force para reinstalarla igual." + exit 0 +fi + echo "Descargando RPCS3 desde: $LATEST_URL" curl -fL --retry 3 --retry-delay 2 -o "$WORK_DIR/RPCS3.AppImage" "$LATEST_URL" chmod +x "$WORK_DIR/RPCS3.AppImage" @@ -488,6 +500,9 @@ if [[ ! -d "$NEW_DIR" || ! -x "$NEW_DIR/AppRun" ]]; then exit 1 fi +# La marca viaja dentro de la instalacion nueva, asi solo existe si se completo. +printf '%s\n' "$LATEST_URL" > "$NEW_DIR/.rpcs3-url" + # La instalacion anterior solo se borra cuando la nueva se comprobo: si algo # falla se restaura. rm -rf "$INSTALL_DIR.old" @@ -574,7 +589,7 @@ update_rpcs3() { if sudo /usr/local/bin/update-rpcs3; then echo "" - echo "Actualizacion completada." + echo "Listo." else echo "" echo "La actualizacion fallo. Revisa journalctl -u cage-kiosk.service -b." diff --git a/tests/test_rpcs3.bats b/tests/test_rpcs3.bats index 701ab54..c934a12 100644 --- a/tests/test_rpcs3.bats +++ b/tests/test_rpcs3.bats @@ -189,6 +189,36 @@ fake_appimage() { [ "$(cat "$BATS_TEST_TMPDIR/upd/opt/version")" = "viejo" ] } +@test "update-rpcs3 no descarga ni reemplaza si ya esta la ultima version, y --force reinstala" { + make_update_script + mkdir -p "$BATS_TEST_TMPDIR/upd/opt" + echo viejo > "$BATS_TEST_TMPDIR/upd/opt/version" + echo "https://h/nuevo_linux64.AppImage" > "$BATS_TEST_TMPDIR/upd/opt/.rpcs3-url" + fake_appimage 'mkdir -p squashfs-root; printf "#!/bin/sh\n" > squashfs-root/AppRun; chmod +x squashfs-root/AppRun; echo nuevo > squashfs-root/version' + + PATH="$BATS_TEST_TMPDIR/upd/bin:$PATH" run bash "$BATS_TEST_TMPDIR/upd/update-rpcs3" + [ "$status" -eq 0 ] + [[ "$output" == *"ya esta en la ultima version"* ]] + [ "$(cat "$BATS_TEST_TMPDIR/upd/opt/version")" = "viejo" ] + + PATH="$BATS_TEST_TMPDIR/upd/bin:$PATH" run bash "$BATS_TEST_TMPDIR/upd/update-rpcs3" --force + [ "$status" -eq 0 ] + [ "$(cat "$BATS_TEST_TMPDIR/upd/opt/version")" = "nuevo" ] + [ "$(cat "$BATS_TEST_TMPDIR/upd/opt/.rpcs3-url")" = "https://h/nuevo_linux64.AppImage" ] +} + +@test "update-rpcs3 con otra version instalada descarga y deja la marca de la nueva" { + make_update_script + mkdir -p "$BATS_TEST_TMPDIR/upd/opt" + echo viejo > "$BATS_TEST_TMPDIR/upd/opt/version" + echo "https://h/viejo_linux64.AppImage" > "$BATS_TEST_TMPDIR/upd/opt/.rpcs3-url" + fake_appimage 'mkdir -p squashfs-root; printf "#!/bin/sh\n" > squashfs-root/AppRun; chmod +x squashfs-root/AppRun; echo nuevo > squashfs-root/version' + PATH="$BATS_TEST_TMPDIR/upd/bin:$PATH" run bash "$BATS_TEST_TMPDIR/upd/update-rpcs3" + [ "$status" -eq 0 ] + [ "$(cat "$BATS_TEST_TMPDIR/upd/opt/version")" = "nuevo" ] + [ "$(cat "$BATS_TEST_TMPDIR/upd/opt/.rpcs3-url")" = "https://h/nuevo_linux64.AppImage" ] +} + # --- wrapper y menu ---------------------------------------------------------- @test "el wrapper y el menu generados son Bash valido y sin marcadores sin sustituir" {