• Will Chen's avatar
    Fix WSL PATH contamination causing git command failures on Windows (#2282) · 89aa6105
    Will Chen 提交于
    ## Summary
    - Adds `getWindowsSanitizedEnv()` function that filters WSL-related PATH
    entries on Windows
    - Creates `execGit()` wrapper that applies sanitized environment to all
    dugite exec calls
    - Prevents WSL relay from intercepting git commands when WSL is
    installed but misconfigured
    
    Fixes #2194
    
    ## Test plan
    - [ ] Test on Windows machine with WSL installed
    - [ ] Verify git commit operations work with native Git enabled
    - [ ] Verify no regression on macOS/Linux (sanitization only activates
    on Windows)
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- This is an auto-generated description by cubic. -->
    ---
    ## Summary by cubic
    Sanitize PATH on Windows to stop WSL from hijacking git commands,
    ensuring native Git runs reliably. Fixes #2194.
    
    - **Bug Fixes**
    - Added getWindowsSanitizedEnv to filter WSL PATH entries (\\wsl$,
    \\wsl.localhost, windowsapps, /mnt, /usr, /bin, /home) and handle PATH
    key casing.
    - Wrapped all dugite exec calls with execGit on Windows; added '--'
    separators and remote URL validation.
    - Prevents WSL hijacking and errors like "execvpe(/bin/bash) failed: No
    such file or directory".
    
    <sup>Written for commit ad0a93ceb660831d8c4abf3e05dd91b8523dd9f1.
    Summary will update on new commits.</sup>
    
    <!-- End of auto-generated description by cubic. -->
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > Fixes Windows WSL PATH contamination by introducing a sanitized env
    and routing all native Git calls through a wrapper.
    > 
    > - **Add** `getWindowsSanitizedEnv()` to filter WSL-related PATH
    entries on Windows and handle PATH key casing
    > - **Introduce** `execGit()` wrapper and replace all `dugite.exec`
    usages to apply sanitized env on Windows
    > - **Harden** native Git calls: add `--` separators for path/URL args
    (e.g., `clone`, `check-ignore`), and validate `remoteUrl` to prevent
    option injection
    > - Touches most native Git flows: status, commit, checkout, branch ops,
    clone, push/pull/fetch/merge/rebase, file retrieval, and conflict
    detection
    > 
    > <sup>Written by [Cursor
    Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
    ad0a93ceb660831d8c4abf3e05dd91b8523dd9f1. This will update automatically
    on new commits. Configure
    [here](https://cursor.com/dashboard?tab=bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    <!-- devin-review-badge-begin -->
    
    ---
    
    <a href="https://app.devin.ai/review/dyad-sh/dyad/pull/2282">
      <picture>
    <source media="(prefers-color-scheme: dark)"
    srcset="https://static.devin.ai/assets/gh-open-in-devin-review-dark.svg?v=1">
    <img
    src="https://static.devin.ai/assets/gh-open-in-devin-review-light.svg?v=1"
    alt="Open with Devin">
      </picture>
    </a>
    <!-- devin-review-badge-end -->
    
    ---------
    Co-authored-by: 's avatarClaude Opus 4.5 <noreply@anthropic.com>
    89aa6105
名称
最后提交
最后更新
.claude 正在载入提交数据...
.cursor/rules 正在载入提交数据...
.devcontainer 正在载入提交数据...
.github 正在载入提交数据...
.husky 正在载入提交数据...
assets 正在载入提交数据...
docs 正在载入提交数据...
drizzle 正在载入提交数据...
e2e-tests 正在载入提交数据...
makers 正在载入提交数据...
packages/@dyad-sh 正在载入提交数据...
scaffold 正在载入提交数据...
scripts 正在载入提交数据...
shared 正在载入提交数据...
src 正在载入提交数据...
testing 正在载入提交数据...
tools 正在载入提交数据...
worker 正在载入提交数据...
workers/tsc 正在载入提交数据...
.cursorignore 正在载入提交数据...
.env.example 正在载入提交数据...
.eslintrc.json 正在载入提交数据...
.gitattributes 正在载入提交数据...
.gitignore 正在载入提交数据...
.oxfmtrc.json 正在载入提交数据...
.oxlintrc.json 正在载入提交数据...
.prettierignore 正在载入提交数据...
.prettierrc 正在载入提交数据...
AGENTS.md 正在载入提交数据...
CLA.md 正在载入提交数据...
CLAUDE.md 正在载入提交数据...
CONTRIBUTING.md 正在载入提交数据...
LICENSE 正在载入提交数据...
README.md 正在载入提交数据...
SECURITY.md 正在载入提交数据...
biome.json 正在载入提交数据...
components.json 正在载入提交数据...
drizzle.config.ts 正在载入提交数据...
forge.config.ts 正在载入提交数据...
forge.env.d.ts 正在载入提交数据...
index.html 正在载入提交数据...
lint-staged.config.js 正在载入提交数据...
merge.config.ts 正在载入提交数据...
package-lock.json 正在载入提交数据...
package.json 正在载入提交数据...
playwright.config.ts 正在载入提交数据...
tsconfig.app.json 正在载入提交数据...
tsconfig.json 正在载入提交数据...
tsconfig.node.json 正在载入提交数据...
vite.main.config.mts 正在载入提交数据...
vite.preload.config.mts 正在载入提交数据...
vite.renderer.config.mts 正在载入提交数据...
vite.worker.config.mts 正在载入提交数据...
vitest.config.ts 正在载入提交数据...