package cmd import ( "fmt" "log" pm "system_setup_tool/packagemanager" "system_setup_tool/utils" "github.com/spf13/cobra" ) var updateCmd = &cobra.Command{ Use: "update [package_name]", Short: "update a package with the specified package manager.", Long: "update a package with the specified package manager.\nIf no package specified, all packages for the package manager will be updated", Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { packageName := args[0] managerName, _ := cmd.Flags().GetString("manager") var manager pm.PackageManager if managerName == "os" { managerName = "OS Package Manager" } else if managerName == "brew" { managerName = "homebrew" } switch managerName { case "os": sudoPassword, err := utils.GetSudoPassword() if err != nil { log.Fatal(err) } osManager := pm.NewOSManager(sudoPassword) if err := osManager.Install([]string{packageName}); err != nil { log.Printf("error: %v\n", err) } case "homebrew": manager = &pm.HomebrewManager{} case "cargo": manager = &pm.CargoManager{} case "pipx": manager = &pm.PipxManager{} case "flatpak": manager = &pm.FlatpakManager{} default: fmt.Println("No PackageManager found") return } if packageName != "" { if err := manager.UpdatePackage(packageName); err != nil { log.Printf("error: %v\n", err) } } else { if err := manager.UpdateAllPackages(); err != nil { log.Printf("error: %v\n", err) } } }, } var updateAllCmd = &cobra.Command{ Use: "update-all", Short: "update all packages with all package managers.", Run: func(cmd *cobra.Command, args []string) { sudoPassword, err := utils.GetSudoPassword() if err != nil { log.Fatal(err) } managers := []pm.PackageManager{ pm.NewOSManager(sudoPassword), &pm.HomebrewManager{}, &pm.FlatpakManager{}, &pm.PipxManager{}, } for _, m := range managers { fmt.Printf("Updating %s-Packages\n", m.Name()) m.UpdateAllPackages() } }, }