Skip to content

Commit 311cc7a

Browse files
committed
api,auth,errors,httputil,lfs,transfer: wrap errors
1 parent 8fd3774 commit 311cc7a

11 files changed

+42
-34
lines changed

api/api.go

+9-11
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,12 @@ func Batch(cfg *config.Configuration, objects []*ObjectResource, operation strin
6363
o := &batchRequest{Operation: operation, Objects: objects, TransferAdapterNames: transferAdapters}
6464
by, err := json.Marshal(o)
6565
if err != nil {
66-
return nil, "", errors.Error(err)
66+
return nil, "", errors.Wrap(err, "batch request")
6767
}
6868

6969
req, err := NewBatchRequest(cfg, operation)
7070
if err != nil {
71-
return nil, "", errors.Error(err)
71+
return nil, "", errors.Wrap(err, "batch request")
7272
}
7373

7474
req.Header.Set("Content-Type", MediaType)
@@ -81,7 +81,6 @@ func Batch(cfg *config.Configuration, objects []*ObjectResource, operation strin
8181
res, bresp, err := DoBatchRequest(cfg, req)
8282

8383
if err != nil {
84-
8584
if res == nil {
8685
return nil, "", errors.NewRetriableError(err)
8786
}
@@ -97,17 +96,16 @@ func Batch(cfg *config.Configuration, objects []*ObjectResource, operation strin
9796

9897
switch res.StatusCode {
9998
case 404, 410:
100-
tracerx.Printf("api: batch not implemented: %d", res.StatusCode)
101-
return nil, "", errors.NewNotImplementedError(nil)
99+
return nil, "", errors.NewNotImplementedError(errors.Errorf("api: batch not implemented: %d", res.StatusCode))
102100
}
103101

104102
tracerx.Printf("api error: %s", err)
105-
return nil, "", errors.Error(err)
103+
return nil, "", errors.Wrap(err, "batch response")
106104
}
107105
httputil.LogTransfer(cfg, "lfs.batch", res)
108106

109107
if res.StatusCode != 200 {
110-
return nil, "", errors.Error(fmt.Errorf("Invalid status for %s: %d", httputil.TraceHttpReq(req), res.StatusCode))
108+
return nil, "", errors.Errorf("Invalid status for %s: %d", httputil.TraceHttpReq(req), res.StatusCode)
111109
}
112110

113111
return bresp.Objects, bresp.TransferAdapterName, nil
@@ -140,7 +138,7 @@ func Legacy(cfg *config.Configuration, objects []*ObjectResource, operation stri
140138
func DownloadCheck(cfg *config.Configuration, oid string) (*ObjectResource, error) {
141139
req, err := NewRequest(cfg, "GET", oid)
142140
if err != nil {
143-
return nil, errors.Error(err)
141+
return nil, errors.Wrap(err, "download check")
144142
}
145143

146144
res, obj, err := DoLegacyRequest(cfg, req)
@@ -152,7 +150,7 @@ func DownloadCheck(cfg *config.Configuration, oid string) (*ObjectResource, erro
152150

153151
_, err = obj.NewRequest("download", "GET")
154152
if err != nil {
155-
return nil, errors.Error(err)
153+
return nil, errors.Wrap(err, "download check")
156154
}
157155

158156
return obj, nil
@@ -167,12 +165,12 @@ func UploadCheck(cfg *config.Configuration, oid string, size int64) (*ObjectReso
167165

168166
by, err := json.Marshal(reqObj)
169167
if err != nil {
170-
return nil, errors.Error(err)
168+
return nil, errors.Wrap(err, "upload check")
171169
}
172170

173171
req, err := NewRequest(cfg, "POST", oid)
174172
if err != nil {
175-
return nil, errors.Error(err)
173+
return nil, errors.Wrap(err, "upload check")
176174
}
177175

178176
req.Header.Set("Content-Type", MediaType)

api/download_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ func TestDownloadAPIError(t *testing.T) {
321321
return
322322
}
323323

324-
expected := "LFS: " + fmt.Sprintf(httputil.GetDefaultError(404), server.URL+"/media/objects/oid")
324+
expected := fmt.Sprintf(httputil.GetDefaultError(404), server.URL+"/media/objects/oid")
325325
if err.Error() != expected {
326326
t.Fatalf("Expected: %s\nGot: %s", expected, err.Error())
327327
}

api/upload_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@ func TestUploadVerifyError(t *testing.T) {
581581
t.Fatal("should not panic")
582582
}
583583

584-
expected := "LFS: " + fmt.Sprintf(httputil.GetDefaultError(404), server.URL+"/verify")
584+
expected := fmt.Sprintf(httputil.GetDefaultError(404), server.URL+"/verify")
585585
if err.Error() != expected {
586586
t.Fatalf("Expected: %s\nGot: %s", expected, err.Error())
587587
}

api/verify.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ func VerifyUpload(cfg *config.Configuration, obj *ObjectResource) error {
2121

2222
req, err := obj.NewRequest("verify", "POST")
2323
if err != nil {
24-
return errors.Error(err)
24+
return errors.Wrap(err, "verify")
2525
}
2626

2727
by, err := json.Marshal(obj)
2828
if err != nil {
29-
return errors.Error(err)
29+
return errors.Wrap(err, "verify")
3030
}
3131

3232
req.Header.Set("Content-Type", MediaType)

auth/credentials.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func GetCreds(cfg *config.Configuration, req *http.Request) (Creds, error) {
3434

3535
credsUrl, err := getCredURLForAPI(cfg, req)
3636
if err != nil {
37-
return nil, errors.Error(err)
37+
return nil, errors.Wrap(err, "creds")
3838
}
3939

4040
if credsUrl == nil {

errors/errors.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,16 @@ func New(message string) error {
6262
return errors.New(message)
6363
}
6464

65-
// Error wraps an error with an empty message.
66-
func Error(err error) error {
67-
return Wrapf(err, "")
65+
// Errorf formats according to a format specifier and returns the string
66+
// as a value that satisfies error.
67+
// Errorf also records the stack trace at the point it was called.
68+
func Errorf(format string, args ...interface{}) error {
69+
return errors.Errorf(format, args...)
70+
}
71+
72+
// Wrap wraps an error with an additional message.
73+
func Wrap(err error, msg string) error {
74+
return newWrappedError(err, msg)
6875
}
6976

7077
// Wrapf wraps an error with an additional formatted message.

httputil/request.go

+7-4
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,16 @@ func (e *ClientError) Error() string {
4545
// Internal http request management
4646
func doHttpRequest(cfg *config.Configuration, req *http.Request, creds auth.Creds) (*http.Response, error) {
4747
var (
48-
res *http.Response
49-
err error
48+
res *http.Response
49+
cause string
50+
err error
5051
)
5152

5253
if cfg.NtlmAccess(auth.GetOperationForRequest(req)) {
54+
cause = "ntlm"
5355
res, err = doNTLMRequest(cfg, req, true)
5456
} else {
57+
cause = "http"
5558
res, err = NewHttpClient(cfg, req.Host).Do(req)
5659
}
5760

@@ -69,7 +72,7 @@ func doHttpRequest(cfg *config.Configuration, req *http.Request, creds auth.Cred
6972
SetAuthType(cfg, req, res)
7073
doHttpRequest(cfg, req, creds)
7174
} else {
72-
err = errors.Error(err)
75+
err = errors.Wrap(err, cause)
7376
}
7477
} else {
7578
err = handleResponse(cfg, res, creds)
@@ -143,7 +146,7 @@ func DoHttpRequestWithRedirects(cfg *config.Configuration, req *http.Request, vi
143146
}
144147

145148
if _, err := seeker.Seek(0, 0); err != nil {
146-
return res, errors.Error(err)
149+
return res, errors.Wrap(err, "request retry")
147150
}
148151
redirectedReq.Body = realBody
149152
redirectedReq.ContentLength = req.ContentLength

httputil/response.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func handleResponse(cfg *config.Configuration, res *http.Response, creds auth.Cr
7474
if len(cliErr.Message) == 0 {
7575
err = defaultError(res)
7676
} else {
77-
err = errors.Error(cliErr)
77+
err = errors.Wrap(cliErr, "http")
7878
}
7979
}
8080

@@ -100,7 +100,7 @@ func defaultError(res *http.Response) error {
100100
msgFmt = defaultErrors[500] + fmt.Sprintf(" from HTTP %d", res.StatusCode)
101101
}
102102

103-
return errors.Error(fmt.Errorf(msgFmt, res.Request.URL))
103+
return errors.Errorf(msgFmt, res.Request.URL)
104104
}
105105

106106
func SetErrorResponseContext(cfg *config.Configuration, err error, res *http.Response) {

lfs/pointer_smudge.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -130,14 +130,14 @@ func readLocalFile(writer io.Writer, ptr *Pointer, mediafile string, workingfile
130130
ext, ok := registeredExts[ptrExt.Name]
131131
if !ok {
132132
err := fmt.Errorf("Extension '%s' is not configured.", ptrExt.Name)
133-
return errors.Error(err)
133+
return errors.Wrap(err, "smudge")
134134
}
135135
ext.Priority = ptrExt.Priority
136136
extensions[ext.Name] = ext
137137
}
138138
exts, err := config.SortExtensions(extensions)
139139
if err != nil {
140-
return errors.Error(err)
140+
return errors.Wrap(err, "smudge")
141141
}
142142

143143
// pipe extensions in reverse order
@@ -151,7 +151,7 @@ func readLocalFile(writer io.Writer, ptr *Pointer, mediafile string, workingfile
151151

152152
response, err := pipeExtensions(request)
153153
if err != nil {
154-
return errors.Error(err)
154+
return errors.Wrap(err, "smudge")
155155
}
156156

157157
actualExts := make(map[string]*pipeExtResult)
@@ -163,18 +163,18 @@ func readLocalFile(writer io.Writer, ptr *Pointer, mediafile string, workingfile
163163
oid := response.results[0].oidIn
164164
if ptr.Oid != oid {
165165
err = fmt.Errorf("Actual oid %s during smudge does not match expected %s", oid, ptr.Oid)
166-
return errors.Error(err)
166+
return errors.Wrap(err, "smudge")
167167
}
168168

169169
for _, expected := range ptr.Extensions {
170170
actual := actualExts[expected.Name]
171171
if actual.name != expected.Name {
172172
err = fmt.Errorf("Actual extension name '%s' does not match expected '%s'", actual.name, expected.Name)
173-
return errors.Error(err)
173+
return errors.Wrap(err, "smudge")
174174
}
175175
if actual.oidOut != expected.Oid {
176176
err = fmt.Errorf("Actual oid %s for extension '%s' does not match expected %s", actual.oidOut, expected.Name, expected.Oid)
177-
return errors.Error(err)
177+
return errors.Wrap(err, "smudge")
178178
}
179179
}
180180

transfer/basic_upload.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func (a *basicUploadAdapter) DoTransfer(ctx interface{}, t *Transfer, cb Transfe
6969

7070
f, err := os.OpenFile(t.Path, os.O_RDONLY, 0644)
7171
if err != nil {
72-
return errors.Error(err)
72+
return errors.Wrap(err, "basic upload")
7373
}
7474
defer f.Close()
7575

transfer/tus_upload.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func (a *tusUploadAdapter) DoTransfer(ctx interface{}, t *Transfer, cb TransferP
7878
// Open file for uploading
7979
f, err := os.OpenFile(t.Path, os.O_RDONLY, 0644)
8080
if err != nil {
81-
return errors.Error(err)
81+
return errors.Wrap(err, "tus upload")
8282
}
8383
defer f.Close()
8484

@@ -90,7 +90,7 @@ func (a *tusUploadAdapter) DoTransfer(ctx interface{}, t *Transfer, cb TransferP
9090
advanceCallbackProgress(cb, t, offset)
9191
_, err := f.Seek(offset, os.SEEK_CUR)
9292
if err != nil {
93-
return errors.Error(err)
93+
return errors.Wrap(err, "tus upload")
9494
}
9595
}
9696

0 commit comments

Comments
 (0)