feat(cli): add check command
This commit is contained in:
parent
3519efeccc
commit
11b8541630
14 changed files with 123 additions and 1 deletions
49
cmd/check_cmd.go
Normal file
49
cmd/check_cmd.go
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
pm "system_setup_tool/packagemanager"
|
||||
"system_setup_tool/utils"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var checkCmd = &cobra.Command{
|
||||
Use: "check [package-name]",
|
||||
Short: "Check if the specified package is installed",
|
||||
Args: cobra.ExactArgs(1),
|
||||
Aliases: []string{"c"},
|
||||
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 Package Manager":
|
||||
manager = pm.NewOSManager("")
|
||||
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")
|
||||
}
|
||||
if err := manager.Check(packageName); err != nil {
|
||||
log.Printf("error: %v\n", err)
|
||||
}
|
||||
fmt.Printf("Package: %s installed\n", packageName)
|
||||
if err := utils.LogToHistory("checked", packageName, manager.Name()); err != nil {
|
||||
fmt.Println("error logging action:", err)
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
@ -43,6 +43,8 @@ func init() {
|
|||
|
||||
updateCmd.Flags().StringP("manager", "m", "os", "The package manager you want to update packages with. (Options: os|homebrew|pipx|flatpak)")
|
||||
|
||||
checkCmd.Flags().StringP("manager", "m", "os", "The package manager you want to check for a packages with. (Options: os|homebrew|pipx|flatpak)")
|
||||
|
||||
packageCmd.AddCommand(
|
||||
addCmd,
|
||||
deleteCmd,
|
||||
|
|
@ -57,6 +59,7 @@ func init() {
|
|||
updateCmd,
|
||||
updateAllCmd,
|
||||
historyCmd,
|
||||
checkCmd,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -74,3 +74,8 @@ func (a *AptManager) UpdateAllPackages() error {
|
|||
command.Stdin = strings.NewReader(a.SudoPassword + "\n")
|
||||
return command.Run()
|
||||
}
|
||||
|
||||
func (a *AptManager) Check(pkg string) error {
|
||||
cmd := shell.ExecCommand("/bin/sh", "-c", fmt.Sprintf("dpkg -l | grep %s", pkg))
|
||||
return cmd.Run()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ package packagemanager
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"system_setup_tool/internal/shell"
|
||||
)
|
||||
|
||||
|
|
@ -56,3 +58,12 @@ func (c *CargoManager) UpdatePackage(pkg string) error {
|
|||
func (c *CargoManager) UpdateAllPackages() error {
|
||||
return fmt.Errorf("update not supported")
|
||||
}
|
||||
|
||||
func (c *CargoManager) Check(pkg string) error {
|
||||
home, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
cmd := shell.ExecCommand("ls", filepath.Join(home, ".cargo", "bin", pkg))
|
||||
return cmd.Run()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,3 +64,8 @@ func (c *ChocoManager) UpdateAllPackages() error {
|
|||
cmd := shell.ExecCommand("choco", "update")
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
func (c *ChocoManager) Check(pkg string) error {
|
||||
cmd := shell.ExecCommand("choco", "search", "--local-only", pkg)
|
||||
return cmd.Run()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,3 +71,8 @@ func (d *DnfManager) UpdateAllPackages() error {
|
|||
command.Stdin = strings.NewReader(d.SudoPassword + "\n")
|
||||
return command.Run()
|
||||
}
|
||||
|
||||
func (d *DnfManager) Check(pkg string) error {
|
||||
cmd := shell.ExecCommand("/bin/sh", "-c", fmt.Sprintf("dnf list installed | grep %s", pkg))
|
||||
return cmd.Run()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -126,3 +126,8 @@ func (f *FlatpakManager) UpdateAllPackages() error {
|
|||
cmd := shell.ExecCommand("flatpak", "update", "-y")
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
func (f *FlatpakManager) Check(pkg string) error {
|
||||
cmd := shell.ExecCommand("/bin/sh", "-c", fmt.Sprintf("flatpak list | grep %s", pkg))
|
||||
return cmd.Run()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ package packagemanager
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"system_setup_tool/internal/shell"
|
||||
)
|
||||
|
||||
|
|
@ -56,3 +58,12 @@ func (g *GolangManager) UpdatePackage(pkg string) error {
|
|||
func (g *GolangManager) UpdateAllPackages() error {
|
||||
return fmt.Errorf("update not supported")
|
||||
}
|
||||
|
||||
func (g *GolangManager) Check(pkg string) error {
|
||||
home, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
fmt.Printf("error: %v\n", err)
|
||||
}
|
||||
cmd := shell.ExecCommand("ls", filepath.Join(home, "go", "bin", pkg))
|
||||
return cmd.Run()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,3 +69,8 @@ func (h *HomebrewManager) UpdateAllPackages() error {
|
|||
cmd := shell.ExecCommand("brew", "upgrade")
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
func (h *HomebrewManager) Check(pkg string) error {
|
||||
cmd := shell.ExecCommand("brew", "list", pkg)
|
||||
return cmd.Run()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -127,6 +127,10 @@ func (o *OSManager) UpdateAllPackages() error {
|
|||
return o.pm.UpdateAllPackages()
|
||||
}
|
||||
|
||||
func (o *OSManager) Check(pkg string) error {
|
||||
return o.pm.Check(pkg)
|
||||
}
|
||||
|
||||
type OS struct {
|
||||
ID string
|
||||
Name string
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package packagemanager
|
|||
|
||||
type PackageManager interface {
|
||||
Install(packages []string) error
|
||||
Check(pkg string) error
|
||||
InstallPackage(pkg string) error
|
||||
InstallManager() error
|
||||
RemovePackage(pkg string) error
|
||||
|
|
|
|||
|
|
@ -74,3 +74,8 @@ func (p *PacmanManager) UpdateAllPackages() error {
|
|||
command.Stdin = strings.NewReader(p.SudoPassword + "\n")
|
||||
return command.Run()
|
||||
}
|
||||
|
||||
func (p *PacmanManager) Check(pkg string) error {
|
||||
cmd := shell.ExecCommand("/bin/sh", "-c", fmt.Sprintf("paxman -Q | grep %s", pkg))
|
||||
return cmd.Run()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
package packagemanager
|
||||
|
||||
import "system_setup_tool/internal/shell"
|
||||
import (
|
||||
"fmt"
|
||||
"system_setup_tool/internal/shell"
|
||||
)
|
||||
|
||||
type PipxManager struct{}
|
||||
|
||||
|
|
@ -56,3 +59,8 @@ func (p *PipxManager) UpdateAllPackages() error {
|
|||
cmd := shell.ExecCommand("pipx", "upgrade-all")
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
func (p *PipxManager) Check(pkg string) error {
|
||||
cmd := shell.ExecCommand("/bin/sh", "-c", fmt.Sprintf("pipx list | grep %s", pkg))
|
||||
return cmd.Run()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,3 +64,8 @@ func (w *WingetManager) UpdateAllPackages() error {
|
|||
cmd := shell.ExecCommand("winget", "update")
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
func (w *WingetManager) Check(pkg string) error {
|
||||
cmd := shell.ExecCommand("wiget", "show", pkg)
|
||||
return cmd.Run()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue