...
This commit is contained in:
		
							
								
								
									
										125
									
								
								pkg/sal/packagemanager/packagemanager.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								pkg/sal/packagemanager/packagemanager.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,125 @@ | ||||
| package packagemanager | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os/exec" | ||||
| 	"runtime" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| // PackageManager handles package installation across different platforms | ||||
| type PackageManager struct { | ||||
| 	platform string | ||||
| } | ||||
|  | ||||
| // NewPackageManager creates a new package manager instance | ||||
| func NewPackageManager() *PackageManager { | ||||
| 	return &PackageManager{ | ||||
| 		platform: runtime.GOOS, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // InstallPackage installs a package using the appropriate package manager | ||||
| func (pm *PackageManager) InstallPackage(packageName string) (string, error) { | ||||
| 	var cmd *exec.Cmd | ||||
|  | ||||
| 	switch pm.platform { | ||||
| 	case "darwin": | ||||
| 		// macOS - use Homebrew | ||||
| 		cmd = exec.Command("brew", "install", packageName) | ||||
| 	case "linux": | ||||
| 		// Linux - use apt | ||||
| 		cmd = exec.Command("apt", "install", "-y", packageName) | ||||
| 	case "windows": | ||||
| 		// Windows - use scoop | ||||
| 		cmd = exec.Command("scoop", "install", packageName) | ||||
| 	default: | ||||
| 		return "", fmt.Errorf("unsupported platform: %s", pm.platform) | ||||
| 	} | ||||
|  | ||||
| 	output, err := cmd.CombinedOutput() | ||||
| 	return string(output), err | ||||
| } | ||||
|  | ||||
| // UninstallPackage removes a package | ||||
| func (pm *PackageManager) UninstallPackage(packageName string) (string, error) { | ||||
| 	var cmd *exec.Cmd | ||||
|  | ||||
| 	switch pm.platform { | ||||
| 	case "darwin": | ||||
| 		cmd = exec.Command("brew", "uninstall", packageName) | ||||
| 	case "linux": | ||||
| 		cmd = exec.Command("apt", "remove", "-y", packageName) | ||||
| 	case "windows": | ||||
| 		cmd = exec.Command("scoop", "uninstall", packageName) | ||||
| 	default: | ||||
| 		return "", fmt.Errorf("unsupported platform: %s", pm.platform) | ||||
| 	} | ||||
|  | ||||
| 	output, err := cmd.CombinedOutput() | ||||
| 	return string(output), err | ||||
| } | ||||
|  | ||||
| // ListInstalledPackages returns a list of installed packages | ||||
| func (pm *PackageManager) ListInstalledPackages() ([]string, error) { | ||||
| 	var cmd *exec.Cmd | ||||
|  | ||||
| 	switch pm.platform { | ||||
| 	case "darwin": | ||||
| 		cmd = exec.Command("brew", "list") | ||||
| 	case "linux": | ||||
| 		cmd = exec.Command("apt", "list", "--installed") | ||||
| 	case "windows": | ||||
| 		cmd = exec.Command("scoop", "list") | ||||
| 	default: | ||||
| 		return nil, fmt.Errorf("unsupported platform: %s", pm.platform) | ||||
| 	} | ||||
|  | ||||
| 	output, err := cmd.CombinedOutput() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	// Parse output into a list of packages | ||||
| 	packages := strings.Split(string(output), "\n") | ||||
| 	var result []string | ||||
| 	for _, pkg := range packages { | ||||
| 		if pkg = strings.TrimSpace(pkg); pkg != "" { | ||||
| 			result = append(result, pkg) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return result, nil | ||||
| } | ||||
|  | ||||
| // SearchPackage searches for a package | ||||
| func (pm *PackageManager) SearchPackage(query string) ([]string, error) { | ||||
| 	var cmd *exec.Cmd | ||||
|  | ||||
| 	switch pm.platform { | ||||
| 	case "darwin": | ||||
| 		cmd = exec.Command("brew", "search", query) | ||||
| 	case "linux": | ||||
| 		cmd = exec.Command("apt", "search", query) | ||||
| 	case "windows": | ||||
| 		cmd = exec.Command("scoop", "search", query) | ||||
| 	default: | ||||
| 		return nil, fmt.Errorf("unsupported platform: %s", pm.platform) | ||||
| 	} | ||||
|  | ||||
| 	output, err := cmd.CombinedOutput() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	// Parse output into a list of packages | ||||
| 	packages := strings.Split(string(output), "\n") | ||||
| 	var result []string | ||||
| 	for _, pkg := range packages { | ||||
| 		if pkg = strings.TrimSpace(pkg); pkg != "" { | ||||
| 			result = append(result, pkg) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return result, nil | ||||
| } | ||||
		Reference in New Issue
	
	Block a user