github.com/git-lfs/git-lfs@v2.5.2+incompatible/tq/verify.go (about) 1 package tq 2 3 import ( 4 "net/http" 5 6 "github.com/git-lfs/git-lfs/lfsapi" 7 "github.com/git-lfs/git-lfs/tools" 8 "github.com/rubyist/tracerx" 9 ) 10 11 const ( 12 maxVerifiesConfigKey = "lfs.transfer.maxverifies" 13 defaultMaxVerifyAttempts = 3 14 ) 15 16 func verifyUpload(c *lfsapi.Client, remote string, t *Transfer) error { 17 action, err := t.Actions.Get("verify") 18 if err != nil { 19 return err 20 } 21 if action == nil { 22 return nil 23 } 24 25 req, err := http.NewRequest("POST", action.Href, nil) 26 if err != nil { 27 return err 28 } 29 30 err = lfsapi.MarshalToRequest(req, struct { 31 Oid string `json:"oid"` 32 Size int64 `json:"size"` 33 }{Oid: t.Oid, Size: t.Size}) 34 if err != nil { 35 return err 36 } 37 38 for key, value := range action.Header { 39 req.Header.Set(key, value) 40 } 41 req.Header.Set("Content-Type", "application/vnd.git-lfs+json") 42 43 mv := c.GitEnv().Int(maxVerifiesConfigKey, defaultMaxVerifyAttempts) 44 mv = tools.MaxInt(defaultMaxVerifyAttempts, mv) 45 req = c.LogRequest(req, "lfs.verify") 46 47 for i := 1; i <= mv; i++ { 48 tracerx.Printf("tq: verify %s attempt #%d (max: %d)", t.Oid[:7], i, mv) 49 50 var res *http.Response 51 if t.Authenticated { 52 res, err = c.Do(req) 53 } else { 54 res, err = c.DoWithAuth(remote, req) 55 } 56 57 if err != nil { 58 tracerx.Printf("tq: verify err: %+v", err.Error()) 59 } else { 60 err = res.Body.Close() 61 break 62 } 63 } 64 return err 65 }