mirror of
https://github.com/morluto/rea.git
synced 2026-11-12 09:52:27 +00:00
fix(reference): preserve physical failures across late cancellation (#10072)
* fix(reference): preserve physical failures across late cancellation * fix(reference): retain late cancellation alongside read failures * fix(reference): preserve metadata errors through cancellation * fix(reference): retain directory failure identity * fix(reference): preserve parallel physical and cancellation outcomes * fix(reference): preserve optional Git metadata absence
This commit is contained in:
1 parent
3ad2e214be
commit
0e0af455f2
13 files changed
+781
-199
No files matched your search
@@ -33,12 +33,23 @@ export const readReferenceSource = async (
|
||||
resources: ArtifactResourceScope,
|
||||
options: ReferenceSourceReaderOptions = {},
|
||||
): Promise<ReferenceSourceResult<ReferenceSourceRead>> => {
|
||||
let result: ReferenceSourceResult<ReferenceSourceRead>;
|
||||
try {
|
||||
return await resources.run(() => readSource(root, resources, options));
|
||||
result = await resources.run(() => readSource(root, resources, options));
|
||||
} catch (cause: unknown) {
|
||||
if (!(cause instanceof ArtifactReaderFailure)) throw cause;
|
||||
return err(referenceSourceResourceFailure(cause));
|
||||
result = err(referenceSourceResourceFailure(cause));
|
||||
}
|
||||
if (
|
||||
!result.ok &&
|
||||
result.error.code !== "cancelled" &&
|
||||
options.signal?.aborted
|
||||
)
|
||||
return err({
|
||||
...result.error,
|
||||
secondaryCancellation: { cause: options.signal.reason },
|
||||
});
|
||||
return result;
|
||||
};
|
||||
|
||||
const readSource = async (
|
||||
@@ -99,6 +110,9 @@ const readSource = async (
|
||||
tag: "reference-source-reader",
|
||||
code: "io",
|
||||
message: state.rootFailure.message,
|
||||
...(state.rootFailureCause === undefined
|
||||
? {}
|
||||
: { cause: state.rootFailureCause.value }),
|
||||
partial: read,
|
||||
});
|
||||
return traversal.ok ? ok(read) : err({ ...traversal.error, partial: read });
|
||||
|
||||
Reference in new issue
Block a user