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  }