We could reset and rerun it on server rebuilds, but that report needs a full build to make sense.
Also clean up the config vs flags in this area: Make all config settings match the flags e.g. `printPathWarnings`, but set up aliases for the
old.
Fixes #11187
environment string
// Common build flags.
- baseURL string
- gc bool
- poll string
- forceSyncStatic bool
- printPathWarnings bool
- printUnusedTemplates bool
+ baseURL string
+ gc bool
+ poll string
+ forceSyncStatic bool
// Profile flags (for debugging of performance problems)
cpuprofile string
htime.Clock = clock.Start(configs.Base.C.Clock)
}
- if base.LogPathWarnings {
+ if base.PrintPathWarnings {
// Note that we only care about the "dynamic creates" here,
// so skip the static fs.
fs.PublishDir = hugofs.NewCreateCountingFs(fs.PublishDir)
cmd.Flags().BoolP("noChmod", "", false, "don't sync permission mode of files")
cmd.Flags().BoolP("noBuildLock", "", false, "don't create .hugo_build.lock file")
cmd.Flags().BoolP("printI18nWarnings", "", false, "print missing translations")
- cmd.Flags().BoolVarP(&r.printPathWarnings, "printPathWarnings", "", false, "print warnings on duplicate target paths etc.")
- cmd.Flags().BoolVarP(&r.printUnusedTemplates, "printUnusedTemplates", "", false, "print warnings on unused templates.")
+ cmd.Flags().BoolP("printPathWarnings", "", false, "print warnings on duplicate target paths etc.")
+ cmd.Flags().BoolP("printUnusedTemplates", "", false, "print warnings on unused templates.")
cmd.Flags().StringVarP(&r.cpuprofile, "profile-cpu", "", "", "write cpu profile to `file`")
cmd.Flags().StringVarP(&r.memprofile, "profile-mem", "", "", "write memory profile to `file`")
cmd.Flags().BoolVarP(&r.printm, "printMemoryUsage", "", false, "print memory usage to screen at intervals")
// Flags with a different name in the config.
keyMap := map[string]string{
- "minify": "minifyOutput",
- "destination": "publishDir",
- "printI18nWarnings": "logI18nWarnings",
- "printPathWarnings": "logPathWarnings",
- "editor": "newContentEditor",
+ "minify": "minifyOutput",
+ "destination": "publishDir",
+ "editor": "newContentEditor",
}
// Flags that we for some reason don't want to expose in the site config.
"github.com/gohugoio/hugo/hugolib/filesystems"
"github.com/gohugoio/hugo/livereload"
"github.com/gohugoio/hugo/resources/page"
- "github.com/gohugoio/hugo/tpl"
"github.com/gohugoio/hugo/watcher"
"github.com/spf13/fsync"
"golang.org/x/sync/errgroup"
return err
}
- if c.r.printUnusedTemplates {
- unusedTemplates := h.Tmpl().(tpl.UnusedTemplatesProvider).UnusedTemplates()
- for _, unusedTemplate := range unusedTemplates {
- c.r.logger.Warnf("Template %s is unused, source file %s", unusedTemplate.Name(), unusedTemplate.Filename())
- }
- }
-
h.PrintProcessingStats(os.Stdout)
c.r.Println()
}
// Enable to print greppable placeholders (on the form "[i18n] TRANSLATIONID") for missing translation strings.
EnableMissingTranslationPlaceholders bool
- // Enable to print warnings for missing translation strings.
- LogI18nWarnings bool
-
- // ENable to print warnings for multiple files published to the same destination.
- LogPathWarnings bool
-
// Enable to panic on warning log entries. This may make it easier to detect the source.
PanicOnWarning bool
// Whether to track and print unused templates during the build.
PrintUnusedTemplates bool
+ // Enable to print warnings for missing translation strings.
+ PrintI18nWarnings bool
+
+ // ENable to print warnings for multiple files published to the same destination.
+ PrintPathWarnings bool
+
// URL to be used as a placeholder when a page reference cannot be found in ref or relref. Is used as-is.
RefLinksNotFoundURL string
return c.config.EnableMissingTranslationPlaceholders
}
-func (c ConfigLanguage) LogI18nWarnings() bool {
- return c.config.LogI18nWarnings
+func (c ConfigLanguage) PrintI18nWarnings() bool {
+ return c.config.PrintI18nWarnings
}
func (c ConfigLanguage) CreateTitle(s string) string {
b.Assert(modConf.Mounts[1].Lang, qt.Equals, "sv")
}
+
+func TestConfigAliases(t *testing.T) {
+
+ files := `
+-- hugo.toml --
+baseURL = "https://example.com"
+logI18nWarnings = true
+logPathWarnings = true
+`
+ b := hugolib.NewIntegrationTestBuilder(
+ hugolib.IntegrationTestConfig{T: t, TxtarString: files},
+ ).Build()
+
+ conf := b.H.Configs.Base
+
+ b.Assert(conf.PrintI18nWarnings, qt.Equals, true)
+ b.Assert(conf.PrintPathWarnings, qt.Equals, true)
+}
// Handle some legacy values.
func (l configLoader) applyConfigAliases() error {
- aliases := []types.KeyValueStr{{Key: "taxonomies", Value: "indexes"}}
+ aliases := []types.KeyValueStr{
+ {Key: "indexes", Value: "taxonomies"},
+ {Key: "logI18nWarnings", Value: "printI18nWarnings"},
+ {Key: "logPathWarnings", Value: "printPathWarnings"},
+ }
for _, alias := range aliases {
if l.cfg.IsSet(alias.Key) {
EnableMissingTranslationPlaceholders() bool
TemplateMetrics() bool
TemplateMetricsHints() bool
- LogI18nWarnings() bool
+ PrintI18nWarnings() bool
CreateTitle(s string) string
IgnoreFile(s string) bool
NewContentEditor() string
contentInit sync.Once
content *pageMaps
+ postRenderInit sync.Once
+
// Keeps track of bundle directories and symlinks to enable partial rebuilding.
ContentChanges *contentChangeMap
"github.com/bep/logg"
"github.com/gohugoio/hugo/langs"
"github.com/gohugoio/hugo/publisher"
+ "github.com/gohugoio/hugo/tpl"
"github.com/gohugoio/hugo/hugofs"
h.SendError(fmt.Errorf("render: %w", err))
}
- if h.Configs.Base.LogPathWarnings {
- // We need to do this before any post processing, as that may write to the same files twice
- // and create false positives.
- hugofs.WalkFilesystems(h.Fs.PublishDir, func(fs afero.Fs) bool {
- if dfs, ok := fs.(hugofs.DuplicatesReporter); ok {
- dupes := dfs.ReportDuplicates()
- if dupes != "" {
- h.Log.Warnln("Duplicate target paths:", dupes)
- }
- }
- return false
- })
+ if err := h.postRenderOnce(); err != nil {
+ h.SendError(fmt.Errorf("postRenderOnce: %w", err))
}
if err := h.postProcess(infol); err != nil {
return nil
}
+func (h *HugoSites) postRenderOnce() error {
+ h.postRenderInit.Do(func() {
+ conf := h.Configs.Base
+ if conf.PrintPathWarnings {
+ // We need to do this before any post processing, as that may write to the same files twice
+ // and create false positives.
+ hugofs.WalkFilesystems(h.Fs.PublishDir, func(fs afero.Fs) bool {
+ if dfs, ok := fs.(hugofs.DuplicatesReporter); ok {
+ dupes := dfs.ReportDuplicates()
+ if dupes != "" {
+ h.Log.Warnln("Duplicate target paths:", dupes)
+ }
+ }
+ return false
+ })
+ }
+
+ if conf.PrintUnusedTemplates {
+ unusedTemplates := h.Tmpl().(tpl.UnusedTemplatesProvider).UnusedTemplates()
+ for _, unusedTemplate := range unusedTemplates {
+ h.Log.Warnf("Template %s is unused, source file %s", unusedTemplate.Name(), unusedTemplate.Filename())
+ }
+ }
+
+ })
+ return nil
+}
+
func (h *HugoSites) postProcess(l logg.LevelLogger) error {
defer h.timeTrack(l, time.Now(), "postProcess")
t.logger.Warnf("Failed to get translated string for language %q and ID %q: %s", currentLangStr, translationID, err)
}
- if t.cfg.LogI18nWarnings() {
+ if t.cfg.PrintI18nWarnings() {
t.logger.Warnf("i18n|MISSING_TRANSLATION|%s|%s", currentLangStr, translationID)
}