59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package lfs
|
|
|
|
// This is like DownloadQueue except it doesn't do the transfer, it just uses
|
|
// the "download" API point to verify that the server has objects
|
|
|
|
type Checkable struct {
|
|
Pointer *WrappedPointer
|
|
object *objectResource
|
|
}
|
|
|
|
func NewCheckable(p *WrappedPointer) *Checkable {
|
|
return &Checkable{Pointer: p}
|
|
}
|
|
|
|
func (d *Checkable) Check() (*objectResource, *WrappedError) {
|
|
obj, wrerr := DownloadCheck(d.Pointer.Oid)
|
|
|
|
if wrerr != nil {
|
|
// Add some extra useful context
|
|
wrerr.Set("oid", d.Pointer.Oid)
|
|
wrerr.Set("name", d.Pointer.Name)
|
|
}
|
|
return obj, wrerr
|
|
}
|
|
|
|
func (d *Checkable) Transfer(cb CopyCallback) *WrappedError {
|
|
// just report completion of check but don't do anything
|
|
cb(d.Size(), d.Size(), int(d.Size()))
|
|
return nil
|
|
}
|
|
|
|
func (d *Checkable) Object() *objectResource {
|
|
return d.object
|
|
}
|
|
|
|
func (d *Checkable) Oid() string {
|
|
return d.Pointer.Oid
|
|
}
|
|
|
|
func (d *Checkable) Size() int64 {
|
|
return d.Pointer.Size
|
|
}
|
|
|
|
func (d *Checkable) Name() string {
|
|
return d.Pointer.Name
|
|
}
|
|
|
|
func (d *Checkable) SetObject(o *objectResource) {
|
|
d.object = o
|
|
}
|
|
|
|
// NewCheckQueue builds a checking queue, allowing `workers` concurrent check operations.
|
|
func NewCheckQueue(files int, size int64, dryRun bool) *TransferQueue {
|
|
q := newTransferQueue(files, size, dryRun)
|
|
// API operation is still download, but it will only perform the API call (check)
|
|
q.transferKind = "download"
|
|
return q
|
|
}
|