summaryrefslogtreecommitdiffstats
path: root/commands/helpers.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-04-10 08:55:13 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-04-11 09:50:19 +0200
commit018602c46db8d729af2871bd5f4c1e7480420f09 (patch)
tree9e497ea0125930522cb0bf522f9687992ded44f5 /commands/helpers.go
parent2f0d98a19b021d03930003217b0519afaef3a391 (diff)
commands: Extract some common types into its own file
See #4598
Diffstat (limited to 'commands/helpers.go')
-rw-r--r--commands/helpers.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/commands/helpers.go b/commands/helpers.go
new file mode 100644
index 000000000..78e549d22
--- /dev/null
+++ b/commands/helpers.go
@@ -0,0 +1,62 @@
+// Copyright 2018 The Hugo Authors. All rights reserved.
+//
+// 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 commands defines and implements command-line commands and flags
+// used by Hugo. Commands and flags are implemented using Cobra.
+package commands
+
+const (
+ ansiEsc = "\u001B"
+ clearLine = "\r\033[K"
+ hideCursor = ansiEsc + "[?25l"
+ showCursor = ansiEsc + "[?25h"
+)
+
+// commandError is an error used to signal different error situations in command handling.
+type commandError struct {
+ s string
+ userError bool
+}
+
+func (c commandError) Error() string {
+ return c.s
+}
+
+func (c commandError) isUserError() bool {
+ return c.userError
+}
+
+func newUserError(a ...interface{}) commandError {
+ return commandError{s: fmt.Sprintln(a...), userError: true}
+}
+
+func newSystemError(a ...interface{}) commandError {
+ return commandError{s: fmt.Sprintln(a...), userError: false}
+}
+
+func newSystemErrorF(format string, a ...interface{}) commandError {
+ return commandError{s: fmt.Sprintf(format, a...), userError: false}
+}
+
+// Catch some of the obvious user errors from Cobra.
+// We don't want to show the usage message for every error.
+// The below may be to generic. Time will show.
+var userErrorRegexp = regexp.MustCompile("argument|flag|shorthand")
+
+func isUserError(err error) bool {
+ if cErr, ok := err.(commandError); ok && cErr.isUserError() {
+ return true
+ }
+
+ return userErrorRegexp.MatchString(err.Error())
+}