Look for Fs in the cache rather than calling NewFs directly

This will save operations when rclone is used in remote control mode
or with the same remote multiple times in the command line.
This commit is contained in:
Nick Craig-Wood 2019-05-23 13:12:09 +01:00
parent 206e1caa99
commit 8ee6034b23
5 changed files with 12 additions and 7 deletions

View File

@ -20,6 +20,7 @@ import (
"github.com/ncw/rclone/backend/crypt" "github.com/ncw/rclone/backend/crypt"
"github.com/ncw/rclone/fs" "github.com/ncw/rclone/fs"
"github.com/ncw/rclone/fs/cache"
"github.com/ncw/rclone/fs/config" "github.com/ncw/rclone/fs/config"
"github.com/ncw/rclone/fs/config/configmap" "github.com/ncw/rclone/fs/config/configmap"
"github.com/ncw/rclone/fs/config/configstruct" "github.com/ncw/rclone/fs/config/configstruct"
@ -481,7 +482,7 @@ func NewFs(name, rootPath string, m configmap.Mapper) (fs.Fs, error) {
return nil, errors.Wrapf(err, "failed to create cache directory %v", f.opt.TempWritePath) return nil, errors.Wrapf(err, "failed to create cache directory %v", f.opt.TempWritePath)
} }
f.opt.TempWritePath = filepath.ToSlash(f.opt.TempWritePath) f.opt.TempWritePath = filepath.ToSlash(f.opt.TempWritePath)
f.tempFs, err = fs.NewFs(f.opt.TempWritePath) f.tempFs, err = cache.Get(f.opt.TempWritePath)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "failed to create temp fs: %v", err) return nil, errors.Wrapf(err, "failed to create temp fs: %v", err)
} }

View File

@ -9,6 +9,7 @@ import (
"time" "time"
"github.com/ncw/rclone/fs" "github.com/ncw/rclone/fs"
"github.com/ncw/rclone/fs/cache"
"github.com/ncw/rclone/fs/config/configmap" "github.com/ncw/rclone/fs/config/configmap"
"github.com/ncw/rclone/fs/config/configstruct" "github.com/ncw/rclone/fs/config/configstruct"
"github.com/ncw/rclone/fs/hash" "github.com/ncw/rclone/fs/hash"
@ -342,7 +343,7 @@ func NewFs(name, root string, m configmap.Mapper) (fs.Fs, error) {
if configName != "local" { if configName != "local" {
rootString = configName + ":" + rootString rootString = configName + ":" + rootString
} }
myFs, err := fs.NewFs(rootString) myFs, err := cache.Get(rootString)
if err != nil { if err != nil {
if err == fs.ErrorIsFile { if err == fs.ErrorIsFile {
return myFs, err return myFs, err

View File

@ -22,6 +22,7 @@ import (
"github.com/ncw/rclone/fs" "github.com/ncw/rclone/fs"
"github.com/ncw/rclone/fs/accounting" "github.com/ncw/rclone/fs/accounting"
"github.com/ncw/rclone/fs/cache"
"github.com/ncw/rclone/fs/config/configflags" "github.com/ncw/rclone/fs/config/configflags"
"github.com/ncw/rclone/fs/config/flags" "github.com/ncw/rclone/fs/config/flags"
"github.com/ncw/rclone/fs/filter" "github.com/ncw/rclone/fs/filter"
@ -83,7 +84,7 @@ func NewFsFile(remote string) (fs.Fs, string) {
fs.CountError(err) fs.CountError(err)
log.Fatalf("Failed to create file system for %q: %v", remote, err) log.Fatalf("Failed to create file system for %q: %v", remote, err)
} }
f, err := fs.NewFs(remote) f, err := cache.Get(remote)
switch err { switch err {
case fs.ErrorIsFile: case fs.ErrorIsFile:
return f, path.Base(fsPath) return f, path.Base(fsPath)
@ -131,7 +132,7 @@ func NewFsSrc(args []string) fs.Fs {
// //
// This must point to a directory // This must point to a directory
func newFsDir(remote string) fs.Fs { func newFsDir(remote string) fs.Fs {
f, err := fs.NewFs(remote) f, err := cache.Get(remote)
if err != nil { if err != nil {
fs.CountError(err) fs.CountError(err)
log.Fatalf("Failed to create file system for %q: %v", remote, err) log.Fatalf("Failed to create file system for %q: %v", remote, err)
@ -180,7 +181,7 @@ func NewFsSrcDstFiles(args []string) (fsrc fs.Fs, srcFileName string, fdst fs.Fs
log.Fatalf("%q is a directory", args[1]) log.Fatalf("%q is a directory", args[1])
} }
} }
fdst, err := fs.NewFs(dstRemote) fdst, err := cache.Get(dstRemote)
switch err { switch err {
case fs.ErrorIsFile: case fs.ErrorIsFile:
fs.CountError(err) fs.CountError(err)

View File

@ -10,6 +10,7 @@ import (
"github.com/ncw/rclone/fs" "github.com/ncw/rclone/fs"
"github.com/ncw/rclone/fs/accounting" "github.com/ncw/rclone/fs/accounting"
"github.com/ncw/rclone/fs/cache"
"github.com/ncw/rclone/fs/filter" "github.com/ncw/rclone/fs/filter"
"github.com/ncw/rclone/fs/fserrors" "github.com/ncw/rclone/fs/fserrors"
"github.com/ncw/rclone/fs/hash" "github.com/ncw/rclone/fs/hash"
@ -123,7 +124,7 @@ func newSyncCopyMove(fdst, fsrc fs.Fs, deleteMode fs.DeleteMode, DoMove bool, de
// Make Fs for --backup-dir if required // Make Fs for --backup-dir if required
if fs.Config.BackupDir != "" { if fs.Config.BackupDir != "" {
var err error var err error
s.backupDir, err = fs.NewFs(fs.Config.BackupDir) s.backupDir, err = cache.Get(fs.Config.BackupDir)
if err != nil { if err != nil {
return nil, fserrors.FatalError(errors.Errorf("Failed to make fs for --backup-dir %q: %v", fs.Config.BackupDir, err)) return nil, fserrors.FatalError(errors.Errorf("Failed to make fs for --backup-dir %q: %v", fs.Config.BackupDir, err))
} }

View File

@ -16,6 +16,7 @@ import (
"github.com/djherbis/times" "github.com/djherbis/times"
"github.com/ncw/rclone/fs" "github.com/ncw/rclone/fs"
fscache "github.com/ncw/rclone/fs/cache"
"github.com/ncw/rclone/fs/config" "github.com/ncw/rclone/fs/config"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
@ -100,7 +101,7 @@ func newCache(ctx context.Context, f fs.Fs, opt *Options) (*cache, error) {
root := filepath.Join(config.CacheDir, "vfs", f.Name(), fRoot) root := filepath.Join(config.CacheDir, "vfs", f.Name(), fRoot)
fs.Debugf(nil, "vfs cache root is %q", root) fs.Debugf(nil, "vfs cache root is %q", root)
f, err := fs.NewFs(root) f, err := fscache.Get(root)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "failed to create cache remote") return nil, errors.Wrap(err, "failed to create cache remote")
} }