Improve configuration merge

This commit is contained in:
世界
2023-12-10 22:57:28 +08:00
parent 112104948f
commit e746fcc41b
2 changed files with 10 additions and 2 deletions

View File

@@ -17,6 +17,7 @@ import (
"github.com/sagernet/sing-box/log"
"github.com/sagernet/sing-box/option"
E "github.com/sagernet/sing/common/exceptions"
"github.com/sagernet/sing/common/json"
"github.com/sagernet/sing/common/json/badjson"
"github.com/spf13/cobra"
@@ -107,13 +108,18 @@ func readConfigAndMerge() (option.Options, error) {
if len(optionsList) == 1 {
return optionsList[0].options, nil
}
var mergedOptions option.Options
var mergedMessage json.RawMessage
for _, options := range optionsList {
mergedOptions, err = badjson.Merge(options.options, mergedOptions)
mergedMessage, err = badjson.MergeJSON(options.options.RawMessage, mergedMessage)
if err != nil {
return option.Options{}, E.Cause(err, "merge config at ", options.path)
}
}
var mergedOptions option.Options
err = mergedOptions.UnmarshalJSON(mergedMessage)
if err != nil {
return option.Options{}, E.Cause(err, "unmarshal merged config")
}
return mergedOptions, nil
}