mirror of
https://github.com/rclone/rclone.git
synced 2025-06-30 22:23:52 +02:00
config: make config file reads reload the config file if needed #4996
Before this change the config file needed to be explicitly reloaded. This coupled the config file implementation with the backends needlessly. This change stats the config file to see if it needs to be reloaded on every config file operation. This allows us to remove calls to - config.SaveConfig - config.GetFresh Which now makes the the only needed interface to the config file be that provided by configmap.Map when rclone is not being configured. This also adds tests for configfile
This commit is contained in:
@ -148,14 +148,8 @@ func PutToken(name string, m configmap.Mapper, token *oauth2.Token, newSection b
|
||||
tokenString := string(tokenBytes)
|
||||
old, ok := m.Get(config.ConfigToken)
|
||||
if !ok || tokenString != old {
|
||||
err = config.SetValueAndSave(name, config.ConfigToken, tokenString)
|
||||
if newSection && err != nil {
|
||||
fs.Debugf(name, "Added new token to config, still needs to be saved")
|
||||
} else if err != nil {
|
||||
fs.Errorf(nil, "Failed to save new token in config file: %v", err)
|
||||
} else {
|
||||
fs.Debugf(name, "Saved new token in config file")
|
||||
}
|
||||
m.Set(config.ConfigToken, tokenString)
|
||||
fs.Debugf(name, "Saved new token in config file")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -175,13 +169,13 @@ type TokenSource struct {
|
||||
// If token has expired then first try re-reading it from the config
|
||||
// file in case a concurrently running rclone has updated it already
|
||||
func (ts *TokenSource) reReadToken() bool {
|
||||
tokenString, err := config.FileGetFresh(ts.name, config.ConfigToken)
|
||||
if err != nil {
|
||||
fs.Debugf(ts.name, "Failed to read token out of config file: %v", err)
|
||||
tokenString, found := ts.m.Get(config.ConfigToken)
|
||||
if !found || tokenString == "" {
|
||||
fs.Debugf(ts.name, "Failed to read token out of config file")
|
||||
return false
|
||||
}
|
||||
newToken := new(oauth2.Token)
|
||||
err = json.Unmarshal([]byte(tokenString), newToken)
|
||||
err := json.Unmarshal([]byte(tokenString), newToken)
|
||||
if err != nil {
|
||||
fs.Debugf(ts.name, "Failed to parse token out of config file: %v", err)
|
||||
return false
|
||||
|
Reference in New Issue
Block a user