commands: Make the list commands non-global

See #4598
This commit is contained in:
Bjørn Erik Pedersen 2018-04-09 20:42:08 +02:00
parent 2a2c983867
commit e26a8b242a
No known key found for this signature in database
GPG key ID: 330E6E2BD4859D8F
4 changed files with 127 additions and 100 deletions

View file

@ -22,6 +22,10 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
var (
_ cmder = (*genChromaStyles)(nil)
)
type genChromaStyles struct { type genChromaStyles struct {
style string style string
highlightStyle string highlightStyle string
@ -29,6 +33,10 @@ type genChromaStyles struct {
cmd *cobra.Command cmd *cobra.Command
} }
func (c *genChromaStyles) getCommand() *cobra.Command {
return c.cmd
}
// TODO(bep) highlight // TODO(bep) highlight
func createGenChromaStyles() *genChromaStyles { func createGenChromaStyles() *genChromaStyles {
g := &genChromaStyles{ g := &genChromaStyles{

View file

@ -23,11 +23,19 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
var (
_ cmder = (*genDocsHelper)(nil)
)
type genDocsHelper struct { type genDocsHelper struct {
target string target string
cmd *cobra.Command cmd *cobra.Command
} }
func (c *genDocsHelper) getCommand() *cobra.Command {
return c.cmd
}
func createGenDocsHelper() *genDocsHelper { func createGenDocsHelper() *genDocsHelper {
g := &genDocsHelper{ g := &genDocsHelper{
cmd: &cobra.Command{ cmd: &cobra.Command{

View file

@ -201,15 +201,15 @@ func AddCommands() {
HugoCmd.AddCommand(newBenchmarkCmd().getCommand()) HugoCmd.AddCommand(newBenchmarkCmd().getCommand())
HugoCmd.AddCommand(newConvertCmd().getCommand()) HugoCmd.AddCommand(newConvertCmd().getCommand())
HugoCmd.AddCommand(newNewCmd().getCommand()) HugoCmd.AddCommand(newNewCmd().getCommand())
HugoCmd.AddCommand(listCmd) HugoCmd.AddCommand(newListCmd().getCommand())
HugoCmd.AddCommand(newImportCmd().getCommand()) HugoCmd.AddCommand(newImportCmd().getCommand())
HugoCmd.AddCommand(genCmd) HugoCmd.AddCommand(genCmd)
genCmd.AddCommand(genautocompleteCmd) genCmd.AddCommand(genautocompleteCmd)
genCmd.AddCommand(gendocCmd) genCmd.AddCommand(gendocCmd)
genCmd.AddCommand(genmanCmd) genCmd.AddCommand(genmanCmd)
genCmd.AddCommand(createGenDocsHelper().cmd) genCmd.AddCommand(createGenDocsHelper().getCommand())
genCmd.AddCommand(createGenChromaStyles().cmd) genCmd.AddCommand(createGenChromaStyles().getCommand())
} }

View file

@ -21,129 +21,140 @@ import (
jww "github.com/spf13/jwalterweatherman" jww "github.com/spf13/jwalterweatherman"
) )
func init() { var _ cmder = (*listCmd)(nil)
listCmd.AddCommand(listDraftsCmd)
listCmd.AddCommand(listFutureCmd) type listCmd struct {
listCmd.AddCommand(listExpiredCmd) cmd *cobra.Command
listCmd.PersistentFlags().StringVarP(&source, "source", "s", "", "filesystem path to read files relative from")
listCmd.PersistentFlags().SetAnnotation("source", cobra.BashCompSubdirsInDir, []string{})
} }
var listCmd = &cobra.Command{ func (c *listCmd) getCommand() *cobra.Command {
Use: "list", return c.cmd
Short: "Listing out various types of content", }
Long: `Listing out various types of content.
func newListCmd() *listCmd {
cc := &listCmd{}
cc.cmd = &cobra.Command{
Use: "list",
Short: "Listing out various types of content",
Long: `Listing out various types of content.
List requires a subcommand, e.g. ` + "`hugo list drafts`.", List requires a subcommand, e.g. ` + "`hugo list drafts`.",
RunE: nil, RunE: nil,
} }
var listDraftsCmd = &cobra.Command{ cc.cmd.AddCommand(
Use: "drafts", &cobra.Command{
Short: "List all drafts", Use: "drafts",
Long: `List all of the drafts in your content directory.`, Short: "List all drafts",
RunE: func(cmd *cobra.Command, args []string) error { Long: `List all of the drafts in your content directory.`,
cfgInit := func(c *commandeer) error { RunE: func(cmd *cobra.Command, args []string) error {
c.Set("buildDrafts", true) cfgInit := func(c *commandeer) error {
return nil c.Set("buildDrafts", true)
} return nil
c, err := InitializeConfig(false, cfgInit) }
if err != nil { c, err := InitializeConfig(false, cfgInit)
return err if err != nil {
} return err
}
sites, err := hugolib.NewHugoSites(*c.DepsCfg) sites, err := hugolib.NewHugoSites(*c.DepsCfg)
if err != nil { if err != nil {
return newSystemError("Error creating sites", err) return newSystemError("Error creating sites", err)
} }
if err := sites.Build(hugolib.BuildCfg{SkipRender: true}); err != nil { if err := sites.Build(hugolib.BuildCfg{SkipRender: true}); err != nil {
return newSystemError("Error Processing Source Content", err) return newSystemError("Error Processing Source Content", err)
} }
for _, p := range sites.Pages() { for _, p := range sites.Pages() {
if p.IsDraft() { if p.IsDraft() {
jww.FEEDBACK.Println(filepath.Join(p.File.Dir(), p.File.LogicalName())) jww.FEEDBACK.Println(filepath.Join(p.File.Dir(), p.File.LogicalName()))
} }
} }
return nil return nil
}, },
} },
&cobra.Command{
var listFutureCmd = &cobra.Command{ Use: "future",
Use: "future", Short: "List all posts dated in the future",
Short: "List all posts dated in the future", Long: `List all of the posts in your content directory which will be
Long: `List all of the posts in your content directory which will be
posted in the future.`, posted in the future.`,
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
cfgInit := func(c *commandeer) error { cfgInit := func(c *commandeer) error {
c.Set("buildFuture", true) c.Set("buildFuture", true)
return nil return nil
} }
c, err := InitializeConfig(false, cfgInit) c, err := InitializeConfig(false, cfgInit)
if err != nil { if err != nil {
return err return err
} }
sites, err := hugolib.NewHugoSites(*c.DepsCfg) sites, err := hugolib.NewHugoSites(*c.DepsCfg)
if err != nil { if err != nil {
return newSystemError("Error creating sites", err) return newSystemError("Error creating sites", err)
} }
if err := sites.Build(hugolib.BuildCfg{SkipRender: true}); err != nil { if err := sites.Build(hugolib.BuildCfg{SkipRender: true}); err != nil {
return newSystemError("Error Processing Source Content", err) return newSystemError("Error Processing Source Content", err)
} }
for _, p := range sites.Pages() { for _, p := range sites.Pages() {
if p.IsFuture() { if p.IsFuture() {
jww.FEEDBACK.Println(filepath.Join(p.File.Dir(), p.File.LogicalName())) jww.FEEDBACK.Println(filepath.Join(p.File.Dir(), p.File.LogicalName()))
} }
} }
return nil return nil
}, },
} },
&cobra.Command{
var listExpiredCmd = &cobra.Command{ Use: "expired",
Use: "expired", Short: "List all posts already expired",
Short: "List all posts already expired", Long: `List all of the posts in your content directory which has already
Long: `List all of the posts in your content directory which has already
expired.`, expired.`,
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
cfgInit := func(c *commandeer) error { cfgInit := func(c *commandeer) error {
c.Set("buildExpired", true) c.Set("buildExpired", true)
return nil return nil
} }
c, err := InitializeConfig(false, cfgInit) c, err := InitializeConfig(false, cfgInit)
if err != nil { if err != nil {
return err return err
} }
sites, err := hugolib.NewHugoSites(*c.DepsCfg) sites, err := hugolib.NewHugoSites(*c.DepsCfg)
if err != nil { if err != nil {
return newSystemError("Error creating sites", err) return newSystemError("Error creating sites", err)
} }
if err := sites.Build(hugolib.BuildCfg{SkipRender: true}); err != nil { if err := sites.Build(hugolib.BuildCfg{SkipRender: true}); err != nil {
return newSystemError("Error Processing Source Content", err) return newSystemError("Error Processing Source Content", err)
} }
for _, p := range sites.Pages() { for _, p := range sites.Pages() {
if p.IsExpired() { if p.IsExpired() {
jww.FEEDBACK.Println(filepath.Join(p.File.Dir(), p.File.LogicalName())) jww.FEEDBACK.Println(filepath.Join(p.File.Dir(), p.File.LogicalName()))
} }
} }
return nil return nil
}, },
},
)
cc.cmd.PersistentFlags().StringVarP(&source, "source", "s", "", "filesystem path to read files relative from")
cc.cmd.PersistentFlags().SetAnnotation("source", cobra.BashCompSubdirsInDir, []string{})
return cc
} }