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