MCPcopy Create free account
hub / github.com/bearlyai/OpenADE / createRuntimeNodeLocalGitAdapter

Function createRuntimeNodeLocalGitAdapter

projects/runtime-node/src/localGit.ts:157–322  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

155}
156
157export function createRuntimeNodeLocalGitAdapter(): RuntimeNodeGitAdapter {
158 return {
159 async isInstalled() {
160 const result = await git(["--version"])
161 return { installed: result.success, version: result.success ? result.stdout.trim() : undefined }
162 },
163 async isDirectory(params) {
164 const directory = str(asRecord(params), "directory")
165 const root = await repoRoot(directory)
166 if (!root) return { isGitDirectory: false, error: "not a git directory" }
167 const prefix = await git(["rev-parse", "--show-prefix"], directory)
168 return {
169 isGitDirectory: true,
170 repoRoot: root,
171 relativePath: prefix.success ? prefix.stdout.trim().replace(/\/$/, "") : "",
172 mainBranch: await defaultBranch(directory),
173 hasGhCli: await commandExists("gh", ["--version"]),
174 }
175 },
176 async checkGhCli() {
177 return { hasGhCli: await commandExists("gh", ["--version"]) }
178 },
179 async getOrCreateWorkTree(params) {
180 const record = asRecord(params)
181 const repoDir = str(record, "repoDir")
182 const id = str(record, "id")
183 const worktreeDir = await worktreePath(repoDir, id)
184 try {
185 const stat = await fs.stat(worktreeDir)
186 if (stat.isDirectory()) return { worktreeDir, matchingDir: worktreeDir, created: false }
187 } catch {
188 // Create below.
189 }
190 await gitOutput(["worktree", "add", "--detach", worktreeDir, optionalStr(record, "sourceTreeish") ?? "HEAD"], repoDir)
191 return { worktreeDir, matchingDir: worktreeDir, created: true }
192 },
193 async getWorkTreeDiffPatch(params) {
194 const record = asRecord(params)
195 const workDir = await worktreePath(str(record, "repoDir"), str(record, "workTreeId"))
196 return { patch: await gitOutput(["diff", str(record, "compareToCommit")], workDir) }
197 },
198 async getMergeBase(params) {
199 const record = asRecord(params)
200 const workDir = await worktreePath(str(record, "repoDir"), str(record, "workTreeId"))
201 return { mergeBaseCommit: (await gitOutput(["merge-base", "HEAD", str(record, "targetBranch")], workDir)).trim() }
202 },
203 async getSummary(params) {
204 const record = asRecord(params)
205 return summary(await resolveWorkDir(str(record, "repoDir"), optionalStr(record, "workTreeId")))
206 },
207 async getStatus(params) {
208 const record = asRecord(params)
209 const workDir = await resolveWorkDir(str(record, "repoDir"), optionalStr(record, "workTreeId"))
210 const base = await summary(workDir)
211 return {
212 ...base,
213 staged: { ...base.staged, patch: await gitOutput(["diff", "--cached"], workDir) },
214 unstaged: { ...base.unstaged, patch: await gitOutput(["diff"], workDir) },

Callers 1

startRuntimeNodeServeFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected