dep/gps/source_errors.go

36 строки
859 B
Go

// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package gps
import (
"github.com/Masterminds/vcs"
"github.com/pkg/errors"
)
// unwrapVcsErr recognizes *vcs.LocalError and *vsc.RemoteError, and returns a form
// preserving the actual vcs command output and error, in addition to the message.
// All other types pass through unchanged.
func unwrapVcsErr(err error) error {
var cause error
var out, msg string
switch t := err.(type) {
case *vcs.LocalError:
cause, out, msg = t.Original(), t.Out(), t.Error()
case *vcs.RemoteError:
cause, out, msg = t.Original(), t.Out(), t.Error()
default:
return err
}
if cause == nil {
cause = errors.New(out)
} else {
cause = errors.Wrap(cause, out)
}
return errors.Wrap(cause, msg)
}