mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-03 23:37:53 +01:00
* fix(setup): read skill names without a process per skill (#2120) On Windows on ARM64, x64-emulated Git Bash intermittently deadlocks in MSYS2's fork() emulation, and ./setup hung in the loops that read every SKILL.md name through grep | sed | tr plus a basename (about four process starts per skill). A sourced helper, bin/gstack-skill-name.sh, reads the name with a bash read loop and no subshell; gstack-patch-names, setup's link and cleanup loops and gstack-uninstall's inventory use it and parameter expansion instead of basename. Codex links keep their directory names. Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * test: fixtures that copy gstack-patch-names also copy its sourced helper Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * test: linker harnesses source the skill-name helper Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * changelog: fragment for fork-free skill names (#2120) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * changelog: name the host linkers that still run basename Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * test(qa-lazy-sections): the setup-install harness sources the skill-name helper Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --------- Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
37 lines
1.3 KiB
Bash
Executable File
37 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# gstack-patch-names — patch name: field in SKILL.md frontmatter for prefix mode
|
|
# Usage: gstack-patch-names <gstack-dir> <true|false|1|0>
|
|
set -euo pipefail
|
|
|
|
GSTACK_DIR="$1"
|
|
DO_PREFIX="$2"
|
|
|
|
# Normalize prefix arg
|
|
case "$DO_PREFIX" in true|1) DO_PREFIX=1 ;; *) DO_PREFIX=0 ;; esac
|
|
# Names are read with a bash builtin loop: no process per skill (#2120).
|
|
. "$(dirname "$0")/gstack-skill-name.sh"
|
|
|
|
PATCHED=0
|
|
for skill_dir in "$GSTACK_DIR"/*/; do
|
|
[ -f "$skill_dir/SKILL.md" ] || continue
|
|
dir_name=${skill_dir%/}; dir_name=${dir_name##*/}
|
|
[ "$dir_name" = "node_modules" ] && continue
|
|
gstack_skill_md_name "$skill_dir/SKILL.md"; cur=$GSTACK_SKILL_NAME
|
|
[ -z "$cur" ] && continue
|
|
[ "$cur" = "gstack" ] && continue # never prefix root skill
|
|
if [ "$DO_PREFIX" -eq 1 ]; then
|
|
case "$cur" in gstack-*) continue ;; esac
|
|
new="gstack-$cur"
|
|
else
|
|
case "$cur" in gstack-*) ;; *) continue ;; esac
|
|
[ "$dir_name" = "$cur" ] && continue # inherently prefixed (gstack-upgrade)
|
|
new="${cur#gstack-}"
|
|
fi
|
|
tmp="$(mktemp "${skill_dir}/SKILL.md.XXXXXX")"
|
|
sed "1,/^---$/s/^name:[[:space:]]*${cur}/name: ${new}/" "$skill_dir/SKILL.md" > "$tmp" && mv "$tmp" "$skill_dir/SKILL.md"
|
|
PATCHED=$((PATCHED + 1))
|
|
done
|
|
if [ "$PATCHED" -gt 0 ]; then
|
|
echo " patched name: field in $PATCHED skills"
|
|
fi
|