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  }