github.com/ActiveState/cli@v0.0.0-20240508170324-6801f60cd051/internal/runners/clean/run.go (about)

     1  package clean
     2  
     3  import (
     4  	"os"
     5  
     6  	"github.com/ActiveState/cli/internal/errs"
     7  	"github.com/ActiveState/cli/internal/fileutils"
     8  	"github.com/ActiveState/cli/internal/locale"
     9  	"github.com/ActiveState/cli/internal/osutils"
    10  	"github.com/ActiveState/cli/internal/runners/prepare"
    11  	"github.com/ActiveState/cli/internal/subshell"
    12  	"github.com/ActiveState/cli/internal/subshell/sscommon"
    13  )
    14  
    15  func removeCache(cachePath string) error {
    16  	err := os.RemoveAll(cachePath)
    17  	if err != nil {
    18  		if osutils.IsAccessDeniedError(err) {
    19  			return locale.WrapExternalError(err, "err_remove_cache")
    20  		}
    21  		return locale.WrapError(err, "err_remove_cache")
    22  	}
    23  	return nil
    24  }
    25  
    26  func undoPrepare() error {
    27  	err := prepare.CleanOS()
    28  	if err != nil {
    29  		return locale.WrapError(err, "err_prepare_clean", "Could not perform OS-specific cleanup")
    30  	}
    31  
    32  	toRemove, err := prepare.InstalledPreparedFiles()
    33  	if err != nil {
    34  		return locale.WrapError(err, "err_prepared_files", "Could not determine files to remove")
    35  	}
    36  
    37  	var aggErr error
    38  	for _, f := range toRemove {
    39  		if fileutils.TargetExists(f) {
    40  			err := os.RemoveAll(f)
    41  			if err != nil {
    42  				aggErr = locale.WrapError(aggErr, "err_undo_prepare_remove_file", "Failed to remove file {{.V0}}", f)
    43  			}
    44  		}
    45  	}
    46  
    47  	return aggErr
    48  }
    49  
    50  func removeEnvPaths(cfg configurable) error {
    51  	isAdmin, err := osutils.IsAdmin()
    52  	if err != nil {
    53  		return errs.Wrap(err, "Could not determine if running as Windows administrator")
    54  	}
    55  
    56  	// remove shell file additions
    57  	s := subshell.New(cfg)
    58  	if err := s.CleanUserEnv(cfg, sscommon.InstallID, !isAdmin); err != nil {
    59  		return errs.Wrap(err, "Failed to remove State Tool installation PATH")
    60  	}
    61  	// Default projects will stop working, so we return them from the PATH as well
    62  	if err := s.CleanUserEnv(cfg, sscommon.DefaultID, !isAdmin); err != nil {
    63  		return errs.Wrap(err, "Failed to remove project directory from PATH")
    64  	}
    65  
    66  	if err := s.RemoveLegacyInstallPath(cfg); err != nil {
    67  		return errs.Wrap(err, "Failed to remove legacy install path")
    68  	}
    69  
    70  	return nil
    71  }