Background
oras.Copy is consisted of several different operations. To add more context to the returned error, current implementation is to wrap a description string over the error, e.g. when resolving the source artifact fails, below string will be added to wrap the original error:
|
return ocispec.Descriptor{}, fmt.Errorf("failed to resolve %s: %w", srcRef, err) |
Problem
This method imposes below challenges when processing the obtained error:
- string context are hard to process: taking the above error as an example, it's hard to extract out the added context
failed to resolve $srcRef out elegantly from caller side
- lack information of where the error happens: an error might happens on source target or destination target, it's not reflected in the added context
Solution
Adding a structured error type for error returned by oras.Copy like below
type CopyError struct {
// represents the failing operation, e.g. resolve
Op string
// represents where it fails
On string // enumerable string, source or dest
// Inner error
Err error
}
Background
oras.Copyis consisted of several different operations. To add more context to the returned error, current implementation is to wrap a description string over the error, e.g. when resolving the source artifact fails, below string will be added to wrap the original error:oras-go/copy.go
Line 138 in f296072
Problem
This method imposes below challenges when processing the obtained error:
failed to resolve $srcRefout elegantly from caller sideSolution
Adding a structured error type for error returned by
oras.Copylike below