diff --git a/commands/commandeer.go b/commands/commandeer.go index 465516e2e..222a2a020 100644 --- a/commands/commandeer.go +++ b/commands/commandeer.go @@ -115,11 +115,13 @@ type rootCommand struct { environment string // Common build flags. - baseURL string - gc bool - poll string - panicOnWarning bool - forceSyncStatic bool + baseURL string + gc bool + poll string + panicOnWarning bool + forceSyncStatic bool + printPathWarnings bool + printUnusedTemplates bool // Profile flags (for debugging of performance problems) cpuprofile string @@ -538,8 +540,8 @@ func applyLocalBuildFlags(cmd *cobra.Command, r *rootCommand) { 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().BoolP("printPathWarnings", "", false, "print warnings on duplicate target paths etc.") - cmd.Flags().BoolP("printUnusedTemplates", "", false, "print warnings on unused templates.") + 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().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") diff --git a/commands/hugobuilder.go b/commands/hugobuilder.go index 28c21a9a7..4f65140a0 100644 --- a/commands/hugobuilder.go +++ b/commands/hugobuilder.go @@ -41,7 +41,9 @@ import ( "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/afero" "github.com/spf13/fsync" "golang.org/x/sync/errgroup" "golang.org/x/sync/semaphore" @@ -411,6 +413,26 @@ func (c *hugoBuilder) build() error { if err != nil { return err } + + if c.r.printPathWarnings { + hugofs.WalkFilesystems(h.Fs.PublishDir, func(fs afero.Fs) bool { + if dfs, ok := fs.(hugofs.DuplicatesReporter); ok { + dupes := dfs.ReportDuplicates() + if dupes != "" { + c.r.logger.Warnln("Duplicate target paths:", dupes) + } + } + return false + }) + } + + 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() } diff --git a/testscripts/commands/hugo_printpathwarnings.txt b/testscripts/commands/hugo_printpathwarnings.txt new file mode 100644 index 000000000..f4c76ebab --- /dev/null +++ b/testscripts/commands/hugo_printpathwarnings.txt @@ -0,0 +1,17 @@ +hugo --printPathWarnings + +stdout 'Duplicate target paths: .index.html \(2\)' + +-- hugo.toml -- +disableKinds = ["taxonomy", "term", "RSS", "sitemap", "robotsTXT", "404", "section"] +baseURL = "https://example.org/" +-- layouts/_default/single.html -- +Single. +-- layouts/index.html -- +Home. +-- content/p1.md -- +--- +title: "P1" +url: "/" +--- + diff --git a/testscripts/commands/hugo_printunusedtemplates.txt b/testscripts/commands/hugo_printunusedtemplates.txt new file mode 100644 index 000000000..312e4920d --- /dev/null +++ b/testscripts/commands/hugo_printunusedtemplates.txt @@ -0,0 +1,11 @@ +hugo --printUnusedTemplates + +stdout 'Template _default/list.html is unused' + +-- hugo.toml -- +disableKinds = ["taxonomy", "term", "RSS", "sitemap", "robotsTXT", "404", "section", "page"] +baseURL = "https://example.org/" +-- layouts/index.html -- +Home. +-- layouts/_default/list.html -- +{{ errorf "unused template: %s" .Kind }}