summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2023-05-22 09:49:58 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2023-05-22 10:21:52 +0200
commit262157ddf71fed5ef51b0a7025a83f24779f3fce (patch)
tree29412fd3cceca14e561a83309d2bc4cae387e9f1
parent2db7ec622fc9d666590dd33a3d48818be9772c2d (diff)
commands: Make all list commands list what 'all' did beforefix/commandslist
Also, always include the CSV header. Updates #10953
-rw-r--r--commands/list.go79
-rw-r--r--testscripts/commands/list.txt35
2 files changed, 69 insertions, 45 deletions
diff --git a/commands/list.go b/commands/list.go
index 05739c7a9..6458df875 100644
--- a/commands/list.go
+++ b/commands/list.go
@@ -16,6 +16,10 @@ package commands
import (
"context"
"encoding/csv"
+ "os"
+ "path/filepath"
+ "strconv"
+ "strings"
"time"
"github.com/bep/simplecobra"
@@ -28,7 +32,20 @@ import (
// newListCommand creates a new list command and its subcommands.
func newListCommand() *listCommand {
- list := func(cd *simplecobra.Commandeer, r *rootCommand, createRecord func(page.Page) []string, opts ...any) error {
+ createRecord := func(workingDir string, p page.Page) []string {
+ return []string{
+ filepath.ToSlash(strings.TrimPrefix(p.File().Filename(), workingDir+string(os.PathSeparator))),
+ p.Slug(),
+ p.Title(),
+ p.Date().Format(time.RFC3339),
+ p.ExpiryDate().Format(time.RFC3339),
+ p.PublishDate().Format(time.RFC3339),
+ strconv.FormatBool(p.Draft()),
+ p.Permalink(),
+ }
+ }
+
+ list := func(cd *simplecobra.Commandeer, r *rootCommand, shouldInclude func(page.Page) bool, opts ...any) error {
bcfg := hugolib.BuildCfg{SkipRender: true}
cfg := config.New()
for i := 0; i < len(opts); i += 2 {
@@ -42,8 +59,20 @@ func newListCommand() *listCommand {
writer := csv.NewWriter(r.Out)
defer writer.Flush()
+ writer.Write([]string{
+ "path",
+ "slug",
+ "title",
+ "date",
+ "expiryDate",
+ "publishDate",
+ "draft",
+ "permalink",
+ })
+
for _, p := range h.Pages() {
- if record := createRecord(p); record != nil {
+ if shouldInclude(p) {
+ record := createRecord(h.Conf.BaseConfig().WorkingDir, p)
if err := writer.Write(record); err != nil {
return err
}
@@ -64,16 +93,14 @@ func newListCommand() *listCommand {
short: "List all drafts",
long: `List all of the drafts in your content directory.`,
run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error {
- createRecord := func(p page.Page) []string {
+ shouldInclude := func(p page.Page) bool {
if !p.Draft() || p.File().IsZero() {
- return nil
+ return false
}
- return []string{
- p.File().Path(),
- p.PublishDate().Format(time.RFC3339)}
+ return true
}
- return list(cd, r, createRecord,
+ return list(cd, r, shouldInclude,
"buildDrafts", true,
"buildFuture", true,
"buildExpired", true,
@@ -85,17 +112,14 @@ func newListCommand() *listCommand {
short: "List all posts dated in the future",
long: `List all of the posts in your content directory which will be posted in the future.`,
run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error {
- createRecord := func(p page.Page) []string {
+ shouldInclude := func(p page.Page) bool {
if !resource.IsFuture(p) || p.File().IsZero() {
- return nil
- }
- return []string{
- p.File().Path(),
- p.PublishDate().Format(time.RFC3339),
+ return false
}
+ return true
}
- return list(cd, r, createRecord,
+ return list(cd, r, shouldInclude,
"buildFuture", true,
"buildDrafts", true,
)
@@ -106,17 +130,13 @@ func newListCommand() *listCommand {
short: "List all posts already expired",
long: `List all of the posts in your content directory which has already expired.`,
run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error {
- createRecord := func(p page.Page) []string {
+ shouldInclude := func(p page.Page) bool {
if !resource.IsExpired(p) || p.File().IsZero() {
- return nil
+ return false
}
- return []string{
- p.File().Path(),
- p.PublishDate().Format(time.RFC3339),
- }
-
+ return true
}
- return list(cd, r, createRecord,
+ return list(cd, r, shouldInclude,
"buildExpired", true,
"buildDrafts", true,
)
@@ -127,17 +147,10 @@ func newListCommand() *listCommand {
short: "List all posts",
long: `List all of the posts in your content directory, include drafts, future and expired pages.`,
run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error {
- createRecord := func(p page.Page) []string {
- if p.File().IsZero() {
- return nil
- }
- return []string{
- p.File().Path(),
- p.PublishDate().Format(time.RFC3339),
- }
-
+ shouldInclude := func(p page.Page) bool {
+ return !p.File().IsZero()
}
- return list(cd, r, createRecord, "buildDrafts", true, "buildFuture", true, "buildExpired", true)
+ return list(cd, r, shouldInclude, "buildDrafts", true, "buildFuture", true, "buildExpired", true)
},
},
},
diff --git a/testscripts/commands/list.txt b/testscripts/commands/list.txt
index 2e64389fa..42d74cec7 100644
--- a/testscripts/commands/list.txt
+++ b/testscripts/commands/list.txt
@@ -2,32 +2,43 @@
hugo list drafts
! stderr .
-stdout 'draft.md,2019-01-01T00:00:00Z'
-stdout 'draftexpired.md,2018-01-01T00:00:00Z'
-stdout 'draftfuture.md,2030-01-01T00:00:00Z'
+stdout 'path,slug,title,date,expiryDate,publishDate,draft,permalink'
+stdout 'content/draft.md,draft,The Draft,2019-01-01T00:00:00Z,2032-01-01T00:00:00Z,2018-01-01T00:00:00Z,true,https://example.org/draft/'
+stdout 'draftexpired.md'
+stdout 'draftfuture.md'
+! stdout '/expired.md'
hugo list future
-stdout 'future.md,2030-01-01T00:00:00Z'
-stdout 'draftfuture.md,2030-01-01T00:00:00Z'
+stdout 'path,slug,title,date,expiryDate,publishDate,draft,permalink'
+stdout 'future.md'
+stdout 'draftfuture.md'
+! stdout 'expired.md'
hugo list expired
-stdout 'expired.md,2018-01-01T00:00:00Z'
-stdout 'draftexpired.md,2018-01-01T00:00:00Z'
+stdout 'path,slug,title,date,expiryDate,publishDate,draft,permalink'
+stdout 'expired.md'
+stdout 'draftexpired.md'
+! stdout 'future.md'
hugo list all
-stdout 'future.md,2030-01-01T00:00:00Z'
-stdout 'draft.md,2019-01-01T00:00:00Z'
-stdout 'expired.md,2018-01-01T00:00:00Z'
-stdout 'draftexpired.md,2018-01-01T00:00:00Z'
-stdout 'draftfuture.md,2030-01-01T00:00:00Z'
+stdout 'path,slug,title,date,expiryDate,publishDate,draft,permalink'
+stdout 'future.md'
+stdout 'draft.md'
+stdout 'expired.md'
+stdout 'draftexpired.md'
+stdout 'draftfuture.md'
-- hugo.toml --
baseURL = "https://example.org/"
disableKinds = ["taxonomy", "term"]
-- content/draft.md --
---
+title: "The Draft"
+slug: "draft"
draft: true
date: 2019-01-01
+expiryDate: 2032-01-01
+publishDate: 2018-01-01
---
-- content/expired.md --
---