mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-24 10:13:11 +02:00
Fix workspace diff default base refs
This commit is contained in:
1 parent
bfe6369ef5
commit
4335e29a93
4 files changed
+230
-20
No files matched your search
@@ -645,6 +645,54 @@ async function resolveHeadSha(cwd: string) {
|
||||
}
|
||||
}
|
||||
|
||||
async function resolveVerifiedGitRef(cwd: string, refName: string) {
|
||||
const trimmed = refName.trim();
|
||||
if (!trimmed) return null;
|
||||
try {
|
||||
await execFileAsync("git", ["-C", cwd, "rev-parse", "--verify", "--quiet", `${trimmed}^{commit}`], {
|
||||
cwd,
|
||||
timeout: GIT_TIMEOUT_MS,
|
||||
maxBuffer: 128 * 1024,
|
||||
});
|
||||
return trimmed;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async function resolveGitUpstreamRef(cwd: string) {
|
||||
try {
|
||||
const upstream = (await execFileAsync(
|
||||
"git",
|
||||
["-C", cwd, "rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{upstream}"],
|
||||
{
|
||||
cwd,
|
||||
timeout: GIT_TIMEOUT_MS,
|
||||
maxBuffer: 128 * 1024,
|
||||
},
|
||||
)).stdout.trim();
|
||||
return upstream ? await resolveVerifiedGitRef(cwd, upstream) : null;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async function resolveInferredDefaultBaseRef(cwd: string) {
|
||||
const upstream = await resolveGitUpstreamRef(cwd);
|
||||
if (upstream) return upstream;
|
||||
|
||||
for (const candidate of ["origin/master", "origin/main", "master", "main"]) {
|
||||
const resolved = await resolveVerifiedGitRef(cwd, candidate);
|
||||
if (resolved) return resolved;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
async function resolveDefaultDiffBaseRef(cwd: string, workspace: WorkspaceDiffTarget) {
|
||||
return workspace.baseRef?.trim() || await resolveInferredDefaultBaseRef(cwd);
|
||||
}
|
||||
|
||||
async function resolveBaseRef(cwd: string, baseRef: string | null, workspace: WorkspaceDiffTarget) {
|
||||
const resolvedBaseRef = baseRef ?? workspace.baseRef ?? null;
|
||||
if (!resolvedBaseRef) {
|
||||
@@ -705,9 +753,16 @@ export function workspaceDiffService() {
|
||||
return {
|
||||
async getDiff(workspace: WorkspaceDiffTarget, query: WorkspaceDiffQueryOptions): Promise<WorkspaceDiffResponse> {
|
||||
const { cwd, repoRoot } = await resolveWorkspacePaths(workspace);
|
||||
const defaultBaseRef = await resolveDefaultDiffBaseRef(cwd, workspace);
|
||||
const workspaceWithDefaultBaseRef = { ...workspace, baseRef: defaultBaseRef };
|
||||
const paths = normalizePathFilters(query.paths);
|
||||
const warnings: WorkspaceDiffWarning[] = [];
|
||||
const { files: filesByPath, baseRef } = await collectFiles({ cwd, workspace, query, paths });
|
||||
const { files: filesByPath, baseRef } = await collectFiles({
|
||||
cwd,
|
||||
workspace: workspaceWithDefaultBaseRef,
|
||||
query,
|
||||
paths,
|
||||
});
|
||||
const allFiles = Array.from(filesByPath.values()).sort((left, right) => left.path.localeCompare(right.path));
|
||||
const cappedFiles = allFiles.slice(0, WORKSPACE_DIFF_CAPS.maxFiles);
|
||||
if (allFiles.length > cappedFiles.length) {
|
||||
@@ -771,7 +826,7 @@ export function workspaceDiffService() {
|
||||
companyId: workspace.companyId,
|
||||
view: query.view,
|
||||
baseRef,
|
||||
defaultBaseRef: workspace.baseRef,
|
||||
defaultBaseRef,
|
||||
headSha: await resolveHeadSha(cwd),
|
||||
includeUntracked: query.includeUntracked,
|
||||
paths,
|
||||
|
||||
Reference in new issue
Block a user