diff --git a/apk/apk_linux.go b/apk/apk_linux.go index e98e9b6..0010bd9 100644 --- a/apk/apk_linux.go +++ b/apk/apk_linux.go @@ -67,10 +67,18 @@ func formatTargets(targets []snack.Target) []string { } func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.InstallResult, error) { + o := snack.ApplyOptions(opts...) var toInstall []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.Reinstall || t.Version != "" || o.DryRun { + toInstall = append(toInstall, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.InstallResult{}, err + } if ok { unchanged = append(unchanged, t.Name) } else { @@ -92,10 +100,18 @@ func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (sn } func remove(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.RemoveResult, error) { + o := snack.ApplyOptions(opts...) var toRemove []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.DryRun { + toRemove = append(toRemove, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.RemoveResult{}, err + } if !ok { unchanged = append(unchanged, t.Name) } else { diff --git a/apt/apt_linux.go b/apt/apt_linux.go index 5a41016..2f6fb61 100644 --- a/apt/apt_linux.go +++ b/apt/apt_linux.go @@ -78,10 +78,18 @@ func runAptGet(ctx context.Context, command string, pkgs []snack.Target, opts .. } func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.InstallResult, error) { + o := snack.ApplyOptions(opts...) var toInstall []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.Reinstall || t.Version != "" || o.DryRun { + toInstall = append(toInstall, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.InstallResult{}, err + } if ok { unchanged = append(unchanged, t.Name) } else { @@ -102,10 +110,18 @@ func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (sn } func remove(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.RemoveResult, error) { + o := snack.ApplyOptions(opts...) var toRemove []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.DryRun { + toRemove = append(toRemove, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.RemoveResult{}, err + } if !ok { unchanged = append(unchanged, t.Name) } else { diff --git a/dnf/dnf_linux.go b/dnf/dnf_linux.go index 85a2e79..3c98860 100644 --- a/dnf/dnf_linux.go +++ b/dnf/dnf_linux.go @@ -90,17 +90,24 @@ func formatTargets(targets []snack.Target) []string { } func install(ctx context.Context, v5 bool, pkgs []snack.Target, opts ...snack.Option) (snack.InstallResult, error) { + o := snack.ApplyOptions(opts...) var toInstall []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name, v5) + if o.Reinstall || t.Version != "" || o.DryRun { + toInstall = append(toInstall, t) + continue + } + ok, err := isInstalled(ctx, t.Name, v5) + if err != nil { + return snack.InstallResult{}, err + } if ok { unchanged = append(unchanged, t.Name) } else { toInstall = append(toInstall, t) } } - o := snack.ApplyOptions(opts...) if len(toInstall) > 0 { base := []string{"install", "-y"} if o.Refresh { @@ -132,17 +139,24 @@ func install(ctx context.Context, v5 bool, pkgs []snack.Target, opts ...snack.Op } func remove(ctx context.Context, v5 bool, pkgs []snack.Target, opts ...snack.Option) (snack.RemoveResult, error) { + o := snack.ApplyOptions(opts...) var toRemove []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name, v5) + if o.DryRun { + toRemove = append(toRemove, t) + continue + } + ok, err := isInstalled(ctx, t.Name, v5) + if err != nil { + return snack.RemoveResult{}, err + } if !ok { unchanged = append(unchanged, t.Name) } else { toRemove = append(toRemove, t) } } - o := snack.ApplyOptions(opts...) if len(toRemove) > 0 { args := append([]string{"remove", "-y"}, snack.TargetNames(toRemove)...) if _, err := run(ctx, args, o); err != nil { diff --git a/dpkg/dpkg_linux.go b/dpkg/dpkg_linux.go index 00fbc92..222f1c1 100644 --- a/dpkg/dpkg_linux.go +++ b/dpkg/dpkg_linux.go @@ -18,17 +18,24 @@ func available() bool { } func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.InstallResult, error) { + o := snack.ApplyOptions(opts...) var toInstall []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.Reinstall || t.Version != "" || o.DryRun { + toInstall = append(toInstall, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.InstallResult{}, err + } if ok { unchanged = append(unchanged, t.Name) } else { toInstall = append(toInstall, t) } } - o := snack.ApplyOptions(opts...) if len(toInstall) > 0 { var args []string if o.Sudo { @@ -65,17 +72,24 @@ func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (sn } func remove(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.RemoveResult, error) { + o := snack.ApplyOptions(opts...) var toRemove []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.DryRun { + toRemove = append(toRemove, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.RemoveResult{}, err + } if !ok { unchanged = append(unchanged, t.Name) } else { toRemove = append(toRemove, t) } } - o := snack.ApplyOptions(opts...) if len(toRemove) > 0 { var args []string if o.Sudo { diff --git a/flatpak/flatpak_linux.go b/flatpak/flatpak_linux.go index f1bb3e6..6e7c75c 100644 --- a/flatpak/flatpak_linux.go +++ b/flatpak/flatpak_linux.go @@ -34,11 +34,18 @@ func run(ctx context.Context, args []string) (string, error) { } func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.InstallResult, error) { - _ = snack.ApplyOptions(opts...) + o := snack.ApplyOptions(opts...) var toInstall []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.Reinstall || t.Version != "" || o.DryRun { + toInstall = append(toInstall, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.InstallResult{}, err + } if ok { unchanged = append(unchanged, t.Name) } else { @@ -63,11 +70,19 @@ func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (sn return snack.InstallResult{Installed: installed, Unchanged: unchanged}, nil } -func remove(ctx context.Context, pkgs []snack.Target, _ ...snack.Option) (snack.RemoveResult, error) { +func remove(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.RemoveResult, error) { + o := snack.ApplyOptions(opts...) var toRemove []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.DryRun { + toRemove = append(toRemove, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.RemoveResult{}, err + } if !ok { unchanged = append(unchanged, t.Name) } else { diff --git a/pacman/pacman_linux.go b/pacman/pacman_linux.go index 5ceffc4..8a1e7b6 100644 --- a/pacman/pacman_linux.go +++ b/pacman/pacman_linux.go @@ -73,17 +73,24 @@ func formatTargets(targets []snack.Target) []string { } func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.InstallResult, error) { + o := snack.ApplyOptions(opts...) var toInstall []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.Reinstall || t.Version != "" || o.DryRun { + toInstall = append(toInstall, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.InstallResult{}, err + } if ok { unchanged = append(unchanged, t.Name) } else { toInstall = append(toInstall, t) } } - o := snack.ApplyOptions(opts...) if len(toInstall) > 0 { base := []string{"-S", "--noconfirm"} if o.Refresh { @@ -103,17 +110,24 @@ func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (sn } func remove(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.RemoveResult, error) { + o := snack.ApplyOptions(opts...) var toRemove []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.DryRun { + toRemove = append(toRemove, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.RemoveResult{}, err + } if !ok { unchanged = append(unchanged, t.Name) } else { toRemove = append(toRemove, t) } } - o := snack.ApplyOptions(opts...) if len(toRemove) > 0 { args := append([]string{"-R", "--noconfirm"}, snack.TargetNames(toRemove)...) if _, err := run(ctx, args, o); err != nil { diff --git a/pkg/pkg_freebsd.go b/pkg/pkg_freebsd.go index f4e6829..c527ef1 100644 --- a/pkg/pkg_freebsd.go +++ b/pkg/pkg_freebsd.go @@ -55,17 +55,24 @@ func formatTargets(targets []snack.Target) []string { } func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.InstallResult, error) { + o := snack.ApplyOptions(opts...) var toInstall []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.Reinstall || t.Version != "" || o.DryRun { + toInstall = append(toInstall, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.InstallResult{}, err + } if ok { unchanged = append(unchanged, t.Name) } else { toInstall = append(toInstall, t) } } - o := snack.ApplyOptions(opts...) if len(toInstall) > 0 { args := append([]string{"install", "-y"}, formatTargets(toInstall)...) if _, err := run(ctx, args, o); err != nil { @@ -81,17 +88,24 @@ func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (sn } func remove(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.RemoveResult, error) { + o := snack.ApplyOptions(opts...) var toRemove []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.DryRun { + toRemove = append(toRemove, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.RemoveResult{}, err + } if !ok { unchanged = append(unchanged, t.Name) } else { toRemove = append(toRemove, t) } } - o := snack.ApplyOptions(opts...) if len(toRemove) > 0 { args := append([]string{"delete", "-y"}, snack.TargetNames(toRemove)...) if _, err := run(ctx, args, o); err != nil { diff --git a/ports/ports_openbsd.go b/ports/ports_openbsd.go index 1afe867..f7eae3a 100644 --- a/ports/ports_openbsd.go +++ b/ports/ports_openbsd.go @@ -43,17 +43,24 @@ func runCmd(ctx context.Context, name string, args []string, opts snack.Options) } func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.InstallResult, error) { + o := snack.ApplyOptions(opts...) var toInstall []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.Reinstall || t.Version != "" || o.DryRun { + toInstall = append(toInstall, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.InstallResult{}, err + } if ok { unchanged = append(unchanged, t.Name) } else { toInstall = append(toInstall, t) } } - o := snack.ApplyOptions(opts...) if len(toInstall) > 0 { if _, err := runCmd(ctx, "pkg_add", snack.TargetNames(toInstall), o); err != nil { return snack.InstallResult{}, err @@ -68,17 +75,24 @@ func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (sn } func remove(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.RemoveResult, error) { + o := snack.ApplyOptions(opts...) var toRemove []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.DryRun { + toRemove = append(toRemove, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.RemoveResult{}, err + } if !ok { unchanged = append(unchanged, t.Name) } else { toRemove = append(toRemove, t) } } - o := snack.ApplyOptions(opts...) if len(toRemove) > 0 { if _, err := runCmd(ctx, "pkg_delete", snack.TargetNames(toRemove), o); err != nil { return snack.RemoveResult{}, err diff --git a/rpm/rpm_linux.go b/rpm/rpm_linux.go index fc5fce6..9462ddc 100644 --- a/rpm/rpm_linux.go +++ b/rpm/rpm_linux.go @@ -68,17 +68,24 @@ func formatSources(targets []snack.Target) []string { } func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.InstallResult, error) { + o := snack.ApplyOptions(opts...) var toInstall []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.Reinstall || t.Version != "" || o.DryRun { + toInstall = append(toInstall, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.InstallResult{}, err + } if ok { unchanged = append(unchanged, t.Name) } else { toInstall = append(toInstall, t) } } - o := snack.ApplyOptions(opts...) if len(toInstall) > 0 { args := append([]string{"-i"}, formatSources(toInstall)...) if _, err := runWithSudo(ctx, args, o.Sudo); err != nil { @@ -94,17 +101,24 @@ func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (sn } func remove(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.RemoveResult, error) { + o := snack.ApplyOptions(opts...) var toRemove []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.DryRun { + toRemove = append(toRemove, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.RemoveResult{}, err + } if !ok { unchanged = append(unchanged, t.Name) } else { toRemove = append(toRemove, t) } } - o := snack.ApplyOptions(opts...) if len(toRemove) > 0 { args := append([]string{"-e"}, snack.TargetNames(toRemove)...) if _, err := runWithSudo(ctx, args, o.Sudo); err != nil { diff --git a/snap/snap_linux.go b/snap/snap_linux.go index b23905c..00bfa63 100644 --- a/snap/snap_linux.go +++ b/snap/snap_linux.go @@ -38,11 +38,18 @@ func run(ctx context.Context, args []string) (string, error) { } func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.InstallResult, error) { - _ = snack.ApplyOptions(opts...) + o := snack.ApplyOptions(opts...) var toInstall []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.Reinstall || t.Version != "" || o.DryRun { + toInstall = append(toInstall, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.InstallResult{}, err + } if ok { unchanged = append(unchanged, t.Name) } else { @@ -71,11 +78,19 @@ func install(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (sn return snack.InstallResult{Installed: installed, Unchanged: unchanged}, nil } -func remove(ctx context.Context, pkgs []snack.Target, _ ...snack.Option) (snack.RemoveResult, error) { +func remove(ctx context.Context, pkgs []snack.Target, opts ...snack.Option) (snack.RemoveResult, error) { + o := snack.ApplyOptions(opts...) var toRemove []snack.Target var unchanged []string for _, t := range pkgs { - ok, _ := isInstalled(ctx, t.Name) + if o.DryRun { + toRemove = append(toRemove, t) + continue + } + ok, err := isInstalled(ctx, t.Name) + if err != nil { + return snack.RemoveResult{}, err + } if !ok { unchanged = append(unchanged, t.Name) } else {