62 lines · 1.4 KB · Go
RawDownload
package bisync import (	"context"	"fmt" 	"github.com/rclone/rclone/cmd/bisync/bilib"	"github.com/rclone/rclone/fs"	"github.com/rclone/rclone/fs/filter"	"github.com/rclone/rclone/fs/operations"	"github.com/rclone/rclone/fs/sync") func (b *bisyncRun) fastCopy(ctx context.Context, fsrc, fdst fs.Fs, files bilib.Names, queueName string) error {	if err := b.saveQueue(files, queueName); err != nil {		return err	} 	ctxCopy, filterCopy := filter.AddConfig(b.opt.setDryRun(ctx))	for _, file := range files.ToList() {		if err := filterCopy.AddFile(file); err != nil {			return err		}	} 	return sync.CopyDir(ctxCopy, fdst, fsrc, false)} func (b *bisyncRun) fastDelete(ctx context.Context, f fs.Fs, files bilib.Names, queueName string) error {	if err := b.saveQueue(files, queueName); err != nil {		return err	} 	transfers := fs.GetConfig(ctx).Transfers	ctxRun := b.opt.setDryRun(ctx) 	objChan := make(fs.ObjectsChan, transfers)	errChan := make(chan error, 1)	go func() {		errChan <- operations.DeleteFiles(ctxRun, objChan)	}()	err := operations.ListFn(ctxRun, f, func(obj fs.Object) {		remote := obj.Remote()		if files.Has(remote) {			objChan <- obj		}	})	close(objChan)	opErr := <-errChan	if err == nil {		err = opErr	}	return err} func (b *bisyncRun) saveQueue(files bilib.Names, jobName string) error {	if !b.opt.SaveQueues {		return nil	}	queueFile := fmt.Sprintf("%s.%s.que", b.basePath, jobName)	return files.Save(queueFile)}