feat(cli): add concurrent execution of search and update to improve performance
This commit is contained in:
parent
0306ad36ef
commit
afaf7707aa
4 changed files with 85 additions and 22 deletions
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
"log"
|
||||
"runtime"
|
||||
"sync"
|
||||
pm "system_setup_tool/packagemanager"
|
||||
"system_setup_tool/utils"
|
||||
|
||||
|
|
@ -64,20 +65,55 @@ 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()
|
||||
var managers []pm.PackageManager
|
||||
switch runtime.GOOS {
|
||||
case "linux":
|
||||
sudoPassword, err := utils.GetSudoPassword()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
managers = []pm.PackageManager{
|
||||
pm.NewOSManager(sudoPassword),
|
||||
&pm.HomebrewManager{},
|
||||
&pm.FlatpakManager{},
|
||||
&pm.PipxManager{},
|
||||
}
|
||||
case "windows":
|
||||
managers = []pm.PackageManager{
|
||||
pm.NewOSManager(""),
|
||||
&pm.WingetManager{},
|
||||
&pm.ChocoManager{},
|
||||
&pm.PipxManager{},
|
||||
}
|
||||
case "darwin":
|
||||
sudoPassword, err := utils.GetSudoPassword()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
managers = []pm.PackageManager{
|
||||
pm.NewOSManager(sudoPassword),
|
||||
&pm.PipxManager{},
|
||||
}
|
||||
default:
|
||||
log.Println("No Package Managers found")
|
||||
}
|
||||
updateAllConcurrently(managers)
|
||||
},
|
||||
}
|
||||
|
||||
func updateAllConcurrently(managers []pm.PackageManager) {
|
||||
var wg sync.WaitGroup
|
||||
for _, m := range managers {
|
||||
wg.Add(1)
|
||||
go func(manager pm.PackageManager) {
|
||||
defer wg.Done()
|
||||
fmt.Printf("Updating %s-Packages\n", manager.Name())
|
||||
err := manager.UpdateAllPackages()
|
||||
if err != nil {
|
||||
log.Printf("Error updating %s: %v\n", manager.Name(), err)
|
||||
}
|
||||
}(m)
|
||||
}
|
||||
wg.Wait()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue