github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/runners/packages/uninstall.go (about) 1 package packages 2 3 import ( 4 "github.com/ActiveState/cli/internal/captain" 5 "github.com/ActiveState/cli/internal/errs" 6 "github.com/ActiveState/cli/internal/logging" 7 "github.com/ActiveState/cli/internal/rtutils/ptr" 8 "github.com/ActiveState/cli/internal/runbits/rationalize" 9 "github.com/ActiveState/cli/internal/runbits/requirements" 10 "github.com/ActiveState/cli/pkg/platform/api/buildplanner/types" 11 "github.com/ActiveState/cli/pkg/platform/model" 12 ) 13 14 // UninstallRunParams tracks the info required for running Uninstall. 15 type UninstallRunParams struct { 16 Packages captain.PackagesValueNoVersion 17 } 18 19 // Uninstall manages the uninstalling execution context. 20 type Uninstall struct { 21 prime primeable 22 } 23 24 // NewUninstall prepares an uninstallation execution context for use. 25 func NewUninstall(prime primeable) *Uninstall { 26 return &Uninstall{prime} 27 } 28 29 // Run executes the uninstall behavior. 30 func (u *Uninstall) Run(params UninstallRunParams, nsType model.NamespaceType) (rerr error) { 31 defer rationalizeError(u.prime.Auth(), &rerr) 32 logging.Debug("ExecuteUninstall") 33 if u.prime.Project() == nil { 34 return rationalize.ErrNoProject 35 } 36 37 var reqs []*requirements.Requirement 38 for _, p := range params.Packages { 39 req := &requirements.Requirement{ 40 Name: p.Name, 41 Operation: types.OperationRemoved, 42 } 43 44 if p.Namespace != "" { 45 req.Namespace = ptr.To(model.NewRawNamespace(p.Namespace)) 46 } else { 47 req.NamespaceType = &nsType 48 } 49 50 reqs = append(reqs, req) 51 } 52 53 ts, err := getTime(&captain.TimeValue{}, u.prime.Auth(), u.prime.Project()) 54 if err != nil { 55 return errs.Wrap(err, "Unable to get timestamp from params") 56 } 57 58 return requirements.NewRequirementOperation(u.prime).ExecuteRequirementOperation(ts, reqs...) 59 }