mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
added functionality to check the error message returned from Cobra, if any. for uage message text. If its present, the usage message gets truncated and the resulting message is returned to be used for the rest of the error message. If the resulting error is blank, no error message is printed
This commit is contained in:
parent
4c735a7878
commit
4b979b17cc
2 changed files with 54 additions and 2 deletions
|
@ -2,6 +2,7 @@ package utils
|
|||
|
||||
import (
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
jww "github.com/spf13/jwalterweatherman"
|
||||
)
|
||||
|
@ -21,12 +22,35 @@ func CheckErr(err error, s ...string) {
|
|||
func StopOnErr(err error, s ...string) {
|
||||
if err != nil {
|
||||
if len(s) == 0 {
|
||||
jww.CRITICAL.Println(err)
|
||||
newMessage := cutUsageMessage(err.Error())
|
||||
|
||||
// Printing an empty string results in a error with
|
||||
// no message, no bueno.
|
||||
if newMessage != "" {
|
||||
jww.CRITICAL.Println(newMessage)
|
||||
}
|
||||
} else {
|
||||
for _, message := range s {
|
||||
jww.CRITICAL.Println(message)
|
||||
message := cutUsageMessage(message)
|
||||
|
||||
if message != "" {
|
||||
jww.CRITICAL.Println(message)
|
||||
}
|
||||
}
|
||||
}
|
||||
os.Exit(-1)
|
||||
}
|
||||
}
|
||||
|
||||
// cutUsageMessage splits the incoming string on the beginning of the usage
|
||||
// message text. Anything in the first element of the returned slice, trimmed
|
||||
// of its Unicode defined spaces, should be returned. The 2nd element of the
|
||||
// slice will have the usage message that we wish to elide.
|
||||
//
|
||||
// This is done because Cobra already prints Hugo's usage message; not eliding
|
||||
// would result in the usage output being printed twice, which leads to bug
|
||||
// reports, more specifically: https://github.com/spf13/hugo/issues/374
|
||||
func cutUsageMessage(s string) string {
|
||||
pieces := strings.Split(s, "Usage of")
|
||||
return strings.TrimSpace(pieces[0])
|
||||
}
|
||||
|
|
28
utils/utils_test.go
Normal file
28
utils/utils_test.go
Normal file
|
@ -0,0 +1,28 @@
|
|||
package utils
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
|
||||
|
||||
func TestCutUsageMessage(t *testing.T) {
|
||||
tests := []struct{
|
||||
message string
|
||||
cutMessage string
|
||||
}{
|
||||
{"", ""},
|
||||
{" Usage of hugo: \n -b, --baseUrl=...", ""},
|
||||
{"Some error Usage of hugo: \n", "Some error"},
|
||||
{"Usage of hugo: \n -b --baseU", ""},
|
||||
{"CRITICAL error for usage of hugo ", "CRITICAL error for usage of hugo"},
|
||||
{"Invalid short flag a in -abcde", "Invalid short flag a in -abcde"},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
message := cutUsageMessage(test.message)
|
||||
if message != test.cutMessage {
|
||||
t.Errorf("Expected %#v, got %#v", test.cutMessage, message)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue