summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/unknwon/com/cmd.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/unknwon/com/cmd.go')
-rw-r--r--vendor/github.com/unknwon/com/cmd.go161
1 files changed, 161 insertions, 0 deletions
diff --git a/vendor/github.com/unknwon/com/cmd.go b/vendor/github.com/unknwon/com/cmd.go
new file mode 100644
index 0000000000..5b4bbaee97
--- /dev/null
+++ b/vendor/github.com/unknwon/com/cmd.go
@@ -0,0 +1,161 @@
+// +build go1.3
+
+// Copyright 2013 com authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License"): you may
+// not use this file except in compliance with the License. You may obtain
+// a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations
+// under the License.
+
+// Package com is an open source project for commonly used functions for the Go programming language.
+package com
+
+import (
+ "bytes"
+ "fmt"
+ "os/exec"
+ "runtime"
+ "strings"
+)
+
+// ExecCmdDirBytes executes system command in given directory
+// and return stdout, stderr in bytes type, along with possible error.
+func ExecCmdDirBytes(dir, cmdName string, args ...string) ([]byte, []byte, error) {
+ bufOut := new(bytes.Buffer)
+ bufErr := new(bytes.Buffer)
+
+ cmd := exec.Command(cmdName, args...)
+ cmd.Dir = dir
+ cmd.Stdout = bufOut
+ cmd.Stderr = bufErr
+
+ err := cmd.Run()
+ return bufOut.Bytes(), bufErr.Bytes(), err
+}
+
+// ExecCmdBytes executes system command
+// and return stdout, stderr in bytes type, along with possible error.
+func ExecCmdBytes(cmdName string, args ...string) ([]byte, []byte, error) {
+ return ExecCmdDirBytes("", cmdName, args...)
+}
+
+// ExecCmdDir executes system command in given directory
+// and return stdout, stderr in string type, along with possible error.
+func ExecCmdDir(dir, cmdName string, args ...string) (string, string, error) {
+ bufOut, bufErr, err := ExecCmdDirBytes(dir, cmdName, args...)
+ return string(bufOut), string(bufErr), err
+}
+
+// ExecCmd executes system command
+// and return stdout, stderr in string type, along with possible error.
+func ExecCmd(cmdName string, args ...string) (string, string, error) {
+ return ExecCmdDir("", cmdName, args...)
+}
+
+// _________ .__ .____
+// \_ ___ \ ____ | | ___________ | | ____ ____
+// / \ \/ / _ \| | / _ \_ __ \ | | / _ \ / ___\
+// \ \___( <_> ) |_( <_> ) | \/ | |__( <_> ) /_/ >
+// \______ /\____/|____/\____/|__| |_______ \____/\___ /
+// \/ \/ /_____/
+
+// Color number constants.
+const (
+ Gray = uint8(iota + 90)
+ Red
+ Green
+ Yellow
+ Blue
+ Magenta
+ //NRed = uint8(31) // Normal
+ EndColor = "\033[0m"
+)
+
+// getColorLevel returns colored level string by given level.
+func getColorLevel(level string) string {
+ level = strings.ToUpper(level)
+ switch level {
+ case "TRAC":
+ return fmt.Sprintf("\033[%dm%s\033[0m", Blue, level)
+ case "ERRO":
+ return fmt.Sprintf("\033[%dm%s\033[0m", Red, level)
+ case "WARN":
+ return fmt.Sprintf("\033[%dm%s\033[0m", Magenta, level)
+ case "SUCC":
+ return fmt.Sprintf("\033[%dm%s\033[0m", Green, level)
+ default:
+ return level
+ }
+}
+
+// ColorLogS colors log and return colored content.
+// Log format: <level> <content [highlight][path]> [ error ].
+// Level: TRAC -> blue; ERRO -> red; WARN -> Magenta; SUCC -> green; others -> default.
+// Content: default; path: yellow; error -> red.
+// Level has to be surrounded by "[" and "]".
+// Highlights have to be surrounded by "# " and " #"(space), "#" will be deleted.
+// Paths have to be surrounded by "( " and " )"(space).
+// Errors have to be surrounded by "[ " and " ]"(space).
+// Note: it hasn't support windows yet, contribute is welcome.
+func ColorLogS(format string, a ...interface{}) string {
+ log := fmt.Sprintf(format, a...)
+
+ var clog string
+
+ if runtime.GOOS != "windows" {
+ // Level.
+ i := strings.Index(log, "]")
+ if log[0] == '[' && i > -1 {
+ clog += "[" + getColorLevel(log[1:i]) + "]"
+ }
+
+ log = log[i+1:]
+
+ // Error.
+ log = strings.Replace(log, "[ ", fmt.Sprintf("[\033[%dm", Red), -1)
+ log = strings.Replace(log, " ]", EndColor+"]", -1)
+
+ // Path.
+ log = strings.Replace(log, "( ", fmt.Sprintf("(\033[%dm", Yellow), -1)
+ log = strings.Replace(log, " )", EndColor+")", -1)
+
+ // Highlights.
+ log = strings.Replace(log, "# ", fmt.Sprintf("\033[%dm", Gray), -1)
+ log = strings.Replace(log, " #", EndColor, -1)
+
+ } else {
+ // Level.
+ i := strings.Index(log, "]")
+ if log[0] == '[' && i > -1 {
+ clog += "[" + log[1:i] + "]"
+ }
+
+ log = log[i+1:]
+
+ // Error.
+ log = strings.Replace(log, "[ ", "[", -1)
+ log = strings.Replace(log, " ]", "]", -1)
+
+ // Path.
+ log = strings.Replace(log, "( ", "(", -1)
+ log = strings.Replace(log, " )", ")", -1)
+
+ // Highlights.
+ log = strings.Replace(log, "# ", "", -1)
+ log = strings.Replace(log, " #", "", -1)
+ }
+ return clog + log
+}
+
+// ColorLog prints colored log to stdout.
+// See color rules in function 'ColorLogS'.
+func ColorLog(format string, a ...interface{}) {
+ fmt.Print(ColorLogS(format, a...))
+}