github.com/shohhei1126/hugo@v0.42.2-0.20180623210752-3d5928889ad7/commands/helpers.go (about)

     1  // Copyright 2018 The Hugo Authors. All rights reserved.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  // http://www.apache.org/licenses/LICENSE-2.0
     7  //
     8  // Unless required by applicable law or agreed to in writing, software
     9  // distributed under the License is distributed on an "AS IS" BASIS,
    10  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    11  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  
    14  // Package commands defines and implements command-line commands and flags
    15  // used by Hugo. Commands and flags are implemented using Cobra.
    16  package commands
    17  
    18  import (
    19  	"fmt"
    20  	"regexp"
    21  
    22  	"github.com/gohugoio/hugo/config"
    23  	"github.com/spf13/cobra"
    24  )
    25  
    26  type flagsToConfigHandler interface {
    27  	flagsToConfig(cfg config.Provider)
    28  }
    29  
    30  type cmder interface {
    31  	flagsToConfigHandler
    32  	getCommand() *cobra.Command
    33  }
    34  
    35  // commandError is an error used to signal different error situations in command handling.
    36  type commandError struct {
    37  	s         string
    38  	userError bool
    39  }
    40  
    41  func (c commandError) Error() string {
    42  	return c.s
    43  }
    44  
    45  func (c commandError) isUserError() bool {
    46  	return c.userError
    47  }
    48  
    49  func newUserError(a ...interface{}) commandError {
    50  	return commandError{s: fmt.Sprintln(a...), userError: true}
    51  }
    52  
    53  func newSystemError(a ...interface{}) commandError {
    54  	return commandError{s: fmt.Sprintln(a...), userError: false}
    55  }
    56  
    57  func newSystemErrorF(format string, a ...interface{}) commandError {
    58  	return commandError{s: fmt.Sprintf(format, a...), userError: false}
    59  }
    60  
    61  // Catch some of the obvious user errors from Cobra.
    62  // We don't want to show the usage message for every error.
    63  // The below may be to generic. Time will show.
    64  var userErrorRegexp = regexp.MustCompile("argument|flag|shorthand")
    65  
    66  func isUserError(err error) bool {
    67  	if cErr, ok := err.(commandError); ok && cErr.isUserError() {
    68  		return true
    69  	}
    70  
    71  	return userErrorRegexp.MatchString(err.Error())
    72  }