// newFsFile creates a dst Fs from a name but may point to a file. // // It returns a string with the file name if points to a file func newFsFile(remote string) (fs.Fs, string) { fsInfo, configName, fsPath, err := fs.ParseRemote(remote) if err != nil { fs.Stats.Error() log.Fatalf("Failed to create file system for %q: %v", remote, err) } f, err := fsInfo.NewFs(configName, fsPath) switch err { case fs.ErrorIsFile: return f, path.Base(fsPath) case nil: return f, "" default: fs.Stats.Error() log.Fatalf("Failed to create file system for %q: %v", remote, err) } return nil, "" }
// newFsSrc creates a src Fs from a name // // This can point to a file func newFsSrc(remote string) fs.Fs { fsInfo, configName, fsPath, err := fs.ParseRemote(remote) if err != nil { fs.Stats.Error() log.Fatalf("Failed to create file system for %q: %v", remote, err) } f, err := fsInfo.NewFs(configName, fsPath) if err == fs.ErrorIsFile { if !fs.Config.Filter.InActive() { fs.Stats.Error() log.Fatalf("Can't limit to single files when using filters: %v", remote) } // Limit transfers to this file err = fs.Config.Filter.AddFile(path.Base(fsPath)) // Set --no-traverse as only one file fs.Config.NoTraverse = true } if err != nil { fs.Stats.Error() log.Fatalf("Failed to create file system for %q: %v", remote, err) } return f }