diff --git a/cmd/ginie/main.go b/cmd/ginie/main.go index 08d669f..4e6dde1 100644 --- a/cmd/ginie/main.go +++ b/cmd/ginie/main.go @@ -95,11 +95,20 @@ func main() { case "update": if len(os.Args) < 3 { - fmt.Println("Usage: ginie update ") + fmt.Println("Usage: ginie update ") return } target := os.Args[2] + if target == "--all" { + err := install.UpdateAll() + if err != nil { + fmt.Println("Fehler:", err) + return + } + return + } + err := install.Update(target) if err != nil { fmt.Println("Fehler:", err) diff --git a/internal/install/install.go b/internal/install/install.go index 59129d5..3efd06d 100644 --- a/internal/install/install.go +++ b/internal/install/install.go @@ -267,3 +267,35 @@ func Update(pkg string) error { return Install(fmt.Sprintf("%s:%s", repo.Name, release.TagName)) } + +func UpdateAll() error { + reposList, err := repos.LoadRepos() + if err != nil { + return err + } + + var installed []repos.Repo + for _, r := range reposList { + if r.InstalledVersion != "" { + installed = append(installed, r) + } + } + + if len(installed) == 0 { + return errors.New("Keine installierten Pakete gefunden. Nutze: ginie install ") + } + + var failed []string + for _, r := range installed { + fmt.Printf("Prüfe Updates für %s...\n", r.Name) + if err := Update(r.Name); err != nil { + failed = append(failed, fmt.Sprintf("%s: %v", r.Name, err)) + } + } + + if len(failed) > 0 { + return fmt.Errorf("Einige Updates fehlgeschlagen:\n%s", strings.Join(failed, "\n")) + } + + return nil +}