mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
commands: Make all list commands list what 'all' did before
Also, always include the CSV header. Updates #10953
This commit is contained in:
parent
2db7ec622f
commit
6ca8a40f25
2 changed files with 69 additions and 45 deletions
|
@ -16,6 +16,10 @@ package commands
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/csv"
|
"encoding/csv"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/bep/simplecobra"
|
"github.com/bep/simplecobra"
|
||||||
|
@ -28,7 +32,20 @@ import (
|
||||||
// newListCommand creates a new list command and its subcommands.
|
// newListCommand creates a new list command and its subcommands.
|
||||||
func newListCommand() *listCommand {
|
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}
|
bcfg := hugolib.BuildCfg{SkipRender: true}
|
||||||
cfg := config.New()
|
cfg := config.New()
|
||||||
for i := 0; i < len(opts); i += 2 {
|
for i := 0; i < len(opts); i += 2 {
|
||||||
|
@ -42,8 +59,20 @@ func newListCommand() *listCommand {
|
||||||
writer := csv.NewWriter(r.Out)
|
writer := csv.NewWriter(r.Out)
|
||||||
defer writer.Flush()
|
defer writer.Flush()
|
||||||
|
|
||||||
|
writer.Write([]string{
|
||||||
|
"path",
|
||||||
|
"slug",
|
||||||
|
"title",
|
||||||
|
"date",
|
||||||
|
"expiryDate",
|
||||||
|
"publishDate",
|
||||||
|
"draft",
|
||||||
|
"permalink",
|
||||||
|
})
|
||||||
|
|
||||||
for _, p := range h.Pages() {
|
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 {
|
if err := writer.Write(record); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -64,16 +93,14 @@ func newListCommand() *listCommand {
|
||||||
short: "List all drafts",
|
short: "List all drafts",
|
||||||
long: `List all of the drafts in your content directory.`,
|
long: `List all of the drafts in your content directory.`,
|
||||||
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 {
|
||||||
createRecord := func(p page.Page) []string {
|
shouldInclude := func(p page.Page) bool {
|
||||||
if !p.Draft() || p.File().IsZero() {
|
if !p.Draft() || p.File().IsZero() {
|
||||||
return nil
|
return false
|
||||||
}
|
}
|
||||||
return []string{
|
return true
|
||||||
p.File().Path(),
|
|
||||||
p.PublishDate().Format(time.RFC3339)}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return list(cd, r, createRecord,
|
return list(cd, r, shouldInclude,
|
||||||
"buildDrafts", true,
|
"buildDrafts", true,
|
||||||
"buildFuture", true,
|
"buildFuture", true,
|
||||||
"buildExpired", true,
|
"buildExpired", true,
|
||||||
|
@ -85,17 +112,14 @@ func newListCommand() *listCommand {
|
||||||
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 posted 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 {
|
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() {
|
if !resource.IsFuture(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,
|
||||||
"buildFuture", true,
|
"buildFuture", true,
|
||||||
"buildDrafts", true,
|
"buildDrafts", true,
|
||||||
)
|
)
|
||||||
|
@ -106,17 +130,13 @@ func newListCommand() *listCommand {
|
||||||
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 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 {
|
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() {
|
if !resource.IsExpired(p) || p.File().IsZero() {
|
||||||
return nil
|
return false
|
||||||
}
|
}
|
||||||
return []string{
|
return true
|
||||||
p.File().Path(),
|
|
||||||
p.PublishDate().Format(time.RFC3339),
|
|
||||||
}
|
}
|
||||||
|
return list(cd, r, shouldInclude,
|
||||||
}
|
|
||||||
return list(cd, r, createRecord,
|
|
||||||
"buildExpired", true,
|
"buildExpired", true,
|
||||||
"buildDrafts", true,
|
"buildDrafts", true,
|
||||||
)
|
)
|
||||||
|
@ -127,17 +147,10 @@ func newListCommand() *listCommand {
|
||||||
short: "List all posts",
|
short: "List all posts",
|
||||||
long: `List all of the posts in your content directory, include drafts, future and expired pages.`,
|
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 {
|
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.File().IsZero() {
|
return !p.File().IsZero()
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
return []string{
|
return list(cd, r, shouldInclude, "buildDrafts", true, "buildFuture", true, "buildExpired", true)
|
||||||
p.File().Path(),
|
|
||||||
p.PublishDate().Format(time.RFC3339),
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return list(cd, r, createRecord, "buildDrafts", true, "buildFuture", true, "buildExpired", true)
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -2,32 +2,43 @@
|
||||||
|
|
||||||
hugo list drafts
|
hugo list drafts
|
||||||
! stderr .
|
! stderr .
|
||||||
stdout 'draft.md,2019-01-01T00:00:00Z'
|
stdout 'path,slug,title,date,expiryDate,publishDate,draft,permalink'
|
||||||
stdout 'draftexpired.md,2018-01-01T00:00:00Z'
|
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 'draftfuture.md,2030-01-01T00:00:00Z'
|
stdout 'draftexpired.md'
|
||||||
|
stdout 'draftfuture.md'
|
||||||
|
! stdout '/expired.md'
|
||||||
|
|
||||||
hugo list future
|
hugo list future
|
||||||
stdout 'future.md,2030-01-01T00:00:00Z'
|
stdout 'path,slug,title,date,expiryDate,publishDate,draft,permalink'
|
||||||
stdout 'draftfuture.md,2030-01-01T00:00:00Z'
|
stdout 'future.md'
|
||||||
|
stdout 'draftfuture.md'
|
||||||
|
! stdout 'expired.md'
|
||||||
|
|
||||||
hugo list expired
|
hugo list expired
|
||||||
stdout 'expired.md,2018-01-01T00:00:00Z'
|
stdout 'path,slug,title,date,expiryDate,publishDate,draft,permalink'
|
||||||
stdout 'draftexpired.md,2018-01-01T00:00:00Z'
|
stdout 'expired.md'
|
||||||
|
stdout 'draftexpired.md'
|
||||||
|
! stdout 'future.md'
|
||||||
|
|
||||||
hugo list all
|
hugo list all
|
||||||
stdout 'future.md,2030-01-01T00:00:00Z'
|
stdout 'path,slug,title,date,expiryDate,publishDate,draft,permalink'
|
||||||
stdout 'draft.md,2019-01-01T00:00:00Z'
|
stdout 'future.md'
|
||||||
stdout 'expired.md,2018-01-01T00:00:00Z'
|
stdout 'draft.md'
|
||||||
stdout 'draftexpired.md,2018-01-01T00:00:00Z'
|
stdout 'expired.md'
|
||||||
stdout 'draftfuture.md,2030-01-01T00:00:00Z'
|
stdout 'draftexpired.md'
|
||||||
|
stdout 'draftfuture.md'
|
||||||
|
|
||||||
-- hugo.toml --
|
-- hugo.toml --
|
||||||
baseURL = "https://example.org/"
|
baseURL = "https://example.org/"
|
||||||
disableKinds = ["taxonomy", "term"]
|
disableKinds = ["taxonomy", "term"]
|
||||||
-- content/draft.md --
|
-- content/draft.md --
|
||||||
---
|
---
|
||||||
|
title: "The Draft"
|
||||||
|
slug: "draft"
|
||||||
draft: true
|
draft: true
|
||||||
date: 2019-01-01
|
date: 2019-01-01
|
||||||
|
expiryDate: 2032-01-01
|
||||||
|
publishDate: 2018-01-01
|
||||||
---
|
---
|
||||||
-- content/expired.md --
|
-- content/expired.md --
|
||||||
---
|
---
|
||||||
|
|
Loading…
Reference in a new issue