hugolib: Remove the now superflous Source struct
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 20 Oct 2018 17:09:03 +0000 (19:09 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 22 Oct 2018 18:46:14 +0000 (20:46 +0200)
See #5324

hugolib/hugo_sites_build_errors_test.go
hugolib/page.go
hugolib/page_collections.go
hugolib/page_content.go
hugolib/page_paths.go
hugolib/site.go
parser/metadecoders/decoder.go

index 8e2296f5b90b33ee87192d69a16f2103272a7df6..6b44bea8867173fd3fe49522d34ad15015169064 100644 (file)
@@ -98,17 +98,16 @@ func TestSiteBuildErrors(t *testing.T) {
                                a.assertLineNumber(2, err)
                        },
                },
-               // TODO(bep) 2errors
-               /*              {
-                               name:     "Shortode execute failed",
-                               fileType: shortcode,
-                               fileFixer: func(content string) string {
-                                       return strings.Replace(content, ".Title", ".Titles", 1)
-                               },
-                               assertBuildError: func(a testSiteBuildErrorAsserter, err error) {
-                                       a.assertLineNumber(2, err)
-                               },
-                       },*/
+               {
+                       name:     "Shortode execute failed",
+                       fileType: shortcode,
+                       fileFixer: func(content string) string {
+                               return strings.Replace(content, ".Title", ".Titles", 1)
+                       },
+                       assertBuildError: func(a testSiteBuildErrorAsserter, err error) {
+                               a.assertLineNumber(25, err)
+                       },
+               },
 
                {
                        name:     "Panic in template Execute",
index d13dfb24601fe6ffaf6cb9daf569cad2a015fd14..74005e5a8c1b2ab454f4e766595883e75facb664 100644 (file)
@@ -49,7 +49,6 @@ import (
        "time"
        "unicode/utf8"
 
-       bp "github.com/gohugoio/hugo/bufferpool"
        "github.com/gohugoio/hugo/compare"
        "github.com/gohugoio/hugo/source"
        "github.com/spf13/cast"
@@ -185,7 +184,7 @@ type Page struct {
        // menus
        pageMenus PageMenus
 
-       Source
+       source.File
 
        Position `json:"-"`
 
@@ -467,7 +466,7 @@ func (p *Page) BundleType() string {
                return "branch"
        }
 
-       var source interface{} = p.Source.File
+       var source interface{} = p.File
        if fi, ok := source.(*fileInfo); ok {
                switch fi.bundleTp {
                case bundleBranch:
@@ -484,12 +483,6 @@ func (p *Page) MediaType() media.Type {
        return media.OctetType
 }
 
-// TODO(bep) 2errors remove
-type Source struct {
-       Frontmatter []byte
-       Content     []byte
-       source.File
-}
 type PageMeta struct {
        wordCount      int
        fuzzyWordCount int
@@ -512,7 +505,7 @@ func (ps Pages) String() string {
 
 func (ps Pages) findPagePosByFilename(filename string) int {
        for i, x := range ps {
-               if x.Source.Filename() == filename {
+               if x.Filename() == filename {
                        return i
                }
        }
@@ -545,8 +538,8 @@ func (ps Pages) findPagePosByFilnamePrefix(prefix string) int {
 
        // Find the closest match
        for i, x := range ps {
-               if strings.HasPrefix(x.Source.Filename(), prefix) {
-                       diff := len(x.Source.Filename()) - prefixLen
+               if strings.HasPrefix(x.Filename(), prefix) {
+                       diff := len(x.Filename()) - prefixLen
                        if lenDiff == -1 || diff < lenDiff {
                                lenDiff = diff
                                currPos = i
@@ -560,7 +553,7 @@ func (ps Pages) findPagePosByFilnamePrefix(prefix string) int {
 // will return -1 if not found
 func (ps Pages) findPagePos(page *Page) int {
        for i, x := range ps {
-               if x.Source.Filename() == page.Source.Filename() {
+               if x.Filename() == page.Filename() {
                        return i
                }
        }
@@ -701,7 +694,7 @@ func (p *Page) Authors() AuthorList {
 }
 
 func (p *Page) UniqueID() string {
-       return p.Source.UniqueID()
+       return p.File.UniqueID()
 }
 
 // for logging
@@ -881,7 +874,7 @@ func (s *Site) newPageFromFile(fi *fileInfo) *Page {
                pageContentInit: &pageContentInit{},
                Kind:            kindFromFileInfo(fi),
                contentType:     "",
-               Source:          Source{File: fi},
+               File:            fi,
                Keywords:        []string{}, Sitemap: Sitemap{Priority: -1},
                params:       make(map[string]interface{}),
                translations: make(Pages, 0),
@@ -914,7 +907,7 @@ func (p *Page) Section() string {
        if p.Kind == KindSection || p.Kind == KindTaxonomy || p.Kind == KindTaxonomyTerm {
                return p.sections[0]
        }
-       return p.Source.Section()
+       return p.File.Section()
 }
 
 func (s *Site) newPageFrom(buf io.Reader, name string) (*Page, error) {
@@ -1273,8 +1266,8 @@ func (p *Page) updateMetaData(frontmatter map[string]interface{}) error {
        maps.ToLower(frontmatter)
 
        var mtime time.Time
-       if p.Source.FileInfo() != nil {
-               mtime = p.Source.FileInfo().ModTime()
+       if p.FileInfo() != nil {
+               mtime = p.FileInfo().ModTime()
        }
 
        var gitAuthorDate time.Time
@@ -1476,7 +1469,7 @@ func (p *Page) updateMetaData(frontmatter map[string]interface{}) error {
        p.Markup = helpers.GuessType(p.Markup)
        if p.Markup == "unknown" {
                // Fall back to file extension (might also return "unknown")
-               p.Markup = helpers.GuessType(p.Source.Ext())
+               p.Markup = helpers.GuessType(p.Ext())
        }
 
        if draft != nil && published != nil {
@@ -1721,51 +1714,6 @@ func (p *Page) RawContent() string {
        return string(p.rawContent)
 }
 
-func (p *Page) SetSourceContent(content []byte) {
-       p.Source.Content = content
-}
-
-func (p *Page) SafeSaveSourceAs(path string) error {
-       return p.saveSourceAs(path, true)
-}
-
-func (p *Page) SaveSourceAs(path string) error {
-       return p.saveSourceAs(path, false)
-}
-
-func (p *Page) saveSourceAs(path string, safe bool) error {
-       b := bp.GetBuffer()
-       defer bp.PutBuffer(b)
-
-       b.Write(p.Source.Frontmatter)
-       b.Write(p.Source.Content)
-
-       bc := make([]byte, b.Len(), b.Len())
-       copy(bc, b.Bytes())
-
-       return p.saveSource(bc, path, safe)
-}
-
-func (p *Page) saveSource(by []byte, inpath string, safe bool) (err error) {
-       if !filepath.IsAbs(inpath) {
-               inpath = p.s.PathSpec.AbsPathify(inpath)
-       }
-       p.s.Log.INFO.Println("creating", inpath)
-       if safe {
-               err = helpers.SafeWriteToDisk(inpath, bytes.NewReader(by), p.s.Fs.Source)
-       } else {
-               err = helpers.WriteToDisk(inpath, bytes.NewReader(by), p.s.Fs.Source)
-       }
-       if err != nil {
-               return
-       }
-       return nil
-}
-
-func (p *Page) SaveSource() error {
-       return p.SaveSourceAs(p.FullFilePath())
-}
-
 func (p *Page) FullFilePath() string {
        return filepath.Join(p.Dir(), p.LogicalName())
 }
@@ -1779,8 +1727,8 @@ func (p *Page) FullFilePath() string {
 // For pages that do not (sections witout content page etc.), it returns the
 // virtual path, consistent with where you would add a source file.
 func (p *Page) absoluteSourceRef() string {
-       if p.Source.File != nil {
-               sourcePath := p.Source.Path()
+       if p.File != nil {
+               sourcePath := p.Path()
                if sourcePath != "" {
                        return "/" + filepath.ToSlash(sourcePath)
                }
index 0dfff8b5dce4d507ae157612277b738e1f381dca..78325344b608b8c5b65cac32df43004716e463f4 100644 (file)
@@ -101,9 +101,9 @@ func (c *PageCollections) refreshPageCaches() {
                                }
 
                                // Ref/Relref supports this potentially ambiguous lookup.
-                               add(p.Source.LogicalName(), p)
+                               add(p.LogicalName(), p)
 
-                               translationBaseName := p.Source.TranslationBaseName()
+                               translationBaseName := p.TranslationBaseName()
 
                                dir, _ := path.Split(sourceRef)
                                dir = strings.TrimSuffix(dir, "/")
index 0d715f38bf9037edd118636e206010a92464c14a..39abd09814de4b1fe27e8e40ffe06c03d1ad3e5d 100644 (file)
@@ -167,7 +167,7 @@ func (p *Page) parse(reader io.Reader) error {
        }
 
        // TODO(bep) 2errors
-       p.lang = p.Source.File.Lang()
+       p.lang = p.File.Lang()
 
        if p.s != nil && p.s.owner != nil {
                gi, enabled := p.s.owner.gitInfo.forPage(p)
index 999537de4042a899afd02dba4f144096fad06703..151507be6a48df931825adecbc7cefa48e414374 100644 (file)
@@ -87,7 +87,7 @@ func (p *Page) initTargetPathDescriptor() error {
                Kind:        p.Kind,
                Sections:    p.sections,
                UglyURLs:    p.s.Info.uglyURLs(p),
-               Dir:         filepath.ToSlash(p.Source.Dir()),
+               Dir:         filepath.ToSlash(p.Dir()),
                URL:         p.frontMatterURL,
                IsMultihost: p.s.owner.IsMultihost(),
        }
index cb980e8ab511e66e00a1b382479ad8aeae6d3acc..8358cf6104a15bbdd41af47b985d5e70c2180dc4 100644 (file)
@@ -1467,7 +1467,7 @@ func (s *Site) assembleTaxonomies() {
                        w := p.getParamToLower(plural + "_weight")
                        weight, err := cast.ToIntE(w)
                        if err != nil {
-                               s.Log.ERROR.Printf("Unable to convert taxonomy weight %#v to int for %s", w, p.Source.File.Path())
+                               s.Log.ERROR.Printf("Unable to convert taxonomy weight %#v to int for %s", w, p.File.Path())
                                // weight will equal zero, so let the flow continue
                        }
 
@@ -1799,7 +1799,7 @@ func (s *Site) newNodePage(typ string, sections ...string) *Page {
                pageInit:        &pageInit{},
                pageContentInit: &pageContentInit{},
                Kind:            typ,
-               Source:          Source{File: &source.FileInfo{}},
+               File:            &source.FileInfo{},
                data:            make(map[string]interface{}),
                Site:            &s.Info,
                sections:        sections,
index e409b76653dcc2e3186fc722429b7573c79ca132..0cb6afa5bbf999d3e44f0d716be6555afe808b5f 100644 (file)
@@ -59,7 +59,7 @@ func unmarshal(data []byte, f Format, v interface{}) error {
        case ORG:
                vv, err := goorgeous.OrgHeaders(data)
                if err != nil {
-                       return err
+                       return errors.Wrap(err, "failed to unmarshal ORG headers")
                }
                switch v.(type) {
                case *map[string]interface{}:
@@ -73,6 +73,9 @@ func unmarshal(data []byte, f Format, v interface{}) error {
                err = toml.Unmarshal(data, v)
        case YAML:
                err = yaml.Unmarshal(data, v)
+               if err != nil {
+                       return errors.Wrap(err, "failed to unmarshal YAML")
+               }
 
                // To support boolean keys, the YAML package unmarshals maps to
                // map[interface{}]interface{}. Here we recurse through the result
@@ -100,7 +103,7 @@ func unmarshal(data []byte, f Format, v interface{}) error {
                return errors.Errorf("unmarshal of format %q is not supported", f)
        }
 
-       return err
+       return errors.Wrap(err, "unmarshal failed")
 
 }