ref: 8a89b8582f0f681dc28961adb05ab0bf66da9543
parent: e1175ae83a365e0b17ec5904194e68ff3833e15a
author: Chris Trimble <trimbo@gmail.com>
date: Sun Nov 24 04:57:39 EST 2019
commands: Fix jekyll metadata import on individual posts Prior refactor had eliminated writing FrontMatter for Jekyll imports. This fixes that bug as well as adds a regression test. Also removed unused site var, replaced some raw strings, and added regression test for \r\n removal. Fixes #5576
--- a/commands/import_jekyll.go
+++ b/commands/import_jekyll.go
@@ -105,7 +105,7 @@
return errors.New("abort: jekyll root contains neither posts nor drafts")}
- site, err := i.createSiteFromJekyll(jekyllRoot, targetDir, jekyllPostDirs, forceImport)
+ err = i.createSiteFromJekyll(jekyllRoot, targetDir, jekyllPostDirs, forceImport)
if err != nil {return newUserError(err)
@@ -142,7 +142,7 @@
}
fileCount++
- return convertJekyllPost(site, path, relPath, targetDir, draft)
+ return convertJekyllPost(path, relPath, targetDir, draft)
}
for jekyllPostDir, hasAnyPostInDir := range jekyllPostDirs {@@ -200,22 +200,22 @@
return false, true
}
-func (i *importCmd) createSiteFromJekyll(jekyllRoot, targetDir string, jekyllPostDirs map[string]bool, force bool) (*hugolib.Site, error) {+func (i *importCmd) createSiteFromJekyll(jekyllRoot, targetDir string, jekyllPostDirs map[string]bool, force bool) error {s, err := hugolib.NewSiteDefaultLang()
if err != nil {- return nil, err
+ return err
}
fs := s.Fs.Source
if exists, _ := helpers.Exists(targetDir, fs); exists { if isDir, _ := helpers.IsDir(targetDir, fs); !isDir {- return nil, errors.New("target path \"" + targetDir + "\" exists but is not a directory")+ return errors.New("target path \"" + targetDir + "\" exists but is not a directory")}
isEmpty, _ := helpers.IsEmpty(targetDir, fs)
if !isEmpty && !force {- return nil, errors.New("target path \"" + targetDir + "\" exists and is not empty")+ return errors.New("target path \"" + targetDir + "\" exists and is not empty")}
}
@@ -232,7 +232,7 @@
i.copyJekyllFilesAndFolders(jekyllRoot, filepath.Join(targetDir, "static"), jekyllPostDirs)
- return s, nil
+ return nil
}
func (i *importCmd) loadJekyllConfig(fs afero.Fs, jekyllRoot string) map[string]interface{} {@@ -375,7 +375,7 @@
return postDate, postName, nil
}
-func convertJekyllPost(s *hugolib.Site, path, relPath, targetDir string, draft bool) error {+func convertJekyllPost(path, relPath, targetDir string, draft bool) error { jww.TRACE.Println("Converting", path)filename := filepath.Base(path)
@@ -409,7 +409,11 @@
return err
}
- content := convertJekyllContent(newmetadata, string(pf.content))
+ content, err := convertJekyllContent(newmetadata, string(pf.content))
+ if err != nil {+ jww.ERROR.Println("Converting Jekyll error:", path)+ return err
+ }
fs := hugofs.Os
if err := helpers.WriteToDisk(targetFile, strings.NewReader(content), fs); err != nil {@@ -471,7 +475,7 @@
return metadata, nil
}
-func convertJekyllContent(m interface{}, content string) string {+func convertJekyllContent(m interface{}, content string) (string, error) {metadata, _ := maps.ToStringMapE(m)
lines := strings.Split(content, "\n")
@@ -515,7 +519,16 @@
content = replace.re.ReplaceAllStringFunc(content, replace.replace)
}
- return content
+ var buf bytes.Buffer
+ if len(metadata) != 0 {+ err := parser.InterfaceToFrontMatter(m, metadecoders.YAML, &buf)
+ if err != nil {+ return "", err
+ }
+ }
+ buf.WriteString(content)
+
+ return buf.String(), nil
}
func replaceHighlightTag(match string) string {--- a/commands/import_jekyll_test.go
+++ b/commands/import_jekyll_test.go
@@ -91,11 +91,12 @@
expect string
}{ {map[interface{}]interface{}{},- `Test content\n<!-- more -->\npart2 content`, `Test content\n<!--more-->\npart2 content`},
+ "Test content\r\n<!-- more -->\npart2 content", "Test content\n<!--more-->\npart2 content"},
{map[interface{}]interface{}{},- `Test content\n<!-- More -->\npart2 content`, `Test content\n<!--more-->\npart2 content`},
+ "Test content\n<!-- More -->\npart2 content", "Test content\n<!--more-->\npart2 content"},
{map[interface{}]interface{}{"excerpt_separator": "<!--sep-->"},- `Test content\n<!--sep-->\npart2 content`, `Test content\n<!--more-->\npart2 content`},
+ "Test content\n<!--sep-->\npart2 content",
+ "---\nexcerpt_separator: <!--sep-->\n---\nTest content\n<!--more-->\npart2 content"},
{map[interface{}]interface{}{}, "{% raw %}text{% endraw %}", "text"}, {map[interface{}]interface{}{}, "{%raw%} text2 {%endraw %}", "text2"}, {map[interface{}]interface{}{},@@ -124,10 +125,13 @@
{map[interface{}]interface{}{}, "{% img right /placekitten/300/500 'Place Kitten #4' 'An image of a very cute kitten' %}", "{{< figure class=\"right\" src=\"/placekitten/300/500\" title=\"Place Kitten #4\" alt=\"An image of a very cute kitten\" >}}"},+ {map[interface{}]interface{}{"category": "book", "layout": "post", "Date": "2015-10-01 12:13:11"},+ "somecontent",
+ "---\nDate: \"2015-10-01 12:13:11\"\ncategory: book\nlayout: post\n---\nsomecontent"},
}
-
for _, data := range testDataList {- result := convertJekyllContent(data.metadata, data.content)
- c.Assert(data.expect, qt.Equals, result)
+ result, err := convertJekyllContent(data.metadata, data.content)
+ c.Assert(result, qt.Equals, data.expect)
+ c.Assert(err, qt.IsNil)
}
}
--
⑨