shithub: hugo

Download patch

ref: 7930d2132a3c36c1aaca20f16f56978c84656b0a
parent: eb038cfa0a8ada29dfcba1204ec5c432da9ed7e0
author: Bjørn Erik Pedersen <[email protected]>
date: Sat Oct 20 15:09:03 EDT 2018

hugolib: Remove the now superflous Source struct

See #5324

--- a/hugolib/hugo_sites_build_errors_test.go
+++ b/hugolib/hugo_sites_build_errors_test.go
@@ -98,17 +98,16 @@
 				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",
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -49,7 +49,6 @@
 	"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 @@
 	// menus
 	pageMenus PageMenus
 
-	Source
+	source.File
 
 	Position `json:"-"`
 
@@ -467,7 +466,7 @@
 		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 @@
 	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) findPagePosByFilename(filename string) int {
 	for i, x := range ps {
-		if x.Source.Filename() == filename {
+		if x.Filename() == filename {
 			return i
 		}
 	}
@@ -545,8 +538,8 @@
 
 	// 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 @@
 // 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) UniqueID() string {
-	return p.Source.UniqueID()
+	return p.File.UniqueID()
 }
 
 // for logging
@@ -881,7 +874,7 @@
 		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 @@
 	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 @@
 	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 @@
 	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 @@
 	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 @@
 // 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)
 		}
--- a/hugolib/page_collections.go
+++ b/hugolib/page_collections.go
@@ -101,9 +101,9 @@
 				}
 
 				// 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, "/")
--- a/hugolib/page_content.go
+++ b/hugolib/page_content.go
@@ -167,7 +167,7 @@
 	}
 
 	// 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)
--- a/hugolib/page_paths.go
+++ b/hugolib/page_paths.go
@@ -87,7 +87,7 @@
 		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(),
 	}
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -1467,7 +1467,7 @@
 			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 @@
 		pageInit:        &pageInit{},
 		pageContentInit: &pageContentInit{},
 		Kind:            typ,
-		Source:          Source{File: &source.FileInfo{}},
+		File:            &source.FileInfo{},
 		data:            make(map[string]interface{}),
 		Site:            &s.Info,
 		sections:        sections,
--- a/parser/metadecoders/decoder.go
+++ b/parser/metadecoders/decoder.go
@@ -59,7 +59,7 @@
 	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 @@
 		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 @@
 		return errors.Errorf("unmarshal of format %q is not supported", f)
 	}
 
-	return err
+	return errors.Wrap(err, "unmarshal failed")
 
 }