github.com/elmarschill/hugo_sample@v0.47.1/commands/list.go (about)

     1  // Copyright 2015 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  	"path/filepath"
    18  
    19  	"github.com/gohugoio/hugo/hugolib"
    20  	"github.com/spf13/cobra"
    21  	jww "github.com/spf13/jwalterweatherman"
    22  )
    23  
    24  var _ cmder = (*listCmd)(nil)
    25  
    26  type listCmd struct {
    27  	hugoBuilderCommon
    28  	*baseCmd
    29  }
    30  
    31  func newListCmd() *listCmd {
    32  	cc := &listCmd{}
    33  
    34  	cc.baseCmd = newBaseCmd(&cobra.Command{
    35  		Use:   "list",
    36  		Short: "Listing out various types of content",
    37  		Long: `Listing out various types of content.
    38  
    39  List requires a subcommand, e.g. ` + "`hugo list drafts`.",
    40  		RunE: nil,
    41  	})
    42  
    43  	cc.cmd.AddCommand(
    44  		&cobra.Command{
    45  			Use:   "drafts",
    46  			Short: "List all drafts",
    47  			Long:  `List all of the drafts in your content directory.`,
    48  			RunE: func(cmd *cobra.Command, args []string) error {
    49  				cfgInit := func(c *commandeer) error {
    50  					c.Set("buildDrafts", true)
    51  					return nil
    52  				}
    53  				c, err := initializeConfig(true, false, &cc.hugoBuilderCommon, cc, cfgInit)
    54  				if err != nil {
    55  					return err
    56  				}
    57  
    58  				sites, err := hugolib.NewHugoSites(*c.DepsCfg)
    59  
    60  				if err != nil {
    61  					return newSystemError("Error creating sites", err)
    62  				}
    63  
    64  				if err := sites.Build(hugolib.BuildCfg{SkipRender: true}); err != nil {
    65  					return newSystemError("Error Processing Source Content", err)
    66  				}
    67  
    68  				for _, p := range sites.Pages() {
    69  					if p.IsDraft() {
    70  						jww.FEEDBACK.Println(filepath.Join(p.File.Dir(), p.File.LogicalName()))
    71  					}
    72  
    73  				}
    74  
    75  				return nil
    76  
    77  			},
    78  		},
    79  		&cobra.Command{
    80  			Use:   "future",
    81  			Short: "List all posts dated in the future",
    82  			Long: `List all of the posts in your content directory which will be
    83  posted in the future.`,
    84  			RunE: func(cmd *cobra.Command, args []string) error {
    85  				cfgInit := func(c *commandeer) error {
    86  					c.Set("buildFuture", true)
    87  					return nil
    88  				}
    89  				c, err := initializeConfig(true, false, &cc.hugoBuilderCommon, cc, cfgInit)
    90  				if err != nil {
    91  					return err
    92  				}
    93  
    94  				sites, err := hugolib.NewHugoSites(*c.DepsCfg)
    95  
    96  				if err != nil {
    97  					return newSystemError("Error creating sites", err)
    98  				}
    99  
   100  				if err := sites.Build(hugolib.BuildCfg{SkipRender: true}); err != nil {
   101  					return newSystemError("Error Processing Source Content", err)
   102  				}
   103  
   104  				for _, p := range sites.Pages() {
   105  					if p.IsFuture() {
   106  						jww.FEEDBACK.Println(filepath.Join(p.File.Dir(), p.File.LogicalName()))
   107  					}
   108  
   109  				}
   110  
   111  				return nil
   112  
   113  			},
   114  		},
   115  		&cobra.Command{
   116  			Use:   "expired",
   117  			Short: "List all posts already expired",
   118  			Long: `List all of the posts in your content directory which has already
   119  expired.`,
   120  			RunE: func(cmd *cobra.Command, args []string) error {
   121  				cfgInit := func(c *commandeer) error {
   122  					c.Set("buildExpired", true)
   123  					return nil
   124  				}
   125  				c, err := initializeConfig(true, false, &cc.hugoBuilderCommon, cc, cfgInit)
   126  				if err != nil {
   127  					return err
   128  				}
   129  
   130  				sites, err := hugolib.NewHugoSites(*c.DepsCfg)
   131  
   132  				if err != nil {
   133  					return newSystemError("Error creating sites", err)
   134  				}
   135  
   136  				if err := sites.Build(hugolib.BuildCfg{SkipRender: true}); err != nil {
   137  					return newSystemError("Error Processing Source Content", err)
   138  				}
   139  
   140  				for _, p := range sites.Pages() {
   141  					if p.IsExpired() {
   142  						jww.FEEDBACK.Println(filepath.Join(p.File.Dir(), p.File.LogicalName()))
   143  					}
   144  
   145  				}
   146  
   147  				return nil
   148  
   149  			},
   150  		},
   151  	)
   152  
   153  	cc.cmd.PersistentFlags().StringVarP(&cc.source, "source", "s", "", "filesystem path to read files relative from")
   154  	cc.cmd.PersistentFlags().SetAnnotation("source", cobra.BashCompSubdirsInDir, []string{})
   155  
   156  	return cc
   157  }