Replace native Git with Dugite to support users without Git installed (#1760)
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: Will Chen <willchen90@gmail.com>
This commit is contained in:
committed by
GitHub
parent
a7bcec220a
commit
d3f3ac3ae1
@@ -1,13 +1,12 @@
|
||||
import { db } from "../../db";
|
||||
import { versions, apps } from "../../db/schema";
|
||||
import { eq, and } from "drizzle-orm";
|
||||
import fs from "node:fs";
|
||||
import git from "isomorphic-git";
|
||||
import { getDyadAppPath } from "../../paths/paths";
|
||||
import { neon } from "@neondatabase/serverless";
|
||||
|
||||
import log from "electron-log";
|
||||
import { getNeonClient } from "@/neon_admin/neon_management_client";
|
||||
import { getCurrentCommitHash } from "./git_utils";
|
||||
|
||||
const logger = log.scope("neon_timestamp_utils");
|
||||
|
||||
@@ -62,11 +61,7 @@ export async function storeDbTimestampAtCurrentVersion({
|
||||
|
||||
// 2. Get the current commit hash
|
||||
const appPath = getDyadAppPath(app.path);
|
||||
const currentCommitHash = await git.resolveRef({
|
||||
fs,
|
||||
dir: appPath,
|
||||
ref: "HEAD",
|
||||
});
|
||||
const currentCommitHash = await getCurrentCommitHash({ path: appPath });
|
||||
|
||||
logger.info(`Current commit hash: ${currentCommitHash}`);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user