MCPcopy Create free account
hub / github.com/MertJSX/folderhost / MigrateConfigIfNeeded

Function MigrateConfigIfNeeded

utils/migrate_config.go:13–77  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

11)
12
13func MigrateConfigIfNeeded() {
14 userConfigData, err := os.ReadFile("./config.yml")
15 if err != nil {
16 return
17 }
18
19 var userRoot yaml.Node
20 err = yaml.Unmarshal(userConfigData, &userRoot)
21 if err != nil {
22 fmt.Printf("Cannot parse your config.yml for migration: %v\n", err)
23 return
24 }
25
26 defaultConfigData, err := resources.DefaultConfig.ReadFile("default_config.yml")
27 if err != nil {
28 return
29 }
30
31 var defaultRoot yaml.Node
32 err = yaml.Unmarshal(defaultConfigData, &defaultRoot)
33 if err != nil {
34 return
35 }
36
37 userVersion := getVersion(&userRoot)
38 defaultVersion := getVersion(&defaultRoot)
39
40 if userVersion == defaultVersion {
41 return
42 }
43
44 displayUserVersion := userVersion
45 if displayUserVersion == "" {
46 displayUserVersion = "unknown"
47 }
48
49 fmt.Printf("\nYour config.yml is outdated (%s -> %s). Migrating it automatically...\n", displayUserVersion, defaultVersion)
50
51 if len(defaultRoot.Content) > 0 && len(userRoot.Content) > 0 {
52 mergeYamlNodes(defaultRoot.Content[0], userRoot.Content[0])
53 }
54
55 var buf bytes.Buffer
56 enc := yaml.NewEncoder(&buf)
57 enc.SetIndent(2)
58 err = enc.Encode(&defaultRoot)
59 enc.Close()
60
61 if err != nil {
62 fmt.Printf("Failed to encode migrated config: %v\n", err)
63 return
64 }
65
66 mergedString := buf.String()
67 re := regexp.MustCompile(`(?m)^([a-zA-Z0-9_-]+:.*?)\n([ \t]*#)`)
68 mergedString = re.ReplaceAllString(mergedString, "$1\n\n$2")
69
70 err = os.WriteFile("./config.yml", []byte(mergedString), 0644)

Callers 1

GetConfigFunction · 0.85

Calls 2

getVersionFunction · 0.85
mergeYamlNodesFunction · 0.85

Tested by

no test coverage detected