github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/management/version.go (about) 1 package management 2 3 import ( 4 "errors" 5 "fmt" 6 "regexp" 7 8 "github.com/lmorg/murex/app" 9 "github.com/lmorg/murex/config/defaults" 10 "github.com/lmorg/murex/lang" 11 "github.com/lmorg/murex/lang/types" 12 ) 13 14 func init() { 15 lang.DefineFunction("version", cmdVersion, types.String) 16 17 defaults.AppendProfile(` 18 autocomplete set version { [{ 19 "Flags": [ "--short", "--no-app-name", "--license", "--copyright" ] 20 }] } 21 `) 22 } 23 24 var rxVersionNum = regexp.MustCompile(`^[0-9]+\.[0-9]+`) 25 26 func cmdVersion(p *lang.Process) error { 27 s, _ := p.Parameters.String(0) 28 29 switch s { 30 31 case "--short": 32 p.Stdout.SetDataType(types.Number) 33 num := rxVersionNum.FindStringSubmatch(app.Version()) 34 if len(num) != 1 { 35 return errors.New("unable to extract version number from string") 36 } 37 _, err := p.Stdout.Write([]byte(num[0])) 38 return err 39 40 case "--no-app-name": 41 p.Stdout.SetDataType(types.String) 42 _, err := p.Stdout.Writeln([]byte(app.Version())) 43 return err 44 45 case "--license": 46 p.Stdout.SetDataType(types.String) 47 _, err := p.Stdout.Writeln([]byte(app.License)) 48 return err 49 50 case "--copyright": 51 p.Stdout.SetDataType(types.String) 52 _, err := p.Stdout.Writeln([]byte(app.Copyright)) 53 return err 54 55 case "": 56 p.Stdout.SetDataType(types.String) 57 v := fmt.Sprintf("%s: %s\n%s\n%s", app.Name, app.Version(), app.License, app.Copyright) 58 _, err := p.Stdout.Writeln([]byte(v)) 59 return err 60 61 default: 62 return fmt.Errorf("not a valid parameter: %s", s) 63 } 64 65 }