system_setup_tool/cmd/search_cmd.go
Patryk Hegenberg 8281883e4d feat(cli,packagemanager): implemented first working windows and macos versions
in order to implement sst for windows and macos the structure of
osmanager has been changed.
Now osmanager has a new field pm, which contains the specific
packagemanager for the os.
Linux packagemanagers have been implemented as packagemanagers on their
own.
2025-01-20 21:28:44 +01:00

81 lines
1.8 KiB
Go

package cmd
import (
"fmt"
"log"
"runtime"
"strings"
pm "system_setup_tool/packagemanager"
"github.com/spf13/cobra"
)
var searchCmd = &cobra.Command{
Use: "search [package_name]",
Short: "Search for a package across package managers (will search in os|flatpak|homebrew)",
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
packageName := args[0]
managerName, _ := cmd.Flags().GetString("manager")
if managerName == "os" {
managerName = "OS Package Manager"
} else if managerName == "brew" {
managerName = "homebrew"
}
var managers []pm.PackageManager
switch runtime.GOOS {
case "linux":
managers = []pm.PackageManager{
pm.NewOSManager(""),
&pm.HomebrewManager{},
&pm.FlatpakManager{},
}
case "windows":
managers = []pm.PackageManager{
pm.NewOSManager(""),
&pm.WingetManager{},
&pm.ChocoManager{},
}
case "darwin":
managers = []pm.PackageManager{
pm.NewOSManager(""),
}
default:
log.Println("No Package Managers found")
}
if managerName != "" {
for _, m := range managers {
if strings.EqualFold(m.Name(), managerName) {
searchAndDisplayResults(m, packageName)
return
}
}
fmt.Printf("Not supported for '%s'\n", managerName)
return
}
for _, manager := range managers {
searchAndDisplayResults(manager, packageName)
}
},
}
func displayResults(results []string, manager string) {
if len(results) == 0 {
fmt.Printf("No results found in %s\n", manager)
return
}
for _, result := range results {
fmt.Printf("- %s\n", result)
}
}
func searchAndDisplayResults(manager pm.PackageManager, packageName string) {
fmt.Printf("Searching in %s:\n", manager.Name())
results := manager.SearchPackage(packageName)
displayResults(results, manager.Name())
fmt.Println()
}