• Adeniji Adekunle James's avatar
    Replace native Git with Dugite to support users without Git installed (#1760) · d3f3ac3a
    Adeniji Adekunle James 提交于
    I moved all isomorphic-git usage into a single git_utils.ts file and
    added Dugite as an alternative Git provider. The app now checks the
    user’s settings and uses dugite when user enabled native git for all
    isomorphic-git commands. This makes it easy to fully remove
    isomorphic-git in the future by updating only git_utils.ts.
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > Adds Dugite-based native Git (bundled binary) and refactors all Git
    calls to a unified git_utils API, replacing direct isomorphic-git usage
    across the app.
    > 
    > - **Git Platform Abstraction**:
    > - Introduces `dugite` and bundles Git via Electron Forge
    (`extraResource`) with `LOCAL_GIT_DIRECTORY` setup in `src/main.ts`.
    > - Adds `src/ipc/git_types.ts` and a comprehensive
    `src/ipc/utils/git_utils.ts` wrapper supporting both Dugite (native) and
    `isomorphic-git` (fallback): `commit`, `add`/`addAll`, `remove`, `init`,
    `clone`, `push`, `setRemoteUrl`, `currentBranch`, `listBranches`,
    `renameBranch`, `log`, `isIgnored`, `getCurrentCommitHash`,
    `getGitUncommittedFiles`, `getFileAtCommit`, `checkout`,
    `stageToRevert`.
    > - **Refactors (switch to git_utils)**:
    > - Replaces direct `isomorphic-git` imports in handlers and processors:
    `app_handlers`, `chat_handlers`, `createFromTemplate`,
    `github_handlers`, `import_handlers`, `portal_handlers`,
    `version_handlers`, `response_processor`, `neon_timestamp_utils`,
    `utils/codebase`.
    > - Updates tests to mock `git_utils`
    (`src/__tests__/chat_stream_handlers.test.ts`).
    > - **Behavioral/Feature Updates**:
    > - `createFromTemplate` uses `fetch` for GitHub API and `gitClone` for
    cloning with cache validation.
    > - GitHub integration uses `gitSetRemoteUrl`/`gitPush`/`gitClone`,
    handling public vs token URLs and directory creation when native Git is
    disabled.
    > - Versioning, imports, app file edits, migrations now stage/commit via
    `git_utils`.
    > - **UI/Copy**:
    >   - Updates Settings description for “Enable Native Git”.
    > - **Config/Version**:
    >   - Bumps version to `0.29.0-beta.1`; adds `dugite` dependency.
    > 
    > <sup>Written by [Cursor
    Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
    ba098f7f25d85fc6330a41dc718fbfd43fff2d6c. This will update automatically
    on new commits. Configure
    [here](https://cursor.com/dashboard?tab=bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    ---------
    Co-authored-by: 's avatarWill Chen <willchen90@gmail.com>
    d3f3ac3a
github_handlers.ts 23.7 KB