mirror of
https://github.com/rclone/rclone.git
synced 2024-11-22 16:34:30 +01:00
fs: add Options.NonDefault to read options which aren't at their default #5178
This commit is contained in:
parent
53573b4a09
commit
9d5c5bf7ab
17
fs/fs.go
17
fs/fs.go
@ -140,6 +140,23 @@ func (os Options) Overridden(m *configmap.Map) configmap.Simple {
|
|||||||
return overridden
|
return overridden
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NonDefault discovers which config values aren't at their default
|
||||||
|
func (os Options) NonDefault(m configmap.Getter) configmap.Simple {
|
||||||
|
var nonDefault = configmap.Simple{}
|
||||||
|
for i := range os {
|
||||||
|
opt := &os[i]
|
||||||
|
value, isSet := m.Get(opt.Name)
|
||||||
|
if !isSet {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
defaultValue := fmt.Sprint(opt.Default)
|
||||||
|
if value != defaultValue {
|
||||||
|
nonDefault.Set(opt.Name, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nonDefault
|
||||||
|
}
|
||||||
|
|
||||||
// OptionVisibility controls whether the options are visible in the
|
// OptionVisibility controls whether the options are visible in the
|
||||||
// configurator or the command line.
|
// configurator or the command line.
|
||||||
type OptionVisibility byte
|
type OptionVisibility byte
|
||||||
|
@ -190,6 +190,43 @@ func TestOptionsGet(t *testing.T) {
|
|||||||
assert.Nil(t, opt)
|
assert.Nil(t, opt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestOptionsOveridden(t *testing.T) {
|
||||||
|
m := configmap.New()
|
||||||
|
m1 := configmap.Simple{
|
||||||
|
"nounc": "m1",
|
||||||
|
"copy_links": "m1",
|
||||||
|
}
|
||||||
|
m.AddGetter(m1, configmap.PriorityNormal)
|
||||||
|
m2 := configmap.Simple{
|
||||||
|
"nounc": "m2",
|
||||||
|
"case_insensitive": "m2",
|
||||||
|
}
|
||||||
|
m.AddGetter(m2, configmap.PriorityConfig)
|
||||||
|
m3 := configmap.Simple{
|
||||||
|
"nounc": "m3",
|
||||||
|
}
|
||||||
|
m.AddGetter(m3, configmap.PriorityDefault)
|
||||||
|
got := testOptions.Overridden(m)
|
||||||
|
assert.Equal(t, configmap.Simple{
|
||||||
|
"copy_links": "m1",
|
||||||
|
"nounc": "m1",
|
||||||
|
}, got)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestOptionsNonDefault(t *testing.T) {
|
||||||
|
m := configmap.Simple{}
|
||||||
|
got := testOptions.NonDefault(m)
|
||||||
|
assert.Equal(t, configmap.Simple{}, got)
|
||||||
|
|
||||||
|
m["case_insensitive"] = "false"
|
||||||
|
got = testOptions.NonDefault(m)
|
||||||
|
assert.Equal(t, configmap.Simple{}, got)
|
||||||
|
|
||||||
|
m["case_insensitive"] = "true"
|
||||||
|
got = testOptions.NonDefault(m)
|
||||||
|
assert.Equal(t, configmap.Simple{"case_insensitive": "true"}, got)
|
||||||
|
}
|
||||||
|
|
||||||
func TestOptionMarshalJSON(t *testing.T) {
|
func TestOptionMarshalJSON(t *testing.T) {
|
||||||
out, err := json.MarshalIndent(&caseInsensitiveOption, "", "")
|
out, err := json.MarshalIndent(&caseInsensitiveOption, "", "")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
Loading…
Reference in New Issue
Block a user