mirror of
https://github.com/gohugoio/hugo.git
synced 2024-12-22 20:12:17 +00:00
Add handling for publishDates (which will be ignored if in the future). Fixed #260
This commit is contained in:
parent
4ebaec8906
commit
c502f078bc
4 changed files with 81 additions and 3 deletions
|
@ -51,7 +51,7 @@ Complete documentation is available at http://hugo.spf13.com`,
|
||||||
|
|
||||||
var hugoCmdV *cobra.Command
|
var hugoCmdV *cobra.Command
|
||||||
|
|
||||||
var BuildWatch, Draft, UglyUrls, Verbose, Logging, VerboseLog, DisableRSS, DisableSitemap bool
|
var BuildWatch, Draft, Future, UglyUrls, Verbose, Logging, VerboseLog, DisableRSS, DisableSitemap bool
|
||||||
var Source, Destination, Theme, BaseUrl, CfgFile, LogFile string
|
var Source, Destination, Theme, BaseUrl, CfgFile, LogFile string
|
||||||
|
|
||||||
func Execute() {
|
func Execute() {
|
||||||
|
@ -70,6 +70,7 @@ func AddCommands() {
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
HugoCmd.PersistentFlags().BoolVarP(&Draft, "buildDrafts", "D", false, "include content marked as draft")
|
HugoCmd.PersistentFlags().BoolVarP(&Draft, "buildDrafts", "D", false, "include content marked as draft")
|
||||||
|
HugoCmd.PersistentFlags().BoolVarP(&Future, "buildFuture", "F", false, "include content with datePublished in the future")
|
||||||
HugoCmd.PersistentFlags().BoolVar(&DisableRSS, "disableRSS", false, "Do not build RSS files")
|
HugoCmd.PersistentFlags().BoolVar(&DisableRSS, "disableRSS", false, "Do not build RSS files")
|
||||||
HugoCmd.PersistentFlags().BoolVar(&DisableSitemap, "disableSitemap", false, "Do not build Sitemap file")
|
HugoCmd.PersistentFlags().BoolVar(&DisableSitemap, "disableSitemap", false, "Do not build Sitemap file")
|
||||||
HugoCmd.PersistentFlags().StringVarP(&Source, "source", "s", "", "filesystem path to read files relative from")
|
HugoCmd.PersistentFlags().StringVarP(&Source, "source", "s", "", "filesystem path to read files relative from")
|
||||||
|
@ -108,6 +109,7 @@ func InitializeConfig() {
|
||||||
viper.SetDefault("PublishDir", "public")
|
viper.SetDefault("PublishDir", "public")
|
||||||
viper.SetDefault("DefaultLayout", "post")
|
viper.SetDefault("DefaultLayout", "post")
|
||||||
viper.SetDefault("BuildDrafts", false)
|
viper.SetDefault("BuildDrafts", false)
|
||||||
|
viper.SetDefault("BuildFuture", false)
|
||||||
viper.SetDefault("UglyUrls", false)
|
viper.SetDefault("UglyUrls", false)
|
||||||
viper.SetDefault("Verbose", false)
|
viper.SetDefault("Verbose", false)
|
||||||
viper.SetDefault("CanonifyUrls", false)
|
viper.SetDefault("CanonifyUrls", false)
|
||||||
|
@ -122,6 +124,10 @@ func InitializeConfig() {
|
||||||
viper.Set("BuildDrafts", Draft)
|
viper.Set("BuildDrafts", Draft)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if hugoCmdV.PersistentFlags().Lookup("buildFuture").Changed {
|
||||||
|
viper.Set("BuildFuture", Future)
|
||||||
|
}
|
||||||
|
|
||||||
if hugoCmdV.PersistentFlags().Lookup("uglyUrls").Changed {
|
if hugoCmdV.PersistentFlags().Lookup("uglyUrls").Changed {
|
||||||
viper.Set("UglyUrls", UglyUrls)
|
viper.Set("UglyUrls", UglyUrls)
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,7 @@ type Page struct {
|
||||||
Params map[string]interface{}
|
Params map[string]interface{}
|
||||||
contentType string
|
contentType string
|
||||||
Draft bool
|
Draft bool
|
||||||
|
PublishDate time.Time
|
||||||
Aliases []string
|
Aliases []string
|
||||||
Tmpl Template
|
Tmpl Template
|
||||||
Markup string
|
Markup string
|
||||||
|
@ -276,6 +277,15 @@ func (p *Page) LinkTitle() string {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (page *Page) ShouldBuild() bool {
|
||||||
|
if viper.GetBool("BuildFuture") || page.PublishDate.IsZero() || page.PublishDate.Before(time.Now()) {
|
||||||
|
if viper.GetBool("BuildDrafts") || !page.Draft {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func (p *Page) Permalink() (string, error) {
|
func (p *Page) Permalink() (string, error) {
|
||||||
link, err := p.permalink()
|
link, err := p.permalink()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -323,8 +333,10 @@ func (page *Page) update(f interface{}) error {
|
||||||
page.contentType = cast.ToString(v)
|
page.contentType = cast.ToString(v)
|
||||||
case "keywords":
|
case "keywords":
|
||||||
page.Keywords = cast.ToStringSlice(v)
|
page.Keywords = cast.ToStringSlice(v)
|
||||||
case "date", "pubdate":
|
case "date":
|
||||||
page.Date = cast.ToTime(v)
|
page.Date = cast.ToTime(v)
|
||||||
|
case "publishdate", "pubdate":
|
||||||
|
page.PublishDate = cast.ToTime(v)
|
||||||
case "draft":
|
case "draft":
|
||||||
page.Draft = cast.ToBool(v)
|
page.Draft = cast.ToBool(v)
|
||||||
case "layout":
|
case "layout":
|
||||||
|
|
|
@ -344,7 +344,7 @@ func (s *Site) CreatePages() (err error) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if viper.GetBool("BuildDrafts") || !page.Draft {
|
if page.ShouldBuild() {
|
||||||
s.Pages = append(s.Pages, page)
|
s.Pages = append(s.Pages, page)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -219,6 +219,66 @@ func TestTargetPath(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDraftAndFutureRender(t *testing.T) {
|
||||||
|
files := make(map[string][]byte)
|
||||||
|
target := &target.InMemoryTarget{Files: files}
|
||||||
|
sources := []source.ByteSource{
|
||||||
|
{"sect/doc1.md", []byte("---\ntitle: doc1\ndraft: true\npublishdate: \"2414-05-29\"\n---\n# doc1\n*some content*"), "sect"},
|
||||||
|
{"sect/doc2.md", []byte("---\ntitle: doc2\ndraft: true\npublishdate: \"2012-05-29\"\n---\n# doc2\n*some content*"), "sect"},
|
||||||
|
{"sect/doc3.md", []byte("---\ntitle: doc3\ndraft: false\npublishdate: \"2414-05-29\"\n---\n# doc3\n*some content*"), "sect"},
|
||||||
|
{"sect/doc4.md", []byte("---\ntitle: doc4\ndraft: false\npublishdate: \"2012-05-29\"\n---\n# doc4\n*some content*"), "sect"},
|
||||||
|
}
|
||||||
|
|
||||||
|
siteSetup := func() *Site {
|
||||||
|
s := &Site{
|
||||||
|
Target: target,
|
||||||
|
Source: &source.InMemorySource{ByteSource: sources},
|
||||||
|
}
|
||||||
|
|
||||||
|
s.initializeSiteInfo()
|
||||||
|
|
||||||
|
if err := s.CreatePages(); err != nil {
|
||||||
|
t.Fatalf("Unable to create pages: %s", err)
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
viper.Set("baseurl", "http://auth/bub")
|
||||||
|
|
||||||
|
// Testing Defaults.. Only draft:true and publishDate in the past should be rendered
|
||||||
|
s := siteSetup()
|
||||||
|
if len(s.Pages) != 1 {
|
||||||
|
t.Fatal("Draft or Future dated content published unexpectedly")
|
||||||
|
}
|
||||||
|
|
||||||
|
// only publishDate in the past should be rendered
|
||||||
|
viper.Set("BuildDrafts", true)
|
||||||
|
s = siteSetup()
|
||||||
|
if len(s.Pages) != 2 {
|
||||||
|
t.Fatal("Future Dated Posts published unexpectedly")
|
||||||
|
}
|
||||||
|
|
||||||
|
// drafts should not be rendered, but all dates should
|
||||||
|
viper.Set("BuildDrafts", false)
|
||||||
|
viper.Set("BuildFuture", true)
|
||||||
|
s = siteSetup()
|
||||||
|
if len(s.Pages) != 2 {
|
||||||
|
t.Fatal("Draft posts published unexpectedly")
|
||||||
|
}
|
||||||
|
|
||||||
|
// all 4 should be included
|
||||||
|
viper.Set("BuildDrafts", true)
|
||||||
|
viper.Set("BuildFuture", true)
|
||||||
|
s = siteSetup()
|
||||||
|
if len(s.Pages) != 4 {
|
||||||
|
t.Fatal("Drafts or Future posts not included as expected")
|
||||||
|
}
|
||||||
|
|
||||||
|
//setting defaults back
|
||||||
|
viper.Set("BuildDrafts", false)
|
||||||
|
viper.Set("BuildFuture", false)
|
||||||
|
}
|
||||||
|
|
||||||
func TestSkipRender(t *testing.T) {
|
func TestSkipRender(t *testing.T) {
|
||||||
files := make(map[string][]byte)
|
files := make(map[string][]byte)
|
||||||
target := &target.InMemoryTarget{Files: files}
|
target := &target.InMemoryTarget{Files: files}
|
||||||
|
|
Loading…
Reference in a new issue