github.com/hwaf/hwaf@v0.0.0-20140814122253-5465f73b20f1/cmd_waf_show_aliases.go (about)

     1  package main
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"fmt"
     7  	"strings"
     8  
     9  	"github.com/gonuts/commander"
    10  	gocfg "github.com/gonuts/config"
    11  	"github.com/gonuts/flag"
    12  )
    13  
    14  func hwaf_make_cmd_waf_show_aliases() *commander.Command {
    15  	cmd := &commander.Command{
    16  		Run:       hwaf_run_cmd_waf_show_aliases,
    17  		UsageLine: "aliases [options]",
    18  		Short:     "show list of registered aliases for the local project",
    19  		Long: `
    20  show list of registered aliases for the local project.
    21  
    22  ex:
    23   $ hwaf show aliases
    24   ['target-slc6', 'opt']
    25  
    26   $ hwaf show aliases athena
    27   athena=athena.py
    28  
    29  `,
    30  		Flag: *flag.NewFlagSet("hwaf-waf-show-aliases", flag.ExitOnError),
    31  	}
    32  	return cmd
    33  }
    34  
    35  func hwaf_run_cmd_waf_show_aliases(cmd *commander.Command, args []string) error {
    36  	var err error
    37  
    38  	pinfo, err := g_ctx.ProjectInfos()
    39  	if err != nil {
    40  		return err
    41  	}
    42  
    43  	val, err := pinfo.Get("HWAF_RUNTIME_ALIASES")
    44  	if err != nil {
    45  		if _, ok := err.(gocfg.OptionError); ok {
    46  			// no alias defined
    47  			return fmt.Errorf("no runtime alias defined")
    48  		}
    49  		if err != nil {
    50  			return err
    51  		}
    52  	}
    53  
    54  	tmp := make([][2]string, 0)
    55  	val = strings.Replace(val, `['`, `["`, -1)
    56  	val = strings.Replace(val, `', '`, `", "`, -1)
    57  	val = strings.Replace(val, `']`, `"]`, -1)
    58  
    59  	buf := bytes.NewReader([]byte(val))
    60  	err = json.NewDecoder(buf).Decode(&tmp)
    61  	if err != nil {
    62  		return err
    63  	}
    64  
    65  	aliases := make(map[string]string, len(tmp))
    66  	for _, alias := range tmp {
    67  		dst, src := alias[0], alias[1]
    68  		aliases[dst] = src
    69  		//fmt.Printf("%s=%q\n", dst, src)
    70  	}
    71  
    72  	if len(args) <= 0 {
    73  		for dst, src := range aliases {
    74  			fmt.Printf("%s=%q\n", dst, src)
    75  		}
    76  	} else {
    77  		all_good := true
    78  		for _, dst := range args {
    79  			src, ok := aliases[dst]
    80  			if !ok {
    81  				g_ctx.Errorf("no such alias %q\n", dst)
    82  				all_good = false
    83  				continue
    84  			}
    85  			fmt.Printf("%s=%q\n", dst, src)
    86  		}
    87  		if !all_good {
    88  			// TODO(sbinet) define and use an ErrorStack
    89  			err = fmt.Errorf("problem while running show alias")
    90  		}
    91  	}
    92  
    93  	return err
    94  }
    95  
    96  // EOF