github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/modules/disable.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 "github.com/lmorg/murex/utils/json" 12 ) 13 14 const noModulesToAble = "missing package or package/module names to " 15 16 func disableModules(p *lang.Process) error { 17 if p.Parameters.Len() < 2 { 18 return errors.New(noModulesToAble + "disable") 19 } 20 21 var disabled []string 22 if err := profile.ReadJson(profile.ModulePath()+profile.DisabledFile, &disabled); err != nil { 23 return err 24 } 25 26 defer writeDisabled(&disabled) 27 28 for _, pack := range p.Parameters.StringArray()[1:] { 29 switch strings.Count(pack, "/") { 30 case 0: 31 if err := disablePack(pack); err != nil { 32 return err 33 } 34 case 1: 35 if err := disableMod(pack, &disabled); err != nil { 36 return err 37 } 38 default: 39 return fmt.Errorf("`%s` is not a valid package/module format", pack) 40 } 41 } 42 43 return nil 44 } 45 46 func disablePack(pack string) error { 47 modulePath := profile.ModulePath() 48 return os.Rename(modulePath+pack, modulePath+pack+profile.IgnoredExt) 49 } 50 51 func disableMod(mod string, disabled *[]string) error { 52 for i := range *disabled { 53 if (*disabled)[i] == mod { 54 return fmt.Errorf("`%s` has already been disabled", mod) 55 } 56 } 57 58 *disabled = append(*disabled, mod) 59 return nil 60 } 61 62 func writeDisabled(disabled *[]string) error { 63 file, err := os.OpenFile(profile.ModulePath()+profile.DisabledFile, os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0640) 64 if err != nil { 65 return err 66 } 67 defer file.Close() 68 69 b, err := json.Marshal(*disabled, true) 70 if err != nil { 71 return err 72 } 73 74 _, err = file.Write(b) 75 return err 76 }