mirror of
https://github.com/abhigyanpatwari/GitNexus.git
synced 2026-09-12 23:02:45 +00:00
The stale-index hint must prefer a PATH-installed `gitnexus` over `npx gitnexus` (which crashes npm 11's arborist, #1939). #1945 already does this via `formatAnalyzeCommand`, but its `resolveOnPath` shelled out to `where`/`which` — which fails outright when the probe binary is itself unreachable (a sanitized hook PATH without System32 / `/usr/bin`), exactly the Windows case #1938 reports. Replace the subprocess (and a hand-rolled fallback) with a single spawn-free PATH scan — issue #1938's preferred "Option A". One code path, identical on every OS: - no dependency on `where`/`which` being reachable; - no shell-spawn surface (CVE-2024-27980) and no spawn timeout to tune; - Windows matches PATHEXT extensions only (mirrors `where`/cmd.exe), so neither a `.ps1`-only shim nor a bare extensionless file is a false positive; - `preferExecExt` keeps the `.cmd`/`.bat`/`.exe` wrapper preference. `resolveOnPath` is now pure (platform/env injectable) and exported; `pickPathMatch` and the interim `scanPathForCommand` are removed. Version detection still spawns `npm`/`pnpm --version` (unavoidable) and is unchanged. Tests: drive `resolveOnPath` directly across POSIX/Windows cases (PATHEXT, `.ps1`, extensionless, preferExecExt, X_OK) + a cross-platform `formatAnalyzeCommand` end-to-end case, plus the existing hook e2e auto-detection tests and new `pathWithoutGitNexus`/`envWithPath`/`createGitNexusPathEntry` helpers. Both `resolve-analyze-cmd.cjs` copies kept byte-identical. Validated: tsc clean, prettier clean, eslint 0 errors, 312 targeted tests pass (unit + hook e2e + the resolver's other consumers). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| hook-test-helpers.ts | ||