lean into pkg/errors philosophy on wrappin'
This commit is contained in:
parent
311cc7a2af
commit
69acb28d61
@ -140,34 +140,6 @@ func IsAuthError(err error) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsInvalidPointerError indicates an attempt to parse data that was not a
|
|
||||||
// valid pointer.
|
|
||||||
func IsInvalidPointerError(err error) bool {
|
|
||||||
if e, ok := err.(interface {
|
|
||||||
InvalidPointer() bool
|
|
||||||
}); ok {
|
|
||||||
return e.InvalidPointer()
|
|
||||||
}
|
|
||||||
if parent := parentOf(err); parent != nil {
|
|
||||||
return IsInvalidPointerError(parent)
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsInvalidRepoError indicates an operation was attempted from outside a git
|
|
||||||
// repository.
|
|
||||||
func IsInvalidRepoError(err error) bool {
|
|
||||||
if e, ok := err.(interface {
|
|
||||||
InvalidRepo() bool
|
|
||||||
}); ok {
|
|
||||||
return e.InvalidRepo()
|
|
||||||
}
|
|
||||||
if parent := parentOf(err); parent != nil {
|
|
||||||
return IsInvalidRepoError(parent)
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsSmudgeError indicates an error while smudging a files.
|
// IsSmudgeError indicates an error while smudging a files.
|
||||||
func IsSmudgeError(err error) bool {
|
func IsSmudgeError(err error) bool {
|
||||||
if e, ok := err.(interface {
|
if e, ok := err.(interface {
|
||||||
@ -398,34 +370,6 @@ func NewAuthError(err error) error {
|
|||||||
return authError{newWrappedError(err, "Authentication required")}
|
return authError{newWrappedError(err, "Authentication required")}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Definitions for IsInvalidPointerError()
|
|
||||||
|
|
||||||
type invalidPointerError struct {
|
|
||||||
errorWrapper
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e invalidPointerError) InvalidPointer() bool {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewInvalidPointerError(err error) error {
|
|
||||||
return invalidPointerError{newWrappedError(err, "Invalid pointer")}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Definitions for IsInvalidRepoError()
|
|
||||||
|
|
||||||
type invalidRepoError struct {
|
|
||||||
errorWrapper
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e invalidRepoError) InvalidRepo() bool {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewInvalidRepoError(err error) error {
|
|
||||||
return invalidRepoError{newWrappedError(err, "Not in a git repository")}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Definitions for IsSmudgeError()
|
// Definitions for IsSmudgeError()
|
||||||
|
|
||||||
type smudgeError struct {
|
type smudgeError struct {
|
||||||
@ -453,8 +397,9 @@ func (e cleanPointerError) CleanPointerError() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewCleanPointerError(err error, pointer interface{}, bytes []byte) error {
|
func NewCleanPointerError(pointer interface{}, bytes []byte) error {
|
||||||
e := cleanPointerError{newWrappedError(err, "Clean pointer error")}
|
err := New("pointer error")
|
||||||
|
e := cleanPointerError{newWrappedError(err, "clean")}
|
||||||
ErrorSetContext(e, "pointer", pointer)
|
ErrorSetContext(e, "pointer", pointer)
|
||||||
ErrorSetContext(e, "bytes", bytes)
|
ErrorSetContext(e, "bytes", bytes)
|
||||||
return e
|
return e
|
||||||
@ -486,8 +431,8 @@ func (e badPointerKeyError) BadPointerKeyError() bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewBadPointerKeyError(expected, actual string) error {
|
func NewBadPointerKeyError(expected, actual string) error {
|
||||||
err := fmt.Errorf("Error parsing LFS Pointer. Expected key %s, got %s", expected, actual)
|
err := Errorf("Expected key %s, got %s", expected, actual)
|
||||||
return badPointerKeyError{expected, actual, newWrappedError(err, "")}
|
return badPointerKeyError{expected, actual, newWrappedError(err, "pointer parsing")}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Definitions for IsDownloadDeclinedError()
|
// Definitions for IsDownloadDeclinedError()
|
||||||
@ -500,8 +445,8 @@ func (e downloadDeclinedError) DownloadDeclinedError() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDownloadDeclinedError(err error) error {
|
func NewDownloadDeclinedError(err error, msg string) error {
|
||||||
return downloadDeclinedError{newWrappedError(err, "File missing and download is not allowed")}
|
return downloadDeclinedError{newWrappedError(err, msg)}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Definitions for IsRetriableError()
|
// Definitions for IsRetriableError()
|
||||||
|
@ -79,10 +79,16 @@ func handleResponse(cfg *config.Configuration, res *http.Response, creds auth.Cr
|
|||||||
}
|
}
|
||||||
|
|
||||||
if res.StatusCode == 401 {
|
if res.StatusCode == 401 {
|
||||||
|
if err == nil {
|
||||||
|
err = errors.New("api: received status 401")
|
||||||
|
}
|
||||||
return errors.NewAuthError(err)
|
return errors.NewAuthError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if res.StatusCode > 499 && res.StatusCode != 501 && res.StatusCode != 509 {
|
if res.StatusCode > 499 && res.StatusCode != 501 && res.StatusCode != 509 {
|
||||||
|
if err == nil {
|
||||||
|
err = errors.Errorf("api: received status %d", res.StatusCode)
|
||||||
|
}
|
||||||
return errors.NewFatalError(err)
|
return errors.NewFatalError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ func (h *Hook) Upgrade() error {
|
|||||||
// or any of the past versions of this hook.
|
// or any of the past versions of this hook.
|
||||||
func (h *Hook) Uninstall() error {
|
func (h *Hook) Uninstall() error {
|
||||||
if !InRepo() {
|
if !InRepo() {
|
||||||
return errors.NewInvalidRepoError(nil)
|
return errors.New("Not in a git repository")
|
||||||
}
|
}
|
||||||
|
|
||||||
match, err := h.matchesCurrent()
|
match, err := h.matchesCurrent()
|
||||||
|
@ -78,7 +78,7 @@ func copyToTemp(reader io.Reader, fileSize int64, cb progress.CopyCallback) (oid
|
|||||||
|
|
||||||
by, ptr, err := DecodeFrom(reader)
|
by, ptr, err := DecodeFrom(reader)
|
||||||
if err == nil && len(by) < 512 {
|
if err == nil && len(by) < 512 {
|
||||||
err = errors.NewCleanPointerError(err, ptr, by)
|
err = errors.NewCleanPointerError(ptr, by)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,7 +46,6 @@ func PointerSmudge(writer io.Writer, ptr *Pointer, workingfile string, download
|
|||||||
LinkOrCopyFromReference(ptr.Oid, ptr.Size)
|
LinkOrCopyFromReference(ptr.Oid, ptr.Size)
|
||||||
|
|
||||||
stat, statErr := os.Stat(mediafile)
|
stat, statErr := os.Stat(mediafile)
|
||||||
|
|
||||||
if statErr == nil && stat != nil {
|
if statErr == nil && stat != nil {
|
||||||
fileSize := stat.Size()
|
fileSize := stat.Size()
|
||||||
if fileSize == 0 || fileSize != ptr.Size {
|
if fileSize == 0 || fileSize != ptr.Size {
|
||||||
@ -60,7 +59,7 @@ func PointerSmudge(writer io.Writer, ptr *Pointer, workingfile string, download
|
|||||||
if download {
|
if download {
|
||||||
err = downloadFile(writer, ptr, workingfile, mediafile, manifest, cb)
|
err = downloadFile(writer, ptr, workingfile, mediafile, manifest, cb)
|
||||||
} else {
|
} else {
|
||||||
return errors.NewDownloadDeclinedError(nil)
|
return errors.NewDownloadDeclinedError(statErr, "smudge")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
err = readLocalFile(writer, ptr, mediafile, workingfile, cb)
|
err = readLocalFile(writer, ptr, mediafile, workingfile, cb)
|
||||||
|
@ -128,7 +128,7 @@ func (a *adapterBase) worker(workerNum int, ctx interface{}) {
|
|||||||
var err error
|
var err error
|
||||||
if t.Object.IsExpired(time.Now().Add(objectExpirationGracePeriod)) {
|
if t.Object.IsExpired(time.Now().Add(objectExpirationGracePeriod)) {
|
||||||
tracerx.Printf("xfer: adapter %q worker %d found job for %q expired, retrying...", a.Name(), workerNum, t.Object.Oid)
|
tracerx.Printf("xfer: adapter %q worker %d found job for %q expired, retrying...", a.Name(), workerNum, t.Object.Oid)
|
||||||
err = errors.NewRetriableError(fmt.Errorf("lfs/transfer: object %q has expired", t.Object.Oid))
|
err = errors.NewRetriableError(errors.Errorf("lfs/transfer: object %q has expired", t.Object.Oid))
|
||||||
} else if t.Object.Size < 0 {
|
} else if t.Object.Size < 0 {
|
||||||
tracerx.Printf("xfer: adapter %q worker %d found invalid size for %q (got: %d), retrying...", a.Name(), workerNum, t.Object.Oid, t.Object.Size)
|
tracerx.Printf("xfer: adapter %q worker %d found invalid size for %q (got: %d), retrying...", a.Name(), workerNum, t.Object.Oid, t.Object.Size)
|
||||||
err = fmt.Errorf("Git LFS: object %q has invalid size (got: %d)", t.Object.Oid, t.Object.Size)
|
err = fmt.Errorf("Git LFS: object %q has invalid size (got: %d)", t.Object.Oid, t.Object.Size)
|
||||||
|
@ -106,6 +106,7 @@ func (a *basicUploadAdapter) DoTransfer(ctx interface{}, t *Transfer, cb Transfe
|
|||||||
// A status code of 403 likely means that an authentication token for the
|
// A status code of 403 likely means that an authentication token for the
|
||||||
// upload has expired. This can be safely retried.
|
// upload has expired. This can be safely retried.
|
||||||
if res.StatusCode == 403 {
|
if res.StatusCode == 403 {
|
||||||
|
err = errors.New("http: received status 403")
|
||||||
return errors.NewRetriableError(err)
|
return errors.NewRetriableError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,6 +143,7 @@ func (a *tusUploadAdapter) DoTransfer(ctx interface{}, t *Transfer, cb TransferP
|
|||||||
// A status code of 403 likely means that an authentication token for the
|
// A status code of 403 likely means that an authentication token for the
|
||||||
// upload has expired. This can be safely retried.
|
// upload has expired. This can be safely retried.
|
||||||
if res.StatusCode == 403 {
|
if res.StatusCode == 403 {
|
||||||
|
err = errors.New("http: received status 403")
|
||||||
return errors.NewRetriableError(err)
|
return errors.NewRetriableError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user