fix(reference): preserve import cancellation provenance (#9597)

* fix(reference): preserve import cancellation reason

* test(reference): cover null cancellation during failed cleanup

* test(reference): always release fixture directory
This commit is contained in:
morluto authored and GitHub committed 2026-11-09 19:42:00 +08:00
1 parent e66e92904e
commit e8d1bbc98b
9 files changed
+149 -31

No files matched your search

+7 -4
View File
@@ -39,9 +39,11 @@ const failure = (
});
const cancelled = (
signal: AbortSignal | undefined,
partial?: ReferenceSourceRead,
): ReferenceSourceImportError => ({
...failure("cancelled", "Reference source import cancelled"),
...(signal?.aborted === true ? { cause: signal.reason } : {}),
...(partial === undefined ? {} : { partial }),
});
@@ -168,11 +170,11 @@ export const importReferenceSource = async (
options: ReferenceSourceImportOptions,
resources: ArtifactResourceScope,
): Promise<Result<HistoricalSourceGraph, ReferenceSourceImportError>> => {
if (isAborted(options.signal)) return err(cancelled());
if (isAborted(options.signal)) return err(cancelled(options.signal));
const prepared = await prepareReferenceSourceImport(options, resources);
if (!prepared.ok) return prepared;
const { ignored, root, secrets } = prepared.value;
if (isAborted(options.signal)) return err(cancelled());
if (isAborted(options.signal)) return err(cancelled(options.signal));
const exclusions: HistoricalSourceGraphInput["exclusions"] = [];
const shouldExclude = createShouldExclude(exclusions, secrets, ignored);
@@ -201,13 +203,14 @@ export const importReferenceSource = async (
const vcs = vcsResult.value;
if (isAborted(options.signal)) return err(cancelled(readResult.value));
if (isAborted(options.signal))
return err(cancelled(options.signal, readResult.value));
const read = readResult.value;
const { entries, relationships, parseFailures, limitations } =
parseReferenceSourceEntries(read, exclusions, options.signal);
if (isAborted(options.signal)) return err(cancelled(read));
if (isAborted(options.signal)) return err(cancelled(options.signal, read));
const uniqueRelationships = deduplicateRelationships(relationships);
const uniqueFailures = normalizeHistoricalSourceParseFailures(parseFailures);