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.
81 lines
1.8 KiB
Go
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()
|
|
}
|