From b99b1eabecfe2fa60a4fa81063e1ed39a9833718 Mon Sep 17 00:00:00 2001 From: Tai Groot Date: Mon, 28 Aug 2023 18:22:55 -0700 Subject: [PATCH] add stringer for stats --- cmd/mg/cmd/import.go | 7 +++++-- parse/mgconf.go | 26 +++++++++++++++++++++++--- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/cmd/mg/cmd/import.go b/cmd/mg/cmd/import.go index 1a52f61..15767a9 100644 --- a/cmd/mg/cmd/import.go +++ b/cmd/mg/cmd/import.go @@ -1,6 +1,7 @@ package cmd import ( + "fmt" "io" "log" "os" @@ -26,11 +27,12 @@ var importCmd = &cobra.Command{ log.Println(err) os.Exit(1) } - err = conf.Merge(parsed) + stats, err := conf.Merge(parsed) if err != nil { log.Println(err) os.Exit(1) } + fmt.Println(stats) } else { f, err := os.ReadFile(args[0]) if err != nil { @@ -42,11 +44,12 @@ var importCmd = &cobra.Command{ log.Println(err) os.Exit(1) } - err = conf.Merge(parsed) + stats, err := conf.Merge(parsed) if err != nil { log.Println(err) os.Exit(1) } + fmt.Println(stats) } err := conf.Save() if err != nil { diff --git a/parse/mgconf.go b/parse/mgconf.go index 229aa19..7ac6b3a 100644 --- a/parse/mgconf.go +++ b/parse/mgconf.go @@ -2,6 +2,7 @@ package parse import ( "encoding/json" + "fmt" "io/ioutil" "os" "path/filepath" @@ -50,19 +51,38 @@ func (m *MGConfig) AddRepo(path, remote string) error { return nil } -func (m *MGConfig) Merge(m2 MGConfig) error { +type Stats struct { + Duplicates int + NewPaths []string +} + +func (s Stats) String() string { + str := "" + for _, v := range s.NewPaths { + str += "Added repo " + v + "\n" + } + str += "\nAdded " + fmt.Sprintf("%d", len(s.NewPaths)) + " new repos\n" + str += "Skipped " + fmt.Sprintf("%d", s.Duplicates) + " duplicate repos" + return str +} + +func (m *MGConfig) Merge(m2 MGConfig) (Stats, error) { + stats := Stats{} for _, v := range m2.Repos { err := m.AddRepo(v.Path, v.Remote) switch err { case errAlreadyRegistered: + stats.Duplicates++ continue case nil: + stats.NewPaths = append(stats.NewPaths, v.Path) continue default: - return err + + return stats, err } } - return nil + return stats, nil } // LoadMGConfig loads the mgconfig file from the XDG_CONFIG_HOME directory