Add handling for publishDates (which will be ignored if in the future). Fixed #260

This commit is contained in:
spf13 2014-05-29 00:48:40 -04:00
parent 4ebaec8906
commit c502f078bc
4 changed files with 81 additions and 3 deletions

View file

@ -51,7 +51,7 @@ Complete documentation is available at http://hugo.spf13.com`,
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
func Execute() {
@ -70,6 +70,7 @@ func AddCommands() {
func init() {
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(&DisableSitemap, "disableSitemap", false, "Do not build Sitemap file")
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("DefaultLayout", "post")
viper.SetDefault("BuildDrafts", false)
viper.SetDefault("BuildFuture", false)
viper.SetDefault("UglyUrls", false)
viper.SetDefault("Verbose", false)
viper.SetDefault("CanonifyUrls", false)
@ -122,6 +124,10 @@ func InitializeConfig() {
viper.Set("BuildDrafts", Draft)
}
if hugoCmdV.PersistentFlags().Lookup("buildFuture").Changed {
viper.Set("BuildFuture", Future)
}
if hugoCmdV.PersistentFlags().Lookup("uglyUrls").Changed {
viper.Set("UglyUrls", UglyUrls)
}

View file

@ -44,6 +44,7 @@ type Page struct {
Params map[string]interface{}
contentType string
Draft bool
PublishDate time.Time
Aliases []string
Tmpl Template
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) {
link, err := p.permalink()
if err != nil {
@ -323,8 +333,10 @@ func (page *Page) update(f interface{}) error {
page.contentType = cast.ToString(v)
case "keywords":
page.Keywords = cast.ToStringSlice(v)
case "date", "pubdate":
case "date":
page.Date = cast.ToTime(v)
case "publishdate", "pubdate":
page.PublishDate = cast.ToTime(v)
case "draft":
page.Draft = cast.ToBool(v)
case "layout":

View file

@ -344,7 +344,7 @@ func (s *Site) CreatePages() (err error) {
return err
}
if viper.GetBool("BuildDrafts") || !page.Draft {
if page.ShouldBuild() {
s.Pages = append(s.Pages, page)
}

View file

@ -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) {
files := make(map[string][]byte)
target := &target.InMemoryTarget{Files: files}