github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/modules/cmd-remove.go (about)

     1  package modules
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"strings"
     7  
     8  	"github.com/lmorg/murex/config/profile"
     9  	"github.com/lmorg/murex/lang"
    10  	"github.com/lmorg/murex/utils/lists"
    11  )
    12  
    13  func removePackage(p *lang.Process) error {
    14  	modulePath := profile.ModulePath()
    15  
    16  	db, err := readPackagesFile(modulePath + profile.PackagesFile)
    17  	if err != nil {
    18  		return err
    19  	}
    20  
    21  	pack, err := p.Parameters.String(1)
    22  	if err != nil {
    23  		return err
    24  	}
    25  
    26  	if strings.Contains(pack, "/") {
    27  		return fmt.Errorf("package '%s' contains invalid character '/'. You cannot remove modules, only packages.\nTo disable modules, use `murex-package disable %s` instead", pack, pack)
    28  	}
    29  
    30  	i := packageExistsInDb(pack, db)
    31  	if i == -1 {
    32  		return fmt.Errorf("package '%s' is either not installed or missing from 'packages.json'", pack)
    33  	}
    34  
    35  	db, err = lists.RemoveOrdered(db, i)
    36  	if err != nil {
    37  		return fmt.Errorf("cannot remove package from 'packages.json': %s", err.Error())
    38  	}
    39  	err = writePackagesFile(&db)
    40  	if err != nil {
    41  		return fmt.Errorf("cannot write 'packages.json': %s", err.Error())
    42  	}
    43  
    44  	sEnabled := modulePath + "/" + pack
    45  	sDisabled := modulePath + "/" + pack + profile.IgnoredExt
    46  
    47  	fEnabled, errEnabled := os.Stat(sEnabled)
    48  	fDisabled, errDisabled := os.Stat(sDisabled)
    49  
    50  	switch {
    51  	case errEnabled == nil && fEnabled.IsDir():
    52  		write(p, "Removing package '{BOLD}%s{RESET}'....", pack)
    53  		write(p, "Please note that you'll have to restart murex for this to take effect")
    54  		return os.RemoveAll(sEnabled)
    55  
    56  	case errDisabled == nil && fDisabled.IsDir():
    57  		write(p, "Removing package '{BOLD}%s{RESET}'....", pack)
    58  		return os.RemoveAll(sDisabled)
    59  
    60  	default:
    61  		return fmt.Errorf("no package named '%s' was found in '%s'", pack, modulePath)
    62  	}
    63  }
    64  
    65  // -1 == not found
    66  // all other numbers are the index in []packageDb
    67  func packageExistsInDb(pack string, db []packageDb) int {
    68  	for i := range db {
    69  		if db[i].Package == pack {
    70  			return i
    71  		}
    72  	}
    73  	return -1
    74  }