fs: Use connection string config as highest priority config #4996

This commit is contained in:
Nick Craig-Wood 2021-02-10 14:40:36 +00:00
parent 28f6efe955
commit e25ac4dcf0
3 changed files with 17 additions and 12 deletions

View File

@ -42,7 +42,7 @@ func Authorize(ctx context.Context, args []string, noAutoBrowser bool) error {
Data.SetValue(name, ConfigClientSecret, args[2]) Data.SetValue(name, ConfigClientSecret, args[2])
} }
m := fs.ConfigMap(f, name) m := fs.ConfigMap(f, name, nil)
f.Config(ctx, name, m) f.Config(ctx, name, m)
return nil return nil
} }

View File

@ -274,7 +274,7 @@ func RemoteConfig(ctx context.Context, name string) {
fmt.Printf("Remote config\n") fmt.Printf("Remote config\n")
f := mustFindByName(name) f := mustFindByName(name)
if f.Config != nil { if f.Config != nil {
m := fs.ConfigMap(f, name) m := fs.ConfigMap(f, name, nil)
f.Config(ctx, name, m) f.Config(ctx, name, m)
} }
} }

View File

@ -1205,23 +1205,22 @@ func MustFind(name string) *RegInfo {
// ParseRemote deconstructs a path into configName, fsPath, looking up // ParseRemote deconstructs a path into configName, fsPath, looking up
// the fsName in the config file (returning NotFoundInConfigFile if not found) // the fsName in the config file (returning NotFoundInConfigFile if not found)
func ParseRemote(path string) (fsInfo *RegInfo, configName, fsPath string, err error) { func ParseRemote(path string) (fsInfo *RegInfo, configName, fsPath string, connectionStringConfig configmap.Simple, err error) {
parsed, err := fspath.Parse(path) parsed, err := fspath.Parse(path)
if err != nil { if err != nil {
return nil, "", "", err return nil, "", "", nil, err
} }
configName, fsPath = parsed.Name, parsed.Path configName, fsPath = parsed.Name, parsed.Path
// FIXME do something with parsed.Config
var fsName string var fsName string
var ok bool var ok bool
if configName != "" { if configName != "" {
if strings.HasPrefix(configName, ":") { if strings.HasPrefix(configName, ":") {
fsName = configName[1:] fsName = configName[1:]
} else { } else {
m := ConfigMap(nil, configName) m := ConfigMap(nil, configName, parsed.Config)
fsName, ok = m.Get("type") fsName, ok = m.Get("type")
if !ok { if !ok {
return nil, "", "", ErrorNotFoundInConfigFile return nil, "", "", nil, ErrorNotFoundInConfigFile
} }
} }
} else { } else {
@ -1229,7 +1228,7 @@ func ParseRemote(path string) (fsInfo *RegInfo, configName, fsPath string, err e
configName = "local" configName = "local"
} }
fsInfo, err = Find(fsName) fsInfo, err = Find(fsName)
return fsInfo, configName, fsPath, err return fsInfo, configName, fsPath, parsed.Config, err
} }
// A configmap.Getter to read from the environment RCLONE_CONFIG_backend_option_name // A configmap.Getter to read from the environment RCLONE_CONFIG_backend_option_name
@ -1304,16 +1303,22 @@ func (section getConfigFile) Get(key string) (value string, ok bool) {
} }
// ConfigMap creates a configmap.Map from the *RegInfo and the // ConfigMap creates a configmap.Map from the *RegInfo and the
// configName passed in. // configName passed in. If connectionStringConfig has any entries (it may be nil),
// then it will be added to the lookup with the highest priority.
// //
// If fsInfo is nil then the returned configmap.Map should only be // If fsInfo is nil then the returned configmap.Map should only be
// used for reading non backend specific parameters, such as "type". // used for reading non backend specific parameters, such as "type".
func ConfigMap(fsInfo *RegInfo, configName string) (config *configmap.Map) { func ConfigMap(fsInfo *RegInfo, configName string, connectionStringConfig configmap.Simple) (config *configmap.Map) {
// Create the config // Create the config
config = configmap.New() config = configmap.New()
// Read the config, more specific to least specific // Read the config, more specific to least specific
// Config from connection string
if len(connectionStringConfig) > 0 {
config.AddGetter(connectionStringConfig)
}
// flag values // flag values
if fsInfo != nil { if fsInfo != nil {
config.AddGetter(&regInfoValues{fsInfo, false}) config.AddGetter(&regInfoValues{fsInfo, false})
@ -1348,11 +1353,11 @@ func ConfigMap(fsInfo *RegInfo, configName string) (config *configmap.Map) {
// found then NotFoundInConfigFile will be returned. // found then NotFoundInConfigFile will be returned.
func ConfigFs(path string) (fsInfo *RegInfo, configName, fsPath string, config *configmap.Map, err error) { func ConfigFs(path string) (fsInfo *RegInfo, configName, fsPath string, config *configmap.Map, err error) {
// Parse the remote path // Parse the remote path
fsInfo, configName, fsPath, err = ParseRemote(path) fsInfo, configName, fsPath, connectionStringConfig, err := ParseRemote(path)
if err != nil { if err != nil {
return return
} }
config = ConfigMap(fsInfo, configName) config = ConfigMap(fsInfo, configName, connectionStringConfig)
return return
} }