From 34c3078a09cedccee49246919305d5b311cd8d54 Mon Sep 17 00:00:00 2001 From: rubyist Date: Mon, 1 Jun 2015 11:34:07 -0400 Subject: [PATCH] If the batch operation fails, fall back to individual --- lfs/transfer_queue.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lfs/transfer_queue.go b/lfs/transfer_queue.go index 3dcb90bf..9fd78b0d 100644 --- a/lfs/transfer_queue.go +++ b/lfs/transfer_queue.go @@ -116,8 +116,7 @@ func (q *TransferQueue) processIndividual() { // processBatch processes the queue of transfers using the batch endpoint, // making only one POST call for all objects. The results are then handed // off to the transfer workers. -func (q *TransferQueue) processBatch() { - q.files = 0 +func (q *TransferQueue) processBatch() error { transfers := make([]*objectResource, 0, len(q.transferables)) for _, t := range q.transferables { transfers = append(transfers, &objectResource{Oid: t.Oid(), Size: t.Size()}) @@ -125,11 +124,11 @@ func (q *TransferQueue) processBatch() { objects, err := Batch(transfers) if err != nil { - q.errorc <- err - sendApiEvent(apiEventFail) - return + return err } + q.files = 0 + for _, o := range objects { if _, ok := o.Links[q.transferKind]; ok { // This object needs to be transfered @@ -146,6 +145,7 @@ func (q *TransferQueue) processBatch() { q.bar.Prefix(fmt.Sprintf("(%d of %d files) ", q.finished, q.files)) q.bar.Start() sendApiEvent(apiEventSuccess) // Wake up transfer workers + return nil } // Process starts the transfer queue and displays a progress bar. Process will @@ -210,7 +210,9 @@ func (q *TransferQueue) Process() { } if Config.BatchTransfer() { - q.processBatch() + if err := q.processBatch(); err != nil { + q.processIndividual() + } } else { q.processIndividual() }