From e8b30a1b0f214be5338100816da9adbd8cdbdfa8 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 9 Mar 2025 17:00:35 -0400 Subject: [PATCH] Move some code under conditionals for better error handling. --- main.go | 71 ++++++++++++++++++++++++++++++++------------------------- 1 file changed, 40 insertions(+), 31 deletions(-) diff --git a/main.go b/main.go index bb7f266..ea7e1d4 100644 --- a/main.go +++ b/main.go @@ -45,26 +45,29 @@ type ServiceConfig struct { func main() { var err error var config Config - var systemConfig Config // Read user config file - file, err := os.ReadFile("goolinux.json") - if err != nil { - fmt.Println("Cannot read user config file") - fmt.Println(err) - return - } + { + file, err := os.ReadFile("goolinux.json") + if err != nil { + fmt.Println("Cannot read user config file") + fmt.Println(err) + return + } - err = hjson.Unmarshal(file, &config) - if err != nil { - fmt.Println(err) - return + err = hjson.Unmarshal(file, &config) + if err != nil { + fmt.Println(err) + return + } } // Read system "base" config file if it exists if config.System.Base != "" { + var systemConfig Config path := "services/" + config.System.Base + ".json" - file, err = os.ReadFile(path) + + file, err := os.ReadFile(path) if err != nil { fmt.Println("Cannot read system base config file") fmt.Println(err) @@ -85,32 +88,38 @@ func main() { for name, service := range config.Services { var b strings.Builder var s ServiceConfig - fmt.Printf("Service: %s\n", name) + + // If no provider specified, try system + if service.Provider == "" { service.Provider = "system" } // Read service config file - if service.Provider == "" { service.Provider = "system" } fmt.Fprintf(&b, "services/%s/%s.json", name, service.Provider) c, err := os.ReadFile(b.String()) if err != nil { - fmt.Println("Unknown service: ", err) - return + switch err := err.(type) { + case *os.PathError: + // No system config to merge + // Rely solely on the user config + fmt.Println(" Warning: No system config for service" + name) + default: + fmt.Println("Error reading service config: ", err) + return + } + } else { + // Parse service config + err = hjson.Unmarshal(c, &s) + if err != nil { + fmt.Println("Error parsing config file") + fmt.Println(err) + return + } + mergo.Merge(&s, service, mergo.WithOverride) + config.Services[name] = s + + // Add service packages to the global list + config.System.Packages = append(config.System.Packages, s.Packages...) } - // Parse service config - err = hjson.Unmarshal(c, &s) - if err != nil { - fmt.Println("Error parsing config file") - fmt.Println(err) - return - } - mergo.Merge(&s, service, mergo.WithOverride) - config.Services[name] = s - - fmt.Printf(" %v\n", s) - - // Add service packages to the global list - config.System.Packages = append(config.System.Packages, s.Packages...) - // Generate a config file for _, f := range s.ConfigFiles { var b strings.Builder