Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
17 changes: 16 additions & 1 deletion lib/rpcs3.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
Expand Down Expand Up @@ -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
Expand All @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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."
Expand Down
30 changes: 30 additions & 0 deletions tests/test_rpcs3.bats
Original file line number Diff line number Diff line change
Expand Up @@ -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" {
Expand Down
Loading