// DistinctLogger ignores duplicate log statements.
type DistinctLogger struct {
sync.RWMutex
- logger LogPrinter
- m map[string]bool
+ getLogger func() LogPrinter
+ m map[string]bool
}
func (l *DistinctLogger) Reset() {
l.Lock()
if !l.m[logStatement] {
- l.logger.Println(logStatement)
+ l.getLogger().Println(logStatement)
l.m[logStatement] = true
}
l.Unlock()
// NewDistinctErrorLogger creates a new DistinctLogger that logs ERRORs
func NewDistinctErrorLogger() *DistinctLogger {
- return &DistinctLogger{m: make(map[string]bool), logger: jww.ERROR}
+ return &DistinctLogger{m: make(map[string]bool), getLogger: func() LogPrinter { return jww.ERROR }}
}
// NewDistinctLogger creates a new DistinctLogger that logs to the provided logger.
func NewDistinctLogger(logger LogPrinter) *DistinctLogger {
- return &DistinctLogger{m: make(map[string]bool), logger: logger}
+ return &DistinctLogger{m: make(map[string]bool), getLogger: func() LogPrinter { return logger }}
}
// NewDistinctWarnLogger creates a new DistinctLogger that logs WARNs
func NewDistinctWarnLogger() *DistinctLogger {
- return &DistinctLogger{m: make(map[string]bool), logger: jww.WARN}
+ return &DistinctLogger{m: make(map[string]bool), getLogger: func() LogPrinter { return jww.WARN }}
}
// NewDistinctFeedbackLogger creates a new DistinctLogger that can be used
// to give feedback to the user while not spamming with duplicates.
func NewDistinctFeedbackLogger() *DistinctLogger {
- return &DistinctLogger{m: make(map[string]bool), logger: jww.FEEDBACK}
+ return &DistinctLogger{m: make(map[string]bool), getLogger: func() LogPrinter { return jww.FEEDBACK }}
}
var (
// point at the next Hugo release.
// The idea is two remove an item in two Hugo releases to give users and theme authors
// plenty of time to fix their templates.
-func Deprecated(object, item, alternative string, err bool) {
- if !strings.HasSuffix(alternative, ".") {
- alternative += "."
- }
-
+func Deprecated(item, alternative string, err bool) {
if err {
- DistinctErrorLog.Printf("%s's %s is deprecated and will be removed in Hugo %s. %s", object, item, hugo.CurrentVersion.Next().ReleaseVersion(), alternative)
+ DistinctErrorLog.Printf("%s is deprecated and will be removed in Hugo %s. %s", item, hugo.CurrentVersion.Next().ReleaseVersion(), alternative)
} else {
- DistinctWarnLog.Printf("%s's %s is deprecated and will be removed in a future release. %s", object, item, alternative)
+ DistinctWarnLog.Printf("%s is deprecated and will be removed in a future release. %s", item, alternative)
}
}
func (s *SiteInfo) Permalinks() map[string]string {
// Remove in 0.57
- helpers.Deprecated("Site", ".Permalinks", "", false)
+ helpers.Deprecated(".Site.Permalinks", "", false)
return s.permalinks
}
// Ref will give an absolute URL to ref in the given Page.
func (s *SiteInfo) Ref(ref string, page page.Page, options ...string) (string, error) {
// Remove in Hugo 0.54
- helpers.Deprecated("Site", ".Ref", "Use .Site.GetPage", true)
+ helpers.Deprecated(".Site.Ref", "Use .Site.GetPage", true)
outputFormat := ""
if len(options) > 0 {
outputFormat = options[0]
// RelRef will give an relative URL to ref in the given Page.
func (s *SiteInfo) RelRef(ref string, page page.Page, options ...string) (string, error) {
// Remove in Hugo 0.54
- helpers.Deprecated("Site", ".RelRef", "Use .Site.GetPage", true)
+ helpers.Deprecated(".Site.RelRef", "Use .Site.GetPage", true)
outputFormat := ""
if len(options) > 0 {
outputFormat = options[0]
}
func (p *pageDeprecated) Filename() string {
- helpers.Deprecated("Page", ".Filename", "Use .File.Filename", false)
+ helpers.Deprecated("Page.Filename", "Use .File.Filename", false)
return p.p.Filename()
}
func (p *pageDeprecated) Dir() string {
- helpers.Deprecated("Page", ".Dir", "Use .File.Dir", false)
+ helpers.Deprecated("Page.Dir", "Use .File.Dir", false)
return p.p.Dir()
}
func (p *pageDeprecated) IsDraft() bool {
- helpers.Deprecated("Page", ".IsDraft", "Use .Draft.", false)
+ helpers.Deprecated("Page.IsDraft", "Use .Draft.", false)
return p.p.IsDraft()
}
func (p *pageDeprecated) Extension() string {
- helpers.Deprecated("Page", ".Extension", "Use .File.Extension", false)
+ helpers.Deprecated("Page.Extension", "Use .File.Extension", false)
return p.p.Extension()
}
func (p *pageDeprecated) Hugo() hugo.Info {
- helpers.Deprecated("Page", ".Hugo", "Use the global hugo function.", false)
+ helpers.Deprecated("Page.Hugo", "Use the global hugo function.", false)
return p.p.Hugo()
}
func (p *pageDeprecated) Ext() string {
- helpers.Deprecated("Page", ".Ext", "Use .File.Ext", false)
+ helpers.Deprecated("Page.Ext", "Use .File.Ext", false)
return p.p.Ext()
}
func (p *pageDeprecated) LanguagePrefix() string {
- helpers.Deprecated("Page", ".LanguagePrefix", "Use .Site.LanguagePrefix.", false)
+ helpers.Deprecated("Page.LanguagePrefix", "Use .Site.LanguagePrefix.", false)
return p.p.LanguagePrefix()
}
func (p *pageDeprecated) GetParam(arg0 string) interface{} {
- helpers.Deprecated("Page", ".GetParam", "Use .Param or .Params.myParam.", false)
+ helpers.Deprecated("Page.GetParam", "Use .Param or .Params.myParam.", false)
return p.p.GetParam(arg0)
}
func (p *pageDeprecated) LogicalName() string {
- helpers.Deprecated("Page", ".LogicalName", "Use .File.LogicalName", false)
+ helpers.Deprecated("Page.LogicalName", "Use .File.LogicalName", false)
return p.p.LogicalName()
}
func (p *pageDeprecated) BaseFileName() string {
- helpers.Deprecated("Page", ".BaseFileName", "Use .File.BaseFileName", false)
+ helpers.Deprecated("Page.BaseFileName", "Use .File.BaseFileName", false)
return p.p.BaseFileName()
}
func (p *pageDeprecated) RSSLink() template.URL {
- helpers.Deprecated("Page", ".RSSLink", "Use the Output Format's link, e.g. something like: \n {{ with .OutputFormats.Get \"RSS\" }}{{ .RelPermalink }}{{ end }}", false)
+ helpers.Deprecated("Page.RSSLink", "Use the Output Format's link, e.g. something like: \n {{ with .OutputFormats.Get \"RSS\" }}{{ .RelPermalink }}{{ end }}", false)
return p.p.RSSLink()
}
func (p *pageDeprecated) TranslationBaseName() string {
- helpers.Deprecated("Page", ".TranslationBaseName", "Use .File.TranslationBaseName", false)
+ helpers.Deprecated("Page.TranslationBaseName", "Use .File.TranslationBaseName", false)
return p.p.TranslationBaseName()
}
func (p *pageDeprecated) URL() string {
- helpers.Deprecated("Page", ".URL", "Use .Permalink or .RelPermalink. If what you want is the front matter URL value, use .Params.url", false)
+ helpers.Deprecated("Page.URL", "Use .Permalink or .RelPermalink. If what you want is the front matter URL value, use .Params.url", false)
return p.p.URL()
}
func (p *pageDeprecated) ContentBaseName() string {
- helpers.Deprecated("Page", ".ContentBaseName", "Use .File.ContentBaseName", false)
+ helpers.Deprecated("Page.ContentBaseName", "Use .File.ContentBaseName", false)
return p.p.ContentBaseName()
}
func (p *pageDeprecated) UniqueID() string {
- helpers.Deprecated("Page", ".UniqueID", "Use .File.UniqueID", false)
+ helpers.Deprecated("Page.UniqueID", "Use .File.UniqueID", false)
return p.p.UniqueID()
}
func (p *pageDeprecated) FileInfo() hugofs.FileMetaInfo {
- helpers.Deprecated("Page", ".FileInfo", "Use .File.FileInfo", false)
+ helpers.Deprecated("Page.FileInfo", "Use .File.FileInfo", false)
return p.p.FileInfo()
}