Show every change on the current branch relative to its base in the Changed/Staged/Last turn dropdown. The base comes from the branch's reflog record or an explicit per-branch user choice (persisted), never a main/master guess; when git has no record the user picks a base once from a searchable branch list. - server: GET /api/git/branch-base (reflog-derived base), GET /api/git/range-files (name-status -z with rename/copy destination paths and -C copy detection) - shared UI: optional getBranchBase/getGitRangeFiles runtime APIs with boundary parsing; persisted per-branch overrides keyed by runtime+directory+branch - DiffView: branch scope with confirmed-unavailability coercion of persisted tabs (detached HEAD, default-branch checkout, metadata settled without a default), range-invalidated diff cache guarded against stale completions, bounded branch-metadata retry, read-only diff actions in branch scope; hidden in VS Code - helper module branchDiffScope.ts with tests for coercion, availability, race conditions, and retry exhaustion
86 lines
3.6 KiB
TypeScript
86 lines
3.6 KiB
TypeScript
import * as gitApiHttp from '@openchamber/ui/lib/gitApiHttp';
|
|
import type {
|
|
GitAPI,
|
|
CreateGitCommitOptions,
|
|
GitLogOptions,
|
|
} from '@openchamber/ui/lib/api/types';
|
|
|
|
export const createWebGitAPI = (): GitAPI => ({
|
|
checkIsGitRepository: gitApiHttp.checkIsGitRepository,
|
|
getGitStatus: gitApiHttp.getGitStatus,
|
|
getGitDiff: gitApiHttp.getGitDiff,
|
|
getGitFileDiff: gitApiHttp.getGitFileDiff,
|
|
getGitRangeDiff: gitApiHttp.getGitRangeDiff,
|
|
getGitRangeFiles: gitApiHttp.getGitRangeFiles,
|
|
getBranchBase: gitApiHttp.getBranchBase,
|
|
revertGitFile: gitApiHttp.revertGitFile,
|
|
stageGitFile: gitApiHttp.stageGitFile,
|
|
stageGitFiles: gitApiHttp.stageGitFiles,
|
|
unstageGitFile: gitApiHttp.unstageGitFile,
|
|
unstageGitFiles: gitApiHttp.unstageGitFiles,
|
|
stageGitHunk: gitApiHttp.stageGitHunk,
|
|
unstageGitHunk: gitApiHttp.unstageGitHunk,
|
|
revertGitHunk: gitApiHttp.revertGitHunk,
|
|
isLinkedWorktree: gitApiHttp.isLinkedWorktree,
|
|
getGitBranches: gitApiHttp.getGitBranches,
|
|
deleteGitBranch: gitApiHttp.deleteGitBranch as GitAPI['deleteGitBranch'],
|
|
deleteRemoteBranch: gitApiHttp.deleteRemoteBranch as GitAPI['deleteRemoteBranch'],
|
|
removeRemote: gitApiHttp.removeRemote as GitAPI['removeRemote'],
|
|
generateCommitMessage: gitApiHttp.generateCommitMessage,
|
|
generatePullRequestDescription: gitApiHttp.generatePullRequestDescription,
|
|
listGitWorktrees: gitApiHttp.listGitWorktrees,
|
|
validateGitWorktree: gitApiHttp.validateGitWorktree,
|
|
createGitWorktree: gitApiHttp.createGitWorktree,
|
|
deleteGitWorktree: gitApiHttp.deleteGitWorktree,
|
|
validateWorktreeDirectory: gitApiHttp.validateWorktreeDirectory,
|
|
canonicalizeWorktreeState: gitApiHttp.canonicalizeWorktreeState,
|
|
createGitCommit(directory: string, message: string, options?: CreateGitCommitOptions) {
|
|
return gitApiHttp.createGitCommit(directory, message, options);
|
|
},
|
|
gitPush: gitApiHttp.gitPush,
|
|
gitPull: gitApiHttp.gitPull,
|
|
gitFetch: gitApiHttp.gitFetch,
|
|
listGitStashes: gitApiHttp.listGitStashes,
|
|
countGitStashFiles: gitApiHttp.countGitStashFiles,
|
|
stashGitChanges: gitApiHttp.stashGitChanges,
|
|
applyGitStash: gitApiHttp.applyGitStash,
|
|
popGitStash: gitApiHttp.popGitStash,
|
|
dropGitStash: gitApiHttp.dropGitStash,
|
|
checkoutBranch: gitApiHttp.checkoutBranch,
|
|
createBranch: gitApiHttp.createBranch,
|
|
renameBranch: gitApiHttp.renameBranch,
|
|
getGitLog(directory: string, options?: GitLogOptions) {
|
|
return gitApiHttp.getGitLog(directory, options);
|
|
},
|
|
getCommitFiles: gitApiHttp.getCommitFiles,
|
|
getCurrentGitIdentity: gitApiHttp.getCurrentGitIdentity,
|
|
hasLocalIdentity: gitApiHttp.hasLocalIdentity,
|
|
setGitIdentity: gitApiHttp.setGitIdentity,
|
|
getGitIdentities: gitApiHttp.getGitIdentities,
|
|
createGitIdentity: gitApiHttp.createGitIdentity,
|
|
updateGitIdentity: gitApiHttp.updateGitIdentity,
|
|
deleteGitIdentity: gitApiHttp.deleteGitIdentity,
|
|
getRemotes: gitApiHttp.getRemotes,
|
|
rebase: gitApiHttp.rebase,
|
|
abortRebase: gitApiHttp.abortRebase,
|
|
continueRebase: gitApiHttp.continueRebase,
|
|
merge: gitApiHttp.merge,
|
|
abortMerge: gitApiHttp.abortMerge,
|
|
continueMerge: gitApiHttp.continueMerge,
|
|
checkoutCommit: gitApiHttp.checkoutCommit,
|
|
cherryPick: gitApiHttp.cherryPick,
|
|
revertCommit: gitApiHttp.revertCommit,
|
|
resetToCommit: gitApiHttp.resetToCommit,
|
|
stash: gitApiHttp.stash,
|
|
stashPop: gitApiHttp.stashPop,
|
|
getConflictDetails: gitApiHttp.getConflictDetails,
|
|
worktree: {
|
|
list: gitApiHttp.listGitWorktrees,
|
|
validate: gitApiHttp.validateGitWorktree,
|
|
bootstrapStatus: gitApiHttp.getGitWorktreeBootstrapStatus,
|
|
preview: gitApiHttp.previewGitWorktree,
|
|
create: gitApiHttp.createGitWorktree,
|
|
remove: gitApiHttp.deleteGitWorktree,
|
|
},
|
|
});
|