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  }