mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-03 04:50:52 +08:00
fix(config): avoid adding new keys when merging
This commit is contained in:
@@ -829,7 +829,7 @@ func mergeMappingPreserve(dst, src *yaml.Node) {
|
|||||||
copyNodeShallow(dst, src)
|
copyNodeShallow(dst, src)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// Build a lookup of existing keys in dst
|
// Only update existing keys in dst, do not add new keys
|
||||||
for i := 0; i+1 < len(src.Content); i += 2 {
|
for i := 0; i+1 < len(src.Content); i += 2 {
|
||||||
sk := src.Content[i]
|
sk := src.Content[i]
|
||||||
sv := src.Content[i+1]
|
sv := src.Content[i+1]
|
||||||
@@ -838,13 +838,8 @@ func mergeMappingPreserve(dst, src *yaml.Node) {
|
|||||||
// Merge into existing value node
|
// Merge into existing value node
|
||||||
dv := dst.Content[idx+1]
|
dv := dst.Content[idx+1]
|
||||||
mergeNodePreserve(dv, sv)
|
mergeNodePreserve(dv, sv)
|
||||||
} else {
|
|
||||||
if shouldSkipEmptyCollectionOnPersist(sk.Value, sv) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
// Append new key/value pair by deep-copying from src
|
|
||||||
dst.Content = append(dst.Content, deepCopyNode(sk), deepCopyNode(sv))
|
|
||||||
}
|
}
|
||||||
|
// Keys not in dst are skipped - preserves original config structure
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -925,34 +920,6 @@ func findMapKeyIndex(mapNode *yaml.Node, key string) int {
|
|||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
|
||||||
func shouldSkipEmptyCollectionOnPersist(key string, node *yaml.Node) bool {
|
|
||||||
switch key {
|
|
||||||
case "generative-language-api-key",
|
|
||||||
"gemini-api-key",
|
|
||||||
"vertex-api-key",
|
|
||||||
"claude-api-key",
|
|
||||||
"codex-api-key",
|
|
||||||
"openai-compatibility":
|
|
||||||
return isEmptyCollectionNode(node)
|
|
||||||
default:
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func isEmptyCollectionNode(node *yaml.Node) bool {
|
|
||||||
if node == nil {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
switch node.Kind {
|
|
||||||
case yaml.SequenceNode:
|
|
||||||
return len(node.Content) == 0
|
|
||||||
case yaml.ScalarNode:
|
|
||||||
return node.Tag == "!!null"
|
|
||||||
default:
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// deepCopyNode creates a deep copy of a yaml.Node graph.
|
// deepCopyNode creates a deep copy of a yaml.Node graph.
|
||||||
func deepCopyNode(n *yaml.Node) *yaml.Node {
|
func deepCopyNode(n *yaml.Node) *yaml.Node {
|
||||||
if n == nil {
|
if n == nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user