From 2b6063c3e388056597af88709ff017d15f53c962 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Tue, 4 Jan 2022 13:07:10 +0100 Subject: [PATCH] Misc depreation updates * Deprecate .Page.Path when backed by a file * site.Permalinks * --ignoreVendor (use --ignoreVendorPaths) Closes #9348 Closes #9349 --- commands/commands.go | 4 +--- commands/commands_test.go | 10 ---------- commands/convert.go | 6 +++--- commands/hugo.go | 4 ---- commands/mod.go | 2 +- hugofs/files/classifier.go | 1 - hugolib/config.go | 8 -------- hugolib/content_map_page.go | 5 ++--- hugolib/page.go | 6 +++--- hugolib/page__meta.go | 20 +++++++++++++++++++- hugolib/site.go | 9 +-------- hugolib/site_test.go | 2 +- hugolib/testhelpers_test.go | 7 +++---- modules/client.go | 2 +- resources/page/page.go | 6 ++++-- resources/page/page_marshaljson.autogen.go | 7 ++++--- resources/page/page_matcher.go | 3 +-- resources/page/page_nop.go | 4 ++++ resources/page/testhelpers_test.go | 4 ++++ 19 files changed, 52 insertions(+), 58 deletions(-) diff --git a/commands/commands.go b/commands/commands.go index 4153c3cdf..b6e8dd469 100644 --- a/commands/commands.go +++ b/commands/commands.go @@ -131,8 +131,7 @@ type hugoCmd struct { var _ cmder = (*nilCommand)(nil) -type nilCommand struct { -} +type nilCommand struct{} func (c *nilCommand) getCommand() *cobra.Command { return nil @@ -281,7 +280,6 @@ func (cc *hugoBuilderCommon) handleCommonBuilderFlags(cmd *cobra.Command) { cmd.PersistentFlags().SetAnnotation("source", cobra.BashCompSubdirsInDir, []string{}) cmd.PersistentFlags().StringVarP(&cc.environment, "environment", "e", "", "build environment") cmd.PersistentFlags().StringP("themesDir", "", "", "filesystem path to themes directory") - cmd.PersistentFlags().BoolP("ignoreVendor", "", false, "ignores any _vendor directory") cmd.PersistentFlags().StringP("ignoreVendorPaths", "", "", "ignores any _vendor for module paths matching the given Glob pattern") } diff --git a/commands/commands_test.go b/commands/commands_test.go index ef61dc7a5..9966cd937 100644 --- a/commands/commands_test.go +++ b/commands/commands_test.go @@ -162,16 +162,6 @@ func TestFlags(t *testing.T) { args []string check func(c *qt.C, cmd *serverCmd) }{ - { - // https://github.com/gohugoio/hugo/issues/7642 - name: "ignoreVendor as bool", - args: []string{"server", "--ignoreVendor"}, - check: func(c *qt.C, cmd *serverCmd) { - cfg := config.New() - cmd.flagsToConfig(cfg) - c.Assert(cfg.Get("ignoreVendor"), qt.Equals, true) - }, - }, { // https://github.com/gohugoio/hugo/issues/7642 name: "ignoreVendorPaths", diff --git a/commands/convert.go b/commands/convert.go index e2bd4307f..8c84423f5 100644 --- a/commands/convert.go +++ b/commands/convert.go @@ -142,7 +142,7 @@ func (cc *convertCmd) convertAndSavePage(p page.Page, site *hugolib.Site, target return nil } - errMsg := fmt.Errorf("Error processing file %q", p.Path()) + errMsg := fmt.Errorf("Error processing file %q", p.File().Path()) site.Log.Infoln("Attempting to convert", p.File().Filename()) @@ -185,10 +185,10 @@ func (cc *convertCmd) convertAndSavePage(p page.Page, site *hugolib.Site, target newFilename := p.File().Filename() if cc.outputDir != "" { - contentDir := strings.TrimSuffix(newFilename, p.Path()) + contentDir := strings.TrimSuffix(newFilename, p.File().Path()) contentDir = filepath.Base(contentDir) - newFilename = filepath.Join(cc.outputDir, contentDir, p.Path()) + newFilename = filepath.Join(cc.outputDir, contentDir, p.File().Path()) } fs := hugofs.Os diff --git a/commands/hugo.go b/commands/hugo.go index d442a62b5..b954bf13c 100644 --- a/commands/hugo.go +++ b/commands/hugo.go @@ -199,7 +199,6 @@ func initializeFlags(cmd *cobra.Command, cfg config.Provider) { "forceSyncStatic", "noTimes", "noChmod", - "ignoreVendor", "ignoreVendorPaths", "templateMetrics", "templateMetricsHints", @@ -281,7 +280,6 @@ func isTerminal() bool { } func (c *commandeer) fullBuild(noBuildLock bool) error { - var ( g errgroup.Group langCount map[string]uint64 @@ -542,7 +540,6 @@ func (c *commandeer) build() error { } func (c *commandeer) serverBuild() error { - stopProfiling, err := c.initProfiling() if err != nil { return err @@ -739,7 +736,6 @@ func (c *commandeer) handleBuildErr(err error, msg string) { } func (c *commandeer) rebuildSites(events []fsnotify.Event) error { - c.buildErr = nil visited := c.visitedURLs.PeekAllSet() if c.fastRenderMode { diff --git a/commands/mod.go b/commands/mod.go index eb6b1a440..44a48bf79 100644 --- a/commands/mod.go +++ b/commands/mod.go @@ -96,7 +96,7 @@ func (b *commandsBuilder) newModCmd() *modCmd { const commonUsage = ` Note that Hugo will always start out by resolving the components defined in the site -configuration, provided by a _vendor directory (if no --ignoreVendor flag provided), +configuration, provided by a _vendor directory (if no --ignoreVendorPaths flag provided), Go Modules, or a folder inside the themes directory, in that order. See https://gohugo.io/hugo-modules/ for more information. diff --git a/hugofs/files/classifier.go b/hugofs/files/classifier.go index aab199850..09b239c21 100644 --- a/hugofs/files/classifier.go +++ b/hugofs/files/classifier.go @@ -40,7 +40,6 @@ var ( "mdown", "markdown", "md", "asciidoc", "adoc", "ad", "rest", "rst", - "mmark", "org", "pandoc", "pdc", } diff --git a/hugolib/config.go b/hugolib/config.go index e79899b94..dffecd9a3 100644 --- a/hugolib/config.go +++ b/hugolib/config.go @@ -53,7 +53,6 @@ var ErrNoConfigFile = errors.New("Unable to locate config file or config directo // LoadConfig loads Hugo configuration into a new Viper and then adds // a set of defaults. func LoadConfig(d ConfigSourceDescriptor, doWithConfig ...func(cfg config.Provider) error) (config.Provider, []string, error) { - if d.Environment == "" { d.Environment = hugo.EnvironmentProduction } @@ -110,15 +109,8 @@ func LoadConfig(d ConfigSourceDescriptor, doWithConfig ...func(cfg config.Provid } // Config deprecations. - // We made this a Glob pattern in Hugo 0.75, we don't need both. - if l.cfg.GetBool("ignoreVendor") { - helpers.Deprecated("--ignoreVendor", "Use --ignoreVendorPaths \"**\"", true) - l.cfg.Set("ignoreVendorPaths", "**") - } - if l.cfg.GetString("markup.defaultMarkdownHandler") == "blackfriday" { helpers.Deprecated("markup.defaultMarkdownHandler=blackfriday", "See https://gohugo.io//content-management/formats/#list-of-content-formats", false) - } // Some settings are used before we're done collecting all settings, diff --git a/hugolib/content_map_page.go b/hugolib/content_map_page.go index 698c96cff..228564351 100644 --- a/hugolib/content_map_page.go +++ b/hugolib/content_map_page.go @@ -403,7 +403,7 @@ func (m *pageMap) assembleResources(s string, p *pageState, parentBucket *pagesM if err != nil { return true } - rp.m.resourcePath = filepath.ToSlash(strings.TrimPrefix(rp.Path(), p.File().Dir())) + rp.m.resourcePath = filepath.ToSlash(strings.TrimPrefix(rp.File().Path(), p.File().Dir())) r = rp case files.ContentClassFile: @@ -468,7 +468,6 @@ func (m *pageMap) assembleSections() error { kind := page.KindSection if s == "/" { - kind = page.KindHome } @@ -580,7 +579,7 @@ func (m *pageMap) attachPageToViews(s string, b *contentNode) { w := getParamToLower(b.p, viewName.plural+"_weight") weight, err := cast.ToIntE(w) if err != nil { - m.s.Log.Errorf("Unable to convert taxonomy weight %#v to int for %q", w, b.p.Path()) + m.s.Log.Errorf("Unable to convert taxonomy weight %#v to int for %q", w, b.p.Pathc()) // weight will equal zero, so let the flow continue } diff --git a/hugolib/page.go b/hugolib/page.go index f35865cf0..d2d962044 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -145,7 +145,7 @@ func (p *pageState) Eq(other interface{}) bool { } func (p *pageState) GetIdentity() identity.Identity { - return identity.NewPathIdentity(files.ComponentFolderContent, filepath.FromSlash(p.Path())) + return identity.NewPathIdentity(files.ComponentFolderContent, filepath.FromSlash(p.Pathc())) } func (p *pageState) GitInfo() *gitmap.GitInfo { @@ -895,8 +895,8 @@ func (p *pageState) pathOrTitle() string { return p.File().Filename() } - if p.Path() != "" { - return p.Path() + if p.Pathc() != "" { + return p.Pathc() } return p.Title() diff --git a/hugolib/page__meta.go b/hugolib/page__meta.go index 7bd9f6ac7..6a10b1d36 100644 --- a/hugolib/page__meta.go +++ b/hugolib/page__meta.go @@ -232,6 +232,24 @@ func (p *pageMeta) Params() maps.Params { } func (p *pageMeta) Path() string { + if !p.File().IsZero() { + const example = ` + {{ $path := "" }} + {{ with .File }} + {{ $path = .Path }} + {{ else }} + {{ $path = .Path }} + {{ end }} +` + helpers.Deprecated(".Path when the page is backed by a file", "We plan to use Path for a canonical source path and you probably want to check the source is a file. To get the current behaviour, you can use a construct simlar to the below:\n"+example, false) + + } + + return p.Pathc() +} + +// This is just a bridge method, use Path in templates. +func (p *pageMeta) Pathc() string { if !p.File().IsZero() { return p.File().Path() } @@ -759,7 +777,7 @@ func (p *pageMeta) newContentConverter(ps *pageState, markup string, renderingCo converter.DocumentContext{ Document: newPageForRenderHook(ps), DocumentID: id, - DocumentName: p.Path(), + DocumentName: p.File().Path(), Filename: filename, ConfigOverrides: renderingConfigOverrides, }, diff --git a/hugolib/site.go b/hugolib/site.go index dce4b8d25..bde8a2199 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -689,12 +689,6 @@ func (s *SiteInfo) AllRegularPages() page.Pages { return s.s.AllRegularPages() } -func (s *SiteInfo) Permalinks() map[string]string { - // Remove in 0.61 - helpers.Deprecated(".Site.Permalinks", "", true) - return s.permalinks -} - func (s *SiteInfo) LastChange() time.Time { return s.s.lastmod } @@ -825,7 +819,7 @@ func (s siteRefLinker) logNotFound(ref, what string, p page.Page, position text. } else if p == nil { s.errorLogger.Printf("[%s] REF_NOT_FOUND: Ref %q: %s", s.s.Lang(), ref, what) } else { - s.errorLogger.Printf("[%s] REF_NOT_FOUND: Ref %q from page %q: %s", s.s.Lang(), ref, p.Path(), what) + s.errorLogger.Printf("[%s] REF_NOT_FOUND: Ref %q from page %q: %s", s.s.Lang(), ref, p.Pathc(), what) } } @@ -1402,7 +1396,6 @@ func (s *Site) getMenusFromConfig() navigation.Menus { } s.Log.Errorf("unable to process menus in site config\n") s.Log.Errorln(err) - } for _, entry := range m { diff --git a/hugolib/site_test.go b/hugolib/site_test.go index e25991164..73cea855a 100644 --- a/hugolib/site_test.go +++ b/hugolib/site_test.go @@ -957,7 +957,7 @@ func TestRefLinking(t *testing.T) { func checkLinkCase(site *Site, link string, currentPage page.Page, relative bool, outputFormat string, expected string, t *testing.T, i int) { t.Helper() if out, err := site.refLink(link, currentPage, relative, outputFormat); err != nil || out != expected { - t.Fatalf("[%d] Expected %q from %q to resolve to %q, got %q - error: %s", i, link, currentPage.Path(), expected, out, err) + t.Fatalf("[%d] Expected %q from %q to resolve to %q, got %q - error: %s", i, link, currentPage.Pathc(), expected, out, err) } } diff --git a/hugolib/testhelpers_test.go b/hugolib/testhelpers_test.go index 72e22ed1d..105654c4f 100644 --- a/hugolib/testhelpers_test.go +++ b/hugolib/testhelpers_test.go @@ -800,7 +800,6 @@ func (s *sitesBuilder) NpmInstall() hexec.Runner { command, err := ex.New("npm", "install") s.Assert(err, qt.IsNil) return command - } func newTestHelper(cfg config.Provider, fs *hugofs.Fs, t testing.TB) testHelper { @@ -998,7 +997,7 @@ func content(c resource.ContentProvider) string { func pagesToString(pages ...page.Page) string { var paths []string for _, p := range pages { - paths = append(paths, p.Path()) + paths = append(paths, p.Pathc()) } sort.Strings(paths) return strings.Join(paths, "|") @@ -1020,7 +1019,7 @@ func dumpPages(pages ...page.Page) { fmt.Println("---------") for _, p := range pages { fmt.Printf("Kind: %s Title: %-10s RelPermalink: %-10s Path: %-10s sections: %s Lang: %s\n", - p.Kind(), p.Title(), p.RelPermalink(), p.Path(), p.SectionsPath(), p.Lang()) + p.Kind(), p.Title(), p.RelPermalink(), p.Pathc(), p.SectionsPath(), p.Lang()) } } @@ -1028,7 +1027,7 @@ func dumpSPages(pages ...*pageState) { for i, p := range pages { fmt.Printf("%d: Kind: %s Title: %-10s RelPermalink: %-10s Path: %-10s sections: %s\n", i+1, - p.Kind(), p.Title(), p.RelPermalink(), p.Path(), p.SectionsPath()) + p.Kind(), p.Title(), p.RelPermalink(), p.Pathc(), p.SectionsPath()) } } diff --git a/modules/client.go b/modules/client.go index 5b61e5644..17e149ecf 100644 --- a/modules/client.go +++ b/modules/client.go @@ -191,7 +191,7 @@ func (c *Client) Tidy() error { // // We, by default, use the /_vendor folder first, if found. To disable, // run with -// hugo --ignoreVendor +// hugo --ignoreVendorPaths=".*" // // Given a module tree, Hugo will pick the first module for a given path, // meaning that if the top-level module is vendored, that will be the full diff --git a/resources/page/page.go b/resources/page/page.go index 0b402c4e7..f23069a68 100644 --- a/resources/page/page.go +++ b/resources/page/page.go @@ -180,6 +180,9 @@ type PageMetaProvider interface { // to the source of this Page. It will be relative to any content root. Path() string + // This is just a temporary bridge method. Use Path in templates. + Pathc() string + // The slug, typically defined in front matter. Slug() string @@ -392,5 +395,4 @@ type DeprecatedWarningPageMethods1 interface { // Move here to trigger ERROR instead of WARNING. // TODO(bep) create wrappers and put into the Page once it has some methods. -type DeprecatedErrorPageMethods interface { -} +type DeprecatedErrorPageMethods interface{} diff --git a/resources/page/page_marshaljson.autogen.go b/resources/page/page_marshaljson.autogen.go index 2286f1e63..6cfa411e2 100644 --- a/resources/page/page_marshaljson.autogen.go +++ b/resources/page/page_marshaljson.autogen.go @@ -17,6 +17,9 @@ package page import ( "encoding/json" + "html/template" + "time" + "github.com/bep/gitmap" "github.com/gohugoio/hugo/common/maps" "github.com/gohugoio/hugo/config" @@ -26,8 +29,6 @@ import ( "github.com/gohugoio/hugo/media" "github.com/gohugoio/hugo/navigation" "github.com/gohugoio/hugo/source" - "html/template" - "time" ) func MarshalPageToJSON(p Page) ([]byte, error) { @@ -68,7 +69,7 @@ func MarshalPageToJSON(p Page) ([]byte, error) { linkTitle := p.LinkTitle() isNode := p.IsNode() isPage := p.IsPage() - path := p.Path() + path := p.Pathc() slug := p.Slug() lang := p.Lang() isSection := p.IsSection() diff --git a/resources/page/page_matcher.go b/resources/page/page_matcher.go index 8e81f810d..0c4c2d0e2 100644 --- a/resources/page/page_matcher.go +++ b/resources/page/page_matcher.go @@ -59,7 +59,7 @@ func (m PageMatcher) Matches(p Page) bool { if m.Path != "" { g, err := glob.GetGlob(m.Path) // TODO(bep) Path() vs filepath vs leading slash. - p := strings.ToLower(filepath.ToSlash(p.Path())) + p := strings.ToLower(filepath.ToSlash(p.Pathc())) if !(strings.HasPrefix(p, "/")) { p = "/" + p } @@ -104,7 +104,6 @@ func DecodeCascade(in interface{}) (map[PageMatcher]maps.Params, error) { } return cascade, nil - } // DecodePageMatcher decodes m into v. diff --git a/resources/page/page_nop.go b/resources/page/page_nop.go index 4f91883a0..011fabfc0 100644 --- a/resources/page/page_nop.go +++ b/resources/page/page_nop.go @@ -338,6 +338,10 @@ func (p *nopPage) Path() string { return "" } +func (p *nopPage) Pathc() string { + return "" +} + func (p *nopPage) Permalink() string { return "" } diff --git a/resources/page/testhelpers_test.go b/resources/page/testhelpers_test.go index a21ab2ff3..57077ecf8 100644 --- a/resources/page/testhelpers_test.go +++ b/resources/page/testhelpers_test.go @@ -414,6 +414,10 @@ func (p *testPage) Path() string { return p.path } +func (p *testPage) Pathc() string { + return p.path +} + func (p *testPage) Permalink() string { panic("not implemented") }