MCPcopy
hub / github.com/git-lfs/git-lfs / DoTransfer

Method DoTransfer

tq/custom.go:259–341  ·  view source on GitHub ↗
(ctx interface{}, t *Transfer, cb ProgressCallback, authOkFunc func())

Source from the content-addressed store, hash-verified

257}
258
259func (a *customAdapter) DoTransfer(ctx interface{}, t *Transfer, cb ProgressCallback, authOkFunc func()) error {
260 if ctx == nil {
261 return errors.New(tr.Tr.Get("custom transfer %q was not properly initialized, see previous errors", a.name))
262 }
263
264 customCtx, ok := ctx.(*customAdapterWorkerContext)
265 if !ok {
266 return errors.New(tr.Tr.Get("context object for custom transfer %q was of the wrong type", a.name))
267 }
268 var authCalled bool
269
270 rel, err := t.Rel(a.getOperationName())
271 if err != nil {
272 return err
273 }
274 if rel == nil && !a.standalone {
275 return errors.New(tr.Tr.Get("Object %s not found on the server.", t.Oid))
276 }
277 var req *customAdapterTransferRequest
278 if a.direction == Upload {
279 req = NewCustomAdapterUploadRequest(t.Oid, t.Size, t.Path, rel)
280 } else {
281 req = NewCustomAdapterDownloadRequest(t.Oid, t.Size, rel)
282 }
283 if err = a.sendMessage(customCtx, req); err != nil {
284 return err
285 }
286
287 // 1..N replies (including progress & one of download / upload)
288 var complete bool
289 for !complete {
290 resp, err := a.readResponse(customCtx)
291 if err != nil {
292 return err
293 }
294 var wasAuthOk bool
295 switch resp.Event {
296 case "progress":
297 // Progress
298 if resp.Oid != t.Oid {
299 return errors.New(tr.Tr.Get("unexpected OID %q in response, expecting %q", resp.Oid, t.Oid))
300 }
301 if cb != nil {
302 cb(t.Name, t.Size, resp.BytesSoFar, resp.BytesSinceLast)
303 }
304 wasAuthOk = resp.BytesSoFar > 0
305 case "complete":
306 // Download/Upload complete
307 if resp.Oid != t.Oid {
308 return errors.New(tr.Tr.Get("unexpected OID %q in response, expecting %q", resp.Oid, t.Oid))
309 }
310 if resp.Error != nil {
311 return errors.New(tr.Tr.Get("error transferring %q: %v", t.Oid, resp.Error))
312 }
313 if a.direction == Download {
314 // So we don't have to blindly trust external providers, check SHA
315 if err = tools.VerifyFileHash(t.Oid, resp.Path); err != nil {
316 return errors.New(tr.Tr.Get("downloaded file failed checks: %v", err))

Callers

nothing calls this directly

Calls 11

getOperationNameMethod · 0.95
sendMessageMethod · 0.95
readResponseMethod · 0.95
NewFunction · 0.92
VerifyFileHashFunction · 0.92
verifyUploadFunction · 0.85
RelMethod · 0.80
GetMethod · 0.65

Tested by

no test coverage detected