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 }