feat(FN-4646): complete Step 2 — capture landed files at merge time

Fusion-Task-Id: FN-4646
Fusion-Task-Lineage: f921098e-3407-40fa-984d-720e0c3248c7
This commit is contained in:
Fusion
2026-05-15 13:03:46 -07:00
committed by gsxdsm
parent a5578d44da
commit 3ffc1e689e
3 changed files with 137 additions and 1 deletions

View File

@@ -7073,6 +7073,7 @@ export async function aiMergeTask(
let filesChanged: number | undefined;
let insertions: number | undefined;
let deletions: number | undefined;
let landedFiles: string[] | undefined;
try {
const statsCommand = selectedPostMergeAuditStrategy === "rebase" && rebaseMergeBaseSha
@@ -7192,9 +7193,32 @@ export async function aiMergeTask(
const recordedInsertions = mergeWasEmpty ? 0 : insertions;
const recordedDeletions = mergeWasEmpty ? 0 : deletions;
if (!isEmptyCommit && !mergeWasEmpty && recordedSha) {
try {
const landedFilesCommand = selectedPostMergeAuditStrategy === "rebase" && rebaseMergeBaseSha
? `git diff --name-only ${quoteArg(`${rebaseMergeBaseSha}..${recordedSha}`)}`
: `git show --name-only --format= ${quoteArg(recordedSha)}`;
const { stdout: landedFilesOutput } = await execAsync(landedFilesCommand, {
cwd: rootDir,
encoding: "utf-8",
maxBuffer: 2 * 1024 * 1024,
});
const parsedLandedFiles = landedFilesOutput
.split(/\r?\n/)
.map((line) => line.trim())
.filter(Boolean);
if (parsedLandedFiles.length > 0) {
landedFiles = Array.from(new Set(parsedLandedFiles));
}
} catch {
// non-fatal
}
}
const mergeDetails: MergeDetails = {
commitSha: recordedSha,
rebaseBaseSha: selectedPostMergeAuditStrategy === "rebase" && !mergeWasEmpty ? rebaseMergeBaseSha : undefined,
landedFiles,
filesChanged: recordedFilesChanged,
insertions: recordedInsertions,
deletions: recordedDeletions,
@@ -7209,7 +7233,10 @@ export async function aiMergeTask(
autoResolvedCount: result.autoResolvedCount,
};
await store.updateTask(taskId, { mergeDetails });
await store.updateTask(taskId, {
mergeDetails,
modifiedFiles: landedFiles && landedFiles.length > 0 ? landedFiles : undefined,
});
if (recordedSha) {
const currentTask = await store.getTask(taskId);
if (currentTask?.lineageId) {