Explorer
/opt/struktur/buzz/scripts/reset-desktop-dev-state.sh
← Zurück ↓ Download
#!/usr/bin/env bash
# Remove desktop state owned by development bundle identifiers only.
# Production state (`xyz.block.buzz.app`, `~/.buzz`, and `buzz-desktop`) is
# deliberately outside every deletion pattern in this script.
set -euo pipefail

log() { printf '[desktop-dev-reset] %s\n' "$*"; }

remove_path() {
  local path="$1"
  if [[ -e "$path" || -L "$path" ]]; then
    log "Removing $path"
    rm -rf -- "$path"
  fi
}

remove_bundle_state() {
  local base="$1"
  local suffix="${2:-}"
  local prefix path

  [[ -d "$base" ]] || return 0
  shopt -s nullglob
  for prefix in xyz.block.buzz.app.dev xyz.block.sprout.app.dev; do
    # Match the canonical dev identifier and dot-delimited worktree variants.
    # Do not use `${prefix}*`: that could match a non-dev prefix collision.
    remove_path "$base/${prefix}${suffix}"
    for path in "$base/${prefix}."*"${suffix}"; do
      remove_path "$path"
    done
  done
  shopt -u nullglob
}

case "$(uname -s)" in
  Darwin)
    remove_bundle_state "$HOME/Library/Application Support"
    remove_bundle_state "$HOME/Library/Caches"
    remove_bundle_state "$HOME/Library/WebKit"
    remove_bundle_state "$HOME/Library/HTTPStorages"
    remove_bundle_state "$HOME/Library/Saved Application State" ".savedState"
    remove_bundle_state "$HOME/Library/Preferences" ".plist"

    # SecretStore keeps all dev identity and agent keys in this dev-only item.
    # Delete every matching item in case an older build used multiple accounts.
    if command -v security >/dev/null 2>&1; then
      while security delete-generic-password -s buzz-desktop-dev >/dev/null 2>&1; do :; done
      while security delete-generic-password -s sprout-desktop-dev >/dev/null 2>&1; do :; done
    fi
    ;;
  Linux)
    remove_bundle_state "${XDG_DATA_HOME:-$HOME/.local/share}"
    remove_bundle_state "${XDG_CONFIG_HOME:-$HOME/.config}"
    remove_bundle_state "${XDG_CACHE_HOME:-$HOME/.cache}"
    ;;
  *)
    log "Desktop bundle cleanup is not implemented for $(uname -s); continuing"
    ;;
esac

remove_path "$HOME/.buzz-dev"
remove_path "$HOME/.sprout-dev"

# A fresh dev nest must not re-import the installed app's ~/.buzz contents on
# its next boot. The sentinel is the same one used by migrate_dev_nest().
mkdir -p "$HOME/.buzz-dev"
: > "$HOME/.buzz-dev/.dev-nest-migrated"

log "Development desktop state removed; production Buzz state was not touched"