github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/modules/enable.go (about) 1 package modules 2 3 import ( 4 "errors" 5 "fmt" 6 "os" 7 "strings" 8 9 "github.com/lmorg/murex/config/profile" 10 "github.com/lmorg/murex/lang" 11 ) 12 13 func enableModules(p *lang.Process) error { 14 if p.Parameters.Len() < 2 { 15 return errors.New(noModulesToAble + "enable") 16 } 17 18 var disabled []string 19 err := profile.ReadJson(profile.ModulePath()+profile.DisabledFile, &disabled) 20 if err != nil { 21 return err 22 } 23 24 defer writeDisabled(&disabled) 25 26 for _, pack := range p.Parameters.StringArray()[1:] { 27 switch strings.Count(pack, "/") { 28 case 0: 29 if err := enablePack(pack); err != nil { 30 return err 31 } 32 case 1: 33 if disabled, err = enableMod(pack, disabled); err != nil { 34 return err 35 } 36 default: 37 return fmt.Errorf("`%s` is not a valid package/module format", pack) 38 } 39 } 40 41 return nil 42 } 43 44 func enablePack(pack string) error { 45 modulePath := profile.ModulePath() 46 return os.Rename(modulePath+pack+profile.IgnoredExt, modulePath+pack) 47 } 48 49 func enableMod(mod string, disabled []string) ([]string, error) { 50 for i := range disabled { 51 if disabled[i] == mod { 52 disabled[i] = disabled[len(disabled)-1] 53 return disabled[:len(disabled)-1], nil 54 } 55 } 56 57 return disabled, fmt.Errorf("`%s` does not exist or has already been enabled", mod) 58 }