github.com/jason-dour/hugo@v0.63.3/commands/genman.go (about)

     1  // Copyright 2016 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
    15  
    16  import (
    17  	"fmt"
    18  	"strings"
    19  
    20  	"github.com/gohugoio/hugo/common/hugo"
    21  	"github.com/gohugoio/hugo/helpers"
    22  	"github.com/gohugoio/hugo/hugofs"
    23  	"github.com/spf13/cobra"
    24  	"github.com/spf13/cobra/doc"
    25  	jww "github.com/spf13/jwalterweatherman"
    26  )
    27  
    28  var _ cmder = (*genManCmd)(nil)
    29  
    30  type genManCmd struct {
    31  	genmandir string
    32  	*baseCmd
    33  }
    34  
    35  func newGenManCmd() *genManCmd {
    36  	cc := &genManCmd{}
    37  
    38  	cc.baseCmd = newBaseCmd(&cobra.Command{
    39  		Use:   "man",
    40  		Short: "Generate man pages for the Hugo CLI",
    41  		Long: `This command automatically generates up-to-date man pages of Hugo's
    42  command-line interface.  By default, it creates the man page files
    43  in the "man" directory under the current directory.`,
    44  
    45  		RunE: func(cmd *cobra.Command, args []string) error {
    46  			header := &doc.GenManHeader{
    47  				Section: "1",
    48  				Manual:  "Hugo Manual",
    49  				Source:  fmt.Sprintf("Hugo %s", hugo.CurrentVersion),
    50  			}
    51  			if !strings.HasSuffix(cc.genmandir, helpers.FilePathSeparator) {
    52  				cc.genmandir += helpers.FilePathSeparator
    53  			}
    54  			if found, _ := helpers.Exists(cc.genmandir, hugofs.Os); !found {
    55  				jww.FEEDBACK.Println("Directory", cc.genmandir, "does not exist, creating...")
    56  				if err := hugofs.Os.MkdirAll(cc.genmandir, 0777); err != nil {
    57  					return err
    58  				}
    59  			}
    60  			cmd.Root().DisableAutoGenTag = true
    61  
    62  			jww.FEEDBACK.Println("Generating Hugo man pages in", cc.genmandir, "...")
    63  			doc.GenManTree(cmd.Root(), header, cc.genmandir)
    64  
    65  			jww.FEEDBACK.Println("Done.")
    66  
    67  			return nil
    68  		},
    69  	})
    70  
    71  	cc.cmd.PersistentFlags().StringVar(&cc.genmandir, "dir", "man/", "the directory to write the man pages.")
    72  
    73  	// For bash-completion
    74  	cc.cmd.PersistentFlags().SetAnnotation("dir", cobra.BashCompSubdirsInDir, []string{})
    75  
    76  	return cc
    77  }