diff --git a/package-lock.json b/package-lock.json index 15f954e..8a1b466 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "folio", - "version": "0.1.7", + "version": "0.1.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "folio", - "version": "0.1.7", + "version": "0.1.6", "license": "MIT", "dependencies": { "@tiptap/core": "^2.27.2", diff --git a/package.json b/package.json index 158e4e3..33314bc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "folio", - "version": "0.1.7", + "version": "0.1.6", "description": "A simple, local, open-source desktop writing app.", "productName": "Folio", "author": "Folio Contributors", diff --git a/src/main/index.ts b/src/main/index.ts index 4bf7926..727e998 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -1254,9 +1254,6 @@ handleIpc("folio:performUpdate", async () => { app.getPath("temp"), `folio-update-${process.pid}.sh` ); - // Persistent, append-only handoff log: survives the swap and tells us - // exactly where a failed update stopped (temp files can vanish). - const updateLog = path.join(app.getPath("userData"), "update.log"); fs.writeFileSync( script, buildInstallerScript({ @@ -1264,7 +1261,6 @@ handleIpc("folio:performUpdate", async () => { tarball, installDir: cfg.installDir, relaunch: cfg.launcher, - log: updateLog, }), { mode: 0o700 } ); diff --git a/src/main/update.ts b/src/main/update.ts index 738245b..1382ab8 100644 --- a/src/main/update.ts +++ b/src/main/update.ts @@ -163,8 +163,6 @@ export interface InstallerSpec { tarball: string; installDir: string; relaunch: string; - /** Optional append-only log; the script narrates every step into it. */ - log?: string; } // The handoff script. Deliberately forgiving (no set -e): on any failure it @@ -172,10 +170,7 @@ export interface InstallerSpec { // user without an app. The old tree is kept as .old. and pruned only // after a successful swap. export function buildInstallerScript(spec: InstallerSpec): string { - const { pid, tarball, installDir, relaunch, log } = spec; - const logLine = log - ? `say() { echo "$(date '+%F %T') $*" >> ${shQuote(log)} 2>/dev/null; }` - : "say() { :; }"; + const { pid, tarball, installDir, relaunch } = spec; return [ "#!/bin/sh", "# Folio updater — waits for the app to exit, swaps in the new version,", @@ -186,44 +181,29 @@ export function buildInstallerScript(spec: InstallerSpec): string { `RELAUNCH=${shQuote(relaunch)}`, `NEW="$INSTALL.update-new.$$"`, `OLD="$INSTALL.old.$$"`, - logLine, - 'say "handoff start pid=$PID tarball=$TARBALL"', "# Wait (bounded to ~2 minutes) for the app process to exit.", "i=0", 'while [ "$PID" -gt 0 ] 2>/dev/null && kill -0 "$PID" 2>/dev/null && [ "$i" -lt 400 ]; do sleep 0.3; i=$((i+1)); done', - 'kill -0 "$PID" 2>/dev/null && say "WARN: app still alive after wait window" || say "app exited after ${i} polls"', 'rm -rf "$NEW"', - 'mkdir -p "$NEW" || { say "FAIL: mkdir $NEW"; "$RELAUNCH" >/dev/null 2>&1 & exit 1; }', + 'mkdir -p "$NEW"', 'if tar -xzf "$TARBALL" -C "$NEW"; then', - ' say "extracted ok"', - ' # electron-builder nests everything under a top-level dir; flatten it', - " # by adopting the nested dir itself (mv of the dir, not a glob — globs", - " # miss dotfiles and a partial mv leaves a broken tree).", + ' # electron-builder nests everything under a top-level dir; flatten it.', ' if [ ! -e "$NEW/folio" ]; then', ' ONLY=$(find "$NEW" -mindepth 1 -maxdepth 1 -type d | head -n 1)', - ' REST=$(find "$NEW" -mindepth 1 -maxdepth 1 | wc -l)', - ' if [ -n "$ONLY" ] && [ "$REST" -eq 1 ]; then', - ' mv "$ONLY" "$NEW.new" && rm -rf "$NEW" && mv "$NEW.new" "$NEW" && say "flattened nested dir"', - " fi", + ' [ -n "$ONLY" ] && mv "$ONLY"/* "$NEW"/ 2>/dev/null', " fi", - "else", - ' say "FAIL: tar extract failed"', "fi", 'if [ -x "$NEW/folio" ]; then', - ' [ -e "$INSTALL" ] && mv "$INSTALL" "$OLD" && say "moved old install aside"', + ' [ -e "$INSTALL" ] && mv "$INSTALL" "$OLD"', ' if mv "$NEW" "$INSTALL"; then', - ' say "SWAP OK — new version installed"', ' rm -rf "$OLD" "$INSTALL.update-new".* "$INSTALL.old".* 2>/dev/null', ' rm -f "$TARBALL"', " else", - ' say "FAIL: mv NEW->INSTALL; restoring old"', ' [ -e "$OLD" ] && mv "$OLD" "$INSTALL"', " fi", "else", - ' say "FAIL: no executable at $NEW/folio; keeping old install"', ' rm -rf "$NEW"', "fi", - 'say "relaunching"', '"$RELAUNCH" >/dev/null 2>&1 &', "", ].join("\n");