blob: be81ac7ca2a4bdc633d2373b24e789a94b63ea7c [file] [log] [blame]
package cmd
import (
"fmt"
"os"
"os/exec"
"path"
"strings"
"github.com/Masterminds/cookoo"
)
// Quiet, when set to true, can suppress Info and Debug messages.
var Quiet = false
// These contanstants map to color codes for shell scripts making them
// human readable.
const (
Blue = "0;34"
Red = "0;31"
Green = "0;32"
Yellow = "0;33"
Cyan = "0;36"
Pink = "1;35"
)
// Color returns a string in a certain color. The first argument is a string
// containing the color code or a constant from the table above mapped to a code.
//
// The following will print the string "Foo" in yellow:
// fmt.Print(Color(Yellow, "Foo"))
func Color(code, msg string) string {
return fmt.Sprintf("\033[%sm%s\033[m", code, msg)
}
// BeQuiet supresses Info and Debug messages.
func BeQuiet(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) {
Quiet = p.Get("quiet", false).(bool)
return Quiet, nil
}
// VersionGuard ensures that the Go version is correct.
func VersionGuard(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) {
cmd := exec.Command("go", "version")
var out string
if out, err := cmd.CombinedOutput(); err != nil {
return nil, err
} else if !strings.Contains(string(out), "go1.5") {
Warn("You must install the Go 1.5 or greater toolchain to work with Glide.\n")
}
if os.Getenv("GO15VENDOREXPERIMENT") != "1" {
Warn("To use Glide, you must set GO15VENDOREXPERIMENT=1\n")
}
return out, nil
}
// CowardMode checks that the environment is setup before continuing on. If not
// setup and error is returned.
func CowardMode(c cookoo.Context, p *cookoo.Params) (interface{}, cookoo.Interrupt) {
gopath := os.Getenv("GOPATH")
if len(gopath) == 0 {
return false, fmt.Errorf("No GOPATH is set.\n")
}
_, err := os.Stat(path.Join(gopath, "src"))
if err != nil {
Error("Could not find %s/src.\n", gopath)
Info("As of Glide 0.5/Go 1.5, this is required.\n")
return false, err
}
return true, nil
}
// Info logs information
func Info(msg string, args ...interface{}) {
if Quiet {
return
}
fmt.Print(Color(Green, "[INFO] "))
Msg(msg, args...)
}
// Debug logs debug information
func Debug(msg string, args ...interface{}) {
if Quiet {
return
}
fmt.Print("[DEBUG] ")
Msg(msg, args...)
}
// Warn logs a warning
func Warn(msg string, args ...interface{}) {
fmt.Fprint(os.Stderr, Color(Yellow, "[WARN] "))
ErrMsg(msg, args...)
}
// Error logs and error.
func Error(msg string, args ...interface{}) {
fmt.Fprint(os.Stderr, Color(Red, "[ERROR] "))
ErrMsg(msg, args...)
}
// ErrMsg sends a message to Stderr
func ErrMsg(msg string, args ...interface{}) {
if len(args) == 0 {
fmt.Fprint(os.Stderr, msg)
return
}
fmt.Fprintf(os.Stderr, msg, args...)
}
// Msg prints a message with optional arguments, that can be printed, of
// varying types.
func Msg(msg string, args ...interface{}) {
if len(args) == 0 {
fmt.Print(msg)
return
}
fmt.Printf(msg, args...)
}