commands: Improve list command

- Improve help text
- Add "kind" and "section" to CSV output
- Add a "published" subcommand to list content that is not draft,
  expired, or future.

Closes #12520
This commit is contained in:
Joe Mooring 2024-05-19 08:31:19 -07:00 committed by Bjørn Erik Pedersen
parent 548dc21378
commit 931e096f21
2 changed files with 27 additions and 12 deletions

View file

@ -41,6 +41,8 @@ func newListCommand() *listCommand {
p.PublishDate().Format(time.RFC3339), p.PublishDate().Format(time.RFC3339),
strconv.FormatBool(p.Draft()), strconv.FormatBool(p.Draft()),
p.Permalink(), p.Permalink(),
p.Kind(),
p.Section(),
} }
} }
@ -67,6 +69,8 @@ func newListCommand() *listCommand {
"publishDate", "publishDate",
"draft", "draft",
"permalink", "permalink",
"kind",
"section",
}) })
for _, p := range h.Pages() { for _, p := range h.Pages() {
@ -75,9 +79,6 @@ func newListCommand() *listCommand {
if err := writer.Write(record); err != nil { if err := writer.Write(record); err != nil {
return err return err
} }
if err != nil {
return err
}
} }
} }
@ -88,8 +89,8 @@ func newListCommand() *listCommand {
commands: []simplecobra.Commander{ commands: []simplecobra.Commander{
&simpleCommand{ &simpleCommand{
name: "drafts", name: "drafts",
short: "List all drafts", short: "List draft content",
long: `List all of the drafts in your content directory.`, long: `List draft content.`,
run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error { run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error {
shouldInclude := func(p page.Page) bool { shouldInclude := func(p page.Page) bool {
if !p.Draft() || p.File() == nil { if !p.Draft() || p.File() == nil {
@ -109,8 +110,8 @@ func newListCommand() *listCommand {
}, },
&simpleCommand{ &simpleCommand{
name: "future", name: "future",
short: "List all posts dated in the future", short: "List future content",
long: `List all of the posts in your content directory which will be posted in the future.`, long: `List content with a future publication date.`,
run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error { run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error {
shouldInclude := func(p page.Page) bool { shouldInclude := func(p page.Page) bool {
if !resource.IsFuture(p) || p.File() == nil { if !resource.IsFuture(p) || p.File() == nil {
@ -129,8 +130,8 @@ func newListCommand() *listCommand {
}, },
&simpleCommand{ &simpleCommand{
name: "expired", name: "expired",
short: "List all posts already expired", short: "List expired content",
long: `List all of the posts in your content directory which has already expired.`, long: `List content with a past expiration date.`,
run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error { run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error {
shouldInclude := func(p page.Page) bool { shouldInclude := func(p page.Page) bool {
if !resource.IsExpired(p) || p.File() == nil { if !resource.IsExpired(p) || p.File() == nil {
@ -149,8 +150,8 @@ func newListCommand() *listCommand {
}, },
&simpleCommand{ &simpleCommand{
name: "all", name: "all",
short: "List all posts", short: "List all content",
long: `List all of the posts in your content directory, include drafts, future and expired pages.`, long: `List all content including draft, future, and expired.`,
run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error { run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error {
shouldInclude := func(p page.Page) bool { shouldInclude := func(p page.Page) bool {
return p.File() != nil return p.File() != nil
@ -161,6 +162,20 @@ func newListCommand() *listCommand {
cmd.ValidArgsFunction = cobra.NoFileCompletions cmd.ValidArgsFunction = cobra.NoFileCompletions
}, },
}, },
&simpleCommand{
name: "published",
short: "List published content",
long: `List content that is not draft, future, or expired.`,
run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error {
shouldInclude := func(p page.Page) bool {
return !p.Draft() && !resource.IsFuture(p) && !resource.IsExpired(p) && p.File() != nil
}
return list(cd, r, shouldInclude)
},
withc: func(cmd *cobra.Command, r *rootCommand) {
cmd.ValidArgsFunction = cobra.NoFileCompletions
},
},
}, },
} }
} }

View file

@ -1,6 +1,6 @@
# Test the gen commands. # Test the gen commands.
# Note that adding new commands will require updating the NUM_COMMANDS value. # Note that adding new commands will require updating the NUM_COMMANDS value.
env NUM_COMMANDS=42 env NUM_COMMANDS=43
hugo gen -h hugo gen -h
stdout 'A collection of several useful generators\.' stdout 'A collection of several useful generators\.'