URI: 
       Fix ref/relRef regression for relative refs from bundles - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit 1746e8a9b2be46dcd6cecbb4bc90983a9c69b333
   DIR parent 6f48146e75e9877c4271ec239b763e6f3bc3babb
  HTML Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Fri, 28 Feb 2020 14:22:05 +0100
       
       Fix ref/relRef regression for relative refs from bundles
       
       Fixes #6952
       
       Diffstat:
         M hugolib/pagecollections.go          |      16 ++++++++++++----
         M hugolib/site.go                     |       1 -
         M hugolib/site_test.go                |      17 +++++++++++++++++
         M hugolib/testhelpers_test.go         |       3 ++-
       
       4 files changed, 31 insertions(+), 6 deletions(-)
       ---
   DIR diff --git a/hugolib/pagecollections.go b/hugolib/pagecollections.go
       @@ -20,7 +20,7 @@ import (
                "strings"
                "sync"
        
       -        "github.com/gohugoio/hugo/common/herrors"
       +        "github.com/gohugoio/hugo/hugofs/files"
        
                "github.com/gohugoio/hugo/helpers"
        
       @@ -207,13 +207,12 @@ func (c *PageCollections) getSectionOrPage(ref string) (*contentNode, string) {
        }
        
        func (c *PageCollections) getContentNode(context page.Page, isReflink bool, ref string) (*contentNode, error) {
       -        defer herrors.Recover()
                ref = filepath.ToSlash(strings.ToLower(strings.TrimSpace(ref)))
                if ref == "" {
                        ref = "/"
                }
                inRef := ref
       -
       +        navUp := strings.HasPrefix(ref, "..")
                var doSimpleLookup bool
                if isReflink || context == nil {
                        // For Ref/Reflink and .Site.GetPage do simple name lookups for the potentially ambigous myarticle.md and /myarticle.md,
       @@ -227,7 +226,16 @@ func (c *PageCollections) getContentNode(context page.Page, isReflink bool, ref 
                        if context.File().IsZero() {
                                base = context.SectionsPath()
                        } else {
       -                        base = filepath.ToSlash(filepath.Dir(context.File().FileInfo().Meta().Path()))
       +                        meta := context.File().FileInfo().Meta()
       +                        base = filepath.ToSlash(filepath.Dir(meta.Path()))
       +                        if meta.Classifier() == files.ContentClassLeaf {
       +                                // Bundles are stored in subfolders e.g. blog/mybundle/index.md,
       +                                // so if the user has not explicitly asked to go up,
       +                                // look on the "blog" level.
       +                                if !navUp {
       +                                        base = path.Dir(base)
       +                                }
       +                        }
                        }
                        ref = path.Join("/", strings.ToLower(base), ref)
                }
   DIR diff --git a/hugolib/site.go b/hugolib/site.go
       @@ -777,7 +777,6 @@ func (s siteRefLinker) logNotFound(ref, what string, p page.Page, position text.
        }
        
        func (s *siteRefLinker) refLink(ref string, source interface{}, relative bool, outputFormat string) (string, error) {
       -
                p, err := unwrapPage(source)
                if err != nil {
                        return "", err
   DIR diff --git a/hugolib/site_test.go b/hugolib/site_test.go
       @@ -940,6 +940,8 @@ func setupLinkingMockSite(t *testing.T) *Site {
                        {filepath.FromSlash("level2/level3/common.png"), ""},
        
                        {filepath.FromSlash("level2/level3/embedded.dot.md"), ""},
       +
       +                {filepath.FromSlash("leafbundle/index.md"), ""},
                }
        
                cfg, fs := newTestCfg()
       @@ -1026,3 +1028,18 @@ func checkLinkCase(site *Site, link string, currentPage page.Page, relative bool
                        t.Fatalf("[%d] Expected %q from %q to resolve to %q, got %q - error: %s", i, link, currentPage.Path(), expected, out, err)
                }
        }
       +
       +// https://github.com/gohugoio/hugo/issues/6952
       +func TestRefBundle(t *testing.T) {
       +        b := newTestSitesBuilder(t)
       +        b.WithContent(
       +                "post/b1/index.md", "---\ntitle: pb1\n---\nRef: {{< ref \"b2\" >}}",
       +                "post/b2/index.md", "---\ntitle: pb2\n---\n",
       +        )
       +        b.WithTemplates("index.html", `Home`)
       +        b.WithTemplates("_default/single.html", `Content: {{ .Content }}`)
       +
       +        b.Build(BuildCfg{})
       +
       +        b.AssertFileContent("public/post/b1/index.html", `Content: <p>Ref: http://example.com/post/b2/</p>`)
       +}
   DIR diff --git a/hugolib/testhelpers_test.go b/hugolib/testhelpers_test.go
       @@ -443,7 +443,8 @@ func (s *sitesBuilder) writeFilePairs(folder string, files []filenameContent) *s
                // our tests running with the in memory filesystem.
                // That file system is backed by a map so not sure how this helps, but some
                // randomness in tests doesn't hurt.
       -        s.rnd.Shuffle(len(files), func(i, j int) { files[i], files[j] = files[j], files[i] })
       +        // TODO(bep) this turns out to be more confusing than helpful.
       +        //s.rnd.Shuffle(len(files), func(i, j int) { files[i], files[j] = files[j], files[i] })
        
                for _, fc := range files {
                        target := folder