dev: start-* launchers always start from a clean setup
The launchers reused whatever was left under $XDG_CACHE_HOME/nuwiki-dev between runs — seed_wiki() skipped reseeding when index.wiki already existed, so stale edits from a previous session leaked into the next, and old swap/viminfo/coc state carried over. Each launch now starts clean: - seed_wiki() reseeds the managed scratch wiki from a pristine copy every run (rm -rf + write_sample_wiki). A user-pointed NUWIKI_DEV_WIKI is never wiped — it's seeded only when empty, so a real wiki is never clobbered. NUWIKI_DEV_NO_SEED still bypasses seeding entirely. - new reset_dirs() helper wipes + recreates each launcher's owned state dirs (vim viminfo/swap/undo, coc data, nvim XDG state/data/config) before launch. Cached plugin clones (vim-lsp, async.vim, coc.nvim) are kept — only the wiki and editor state are reset. Header docs updated to describe the fresh-each-launch behavior. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+29
-5
@@ -12,7 +12,10 @@
|
|||||||
# log — prefixed status line
|
# log — prefixed status line
|
||||||
# ensure_binary — build + symlink nuwiki-ls
|
# ensure_binary — build + symlink nuwiki-ls
|
||||||
# write_sample_wiki DIR — lay down the feature-showcase wiki
|
# write_sample_wiki DIR — lay down the feature-showcase wiki
|
||||||
# seed_wiki — seed WIKI_DIR (respects NUWIKI_DEV_NO_SEED)
|
# reset_dirs DIR... — wipe + recreate owned state dirs
|
||||||
|
# seed_wiki — (re)seed WIKI_DIR fresh each run; never
|
||||||
|
# touches a user-supplied NUWIKI_DEV_WIKI;
|
||||||
|
# respects NUWIKI_DEV_NO_SEED
|
||||||
|
|
||||||
# Resolve paths relative to this file so it works regardless of which
|
# Resolve paths relative to this file so it works regardless of which
|
||||||
# launcher sources it.
|
# launcher sources it.
|
||||||
@@ -261,16 +264,37 @@ A diary entry. Back to [[diary]].
|
|||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# reset_dirs DIR... — wipe and recreate each dir so a launch always starts
|
||||||
|
# from clean editor state (swap/undo/viminfo, coc data, nvim XDG dirs). Only
|
||||||
|
# ever called on dirs the launchers own under $DEV_DIR.
|
||||||
|
reset_dirs() {
|
||||||
|
local d
|
||||||
|
for d in "$@"; do
|
||||||
|
rm -rf "$d"
|
||||||
|
mkdir -p "$d"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
seed_wiki() {
|
seed_wiki() {
|
||||||
if [[ "${NUWIKI_DEV_NO_SEED:-0}" == "1" ]]; then
|
if [[ "${NUWIKI_DEV_NO_SEED:-0}" == "1" ]]; then
|
||||||
log "NUWIKI_DEV_NO_SEED=1 — skipping wiki seed (using $WIKI_DIR as-is)"
|
log "NUWIKI_DEV_NO_SEED=1 — skipping wiki seed (using $WIKI_DIR as-is)"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
mkdir -p "$WIKI_DIR" "$WIKI_DIR/diary"
|
# A user-pointed wiki (NUWIKI_DEV_WIKI) is never wiped — it might be a real
|
||||||
# Seed the whole showcase as a unit; skip when an index already exists
|
# wiki. Seed the sample only when it has no index yet, so we don't clobber it.
|
||||||
# so a re-run never clobbers edits made while testing.
|
if [[ -n "${NUWIKI_DEV_WIKI:-}" ]]; then
|
||||||
if [[ -f "$WIKI_DIR/index.wiki" ]]; then
|
mkdir -p "$WIKI_DIR" "$WIKI_DIR/diary"
|
||||||
|
if [[ -f "$WIKI_DIR/index.wiki" ]]; then
|
||||||
|
log "using existing wiki at $WIKI_DIR (left untouched)"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
write_sample_wiki "$WIKI_DIR"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
# Managed scratch wiki under the dev cache: always start from a pristine
|
||||||
|
# copy so stale edits from a previous run never leak into the next.
|
||||||
|
log "reseeding scratch wiki (fresh copy): $WIKI_DIR"
|
||||||
|
rm -rf "$WIKI_DIR"
|
||||||
|
mkdir -p "$WIKI_DIR" "$WIKI_DIR/diary"
|
||||||
write_sample_wiki "$WIKI_DIR"
|
write_sample_wiki "$WIKI_DIR"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,11 @@
|
|||||||
# so this is a fast no-op when nothing changed. Set
|
# so this is a fast no-op when nothing changed. Set
|
||||||
# NUWIKI_DEV_SKIP_BUILD=1 to skip the build step entirely.
|
# NUWIKI_DEV_SKIP_BUILD=1 to skip the build step entirely.
|
||||||
#
|
#
|
||||||
|
# Each launch starts clean: the scratch wiki is reseeded from a pristine
|
||||||
|
# copy and the editor state (cache/data/config) is wiped, so stale edits
|
||||||
|
# never carry over. A wiki you point at with NUWIKI_DEV_WIKI is never wiped
|
||||||
|
# (seeded only if empty).
|
||||||
|
#
|
||||||
# Tested with Neovim 0.10+. State (cache/data/config) lives under
|
# Tested with Neovim 0.10+. State (cache/data/config) lives under
|
||||||
# $XDG_CACHE_HOME/nuwiki-dev/ so your real Neovim install stays
|
# $XDG_CACHE_HOME/nuwiki-dev/ so your real Neovim install stays
|
||||||
# untouched.
|
# untouched.
|
||||||
@@ -78,7 +83,7 @@ main() {
|
|||||||
ensure_binary
|
ensure_binary
|
||||||
seed_wiki
|
seed_wiki
|
||||||
write_init
|
write_init
|
||||||
mkdir -p "$STATE_DIR" "$DATA_DIR" "$CONFIG_DIR"
|
reset_dirs "$STATE_DIR" "$DATA_DIR" "$CONFIG_DIR"
|
||||||
|
|
||||||
log "launching: nvim --clean -u $INIT_FILE"
|
log "launching: nvim --clean -u $INIT_FILE"
|
||||||
if [[ $# -gt 0 ]]; then
|
if [[ $# -gt 0 ]]; then
|
||||||
|
|||||||
@@ -29,6 +29,11 @@
|
|||||||
# the running LSP. `cargo build --release` is incremental, so this is a fast
|
# the running LSP. `cargo build --release` is incremental, so this is a fast
|
||||||
# no-op when nothing changed. Set NUWIKI_DEV_SKIP_BUILD=1 to skip the build.
|
# no-op when nothing changed. Set NUWIKI_DEV_SKIP_BUILD=1 to skip the build.
|
||||||
#
|
#
|
||||||
|
# Each launch starts clean: the scratch wiki is reseeded from a pristine
|
||||||
|
# copy and the editor state (viminfo/swap/undo, coc data) is wiped, so stale
|
||||||
|
# edits never carry over. The cached coc.nvim clone is kept. A wiki you point
|
||||||
|
# at with NUWIKI_DEV_WIKI is never wiped (seeded only if empty).
|
||||||
|
#
|
||||||
# Tested with Vim 9.1+ and Node 18+. State (viminfo/sessions, coc data) lives
|
# Tested with Vim 9.1+ and Node 18+. State (viminfo/sessions, coc data) lives
|
||||||
# under $XDG_CACHE_HOME/nuwiki-dev/ so your real Vim install stays untouched.
|
# under $XDG_CACHE_HOME/nuwiki-dev/ so your real Vim install stays untouched.
|
||||||
|
|
||||||
@@ -165,6 +170,7 @@ main() {
|
|||||||
write_coc_settings
|
write_coc_settings
|
||||||
seed_wiki
|
seed_wiki
|
||||||
write_vimrc
|
write_vimrc
|
||||||
|
reset_dirs "$VIM_STATE" "$COC_DATA"
|
||||||
mkdir -p "$VIM_STATE/swap" "$VIM_STATE/backup" "$VIM_STATE/undo" "$COC_DATA"
|
mkdir -p "$VIM_STATE/swap" "$VIM_STATE/backup" "$VIM_STATE/undo" "$COC_DATA"
|
||||||
|
|
||||||
log "launching: vim --clean -u $VIMRC"
|
log "launching: vim --clean -u $VIMRC"
|
||||||
|
|||||||
@@ -20,6 +20,11 @@
|
|||||||
# so this is a fast no-op when nothing changed. Set
|
# so this is a fast no-op when nothing changed. Set
|
||||||
# NUWIKI_DEV_SKIP_BUILD=1 to skip the build step entirely.
|
# NUWIKI_DEV_SKIP_BUILD=1 to skip the build step entirely.
|
||||||
#
|
#
|
||||||
|
# Each launch starts clean: the scratch wiki is reseeded from a pristine
|
||||||
|
# copy and the editor state (viminfo/swap/undo) is wiped, so stale edits
|
||||||
|
# never carry over. The cached vim-lsp/async.vim clones are kept. A wiki you
|
||||||
|
# point at with NUWIKI_DEV_WIKI is never wiped (seeded only if empty).
|
||||||
|
#
|
||||||
# Tested with Vim 9.1+. State (viminfo/sessions) lives under
|
# Tested with Vim 9.1+. State (viminfo/sessions) lives under
|
||||||
# $XDG_CACHE_HOME/nuwiki-dev/ so your real Vim install stays untouched.
|
# $XDG_CACHE_HOME/nuwiki-dev/ so your real Vim install stays untouched.
|
||||||
|
|
||||||
@@ -119,6 +124,7 @@ main() {
|
|||||||
ensure_vim_lsp
|
ensure_vim_lsp
|
||||||
seed_wiki
|
seed_wiki
|
||||||
write_vimrc
|
write_vimrc
|
||||||
|
reset_dirs "$VIM_STATE"
|
||||||
mkdir -p "$VIM_STATE/swap" "$VIM_STATE/backup" "$VIM_STATE/undo"
|
mkdir -p "$VIM_STATE/swap" "$VIM_STATE/backup" "$VIM_STATE/undo"
|
||||||
|
|
||||||
log "launching: vim --clean -u $VIMRC"
|
log "launching: vim --clean -u $VIMRC"
|
||||||
|
|||||||
Reference in New Issue
Block a user