mirror of
				https://github.com/gohugoio/hugo.git
				synced 2024-05-11 05:54:58 +00:00 
			
		
		
		
	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
This commit is contained in:
		
				
					committed by
					
						
						Bjørn Erik Pedersen
					
				
			
			
				
	
			
			
			
						parent
						
							e1175ae83a
						
					
				
				
					commit
					8a89b8582f
				
			@@ -105,7 +105,7 @@ func (i *importCmd) importFromJekyll(cmd *cobra.Command, args []string) error {
 | 
				
			|||||||
		return errors.New("abort: jekyll root contains neither posts nor drafts")
 | 
							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 {
 | 
						if err != nil {
 | 
				
			||||||
		return newUserError(err)
 | 
							return newUserError(err)
 | 
				
			||||||
@@ -142,7 +142,7 @@ func (i *importCmd) importFromJekyll(cmd *cobra.Command, args []string) error {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		fileCount++
 | 
							fileCount++
 | 
				
			||||||
		return convertJekyllPost(site, path, relPath, targetDir, draft)
 | 
							return convertJekyllPost(path, relPath, targetDir, draft)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for jekyllPostDir, hasAnyPostInDir := range jekyllPostDirs {
 | 
						for jekyllPostDir, hasAnyPostInDir := range jekyllPostDirs {
 | 
				
			||||||
@@ -200,22 +200,22 @@ func (i *importCmd) retrieveJekyllPostDir(fs afero.Fs, dir string) (bool, bool)
 | 
				
			|||||||
	return false, true
 | 
						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()
 | 
						s, err := hugolib.NewSiteDefaultLang()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	fs := s.Fs.Source
 | 
						fs := s.Fs.Source
 | 
				
			||||||
	if exists, _ := helpers.Exists(targetDir, fs); exists {
 | 
						if exists, _ := helpers.Exists(targetDir, fs); exists {
 | 
				
			||||||
		if isDir, _ := helpers.IsDir(targetDir, fs); !isDir {
 | 
							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)
 | 
							isEmpty, _ := helpers.IsEmpty(targetDir, fs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if !isEmpty && !force {
 | 
							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 @@ func (i *importCmd) createSiteFromJekyll(jekyllRoot, targetDir string, jekyllPos
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	i.copyJekyllFilesAndFolders(jekyllRoot, filepath.Join(targetDir, "static"), jekyllPostDirs)
 | 
						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{} {
 | 
					func (i *importCmd) loadJekyllConfig(fs afero.Fs, jekyllRoot string) map[string]interface{} {
 | 
				
			||||||
@@ -375,7 +375,7 @@ func parseJekyllFilename(filename string) (time.Time, string, error) {
 | 
				
			|||||||
	return postDate, postName, nil
 | 
						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)
 | 
						jww.TRACE.Println("Converting", path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	filename := filepath.Base(path)
 | 
						filename := filepath.Base(path)
 | 
				
			||||||
@@ -409,7 +409,11 @@ func convertJekyllPost(s *hugolib.Site, path, relPath, targetDir string, draft b
 | 
				
			|||||||
		return err
 | 
							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
 | 
						fs := hugofs.Os
 | 
				
			||||||
	if err := helpers.WriteToDisk(targetFile, strings.NewReader(content), fs); err != nil {
 | 
						if err := helpers.WriteToDisk(targetFile, strings.NewReader(content), fs); err != nil {
 | 
				
			||||||
@@ -471,7 +475,7 @@ func convertJekyllMetaData(m interface{}, postName string, postDate time.Time, d
 | 
				
			|||||||
	return metadata, nil
 | 
						return metadata, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func convertJekyllContent(m interface{}, content string) string {
 | 
					func convertJekyllContent(m interface{}, content string) (string, error) {
 | 
				
			||||||
	metadata, _ := maps.ToStringMapE(m)
 | 
						metadata, _ := maps.ToStringMapE(m)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	lines := strings.Split(content, "\n")
 | 
						lines := strings.Split(content, "\n")
 | 
				
			||||||
@@ -515,7 +519,16 @@ func convertJekyllContent(m interface{}, content string) string {
 | 
				
			|||||||
		content = replace.re.ReplaceAllStringFunc(content, replace.replace)
 | 
							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 {
 | 
					func replaceHighlightTag(match string) string {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -91,11 +91,12 @@ func TestConvertJekyllContent(t *testing.T) {
 | 
				
			|||||||
		expect   string
 | 
							expect   string
 | 
				
			||||||
	}{
 | 
						}{
 | 
				
			||||||
		{map[interface{}]interface{}{},
 | 
							{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{}{},
 | 
							{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-->"},
 | 
							{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 %}text{% endraw %}", "text"},
 | 
				
			||||||
		{map[interface{}]interface{}{}, "{%raw%} text2 {%endraw %}", "text2"},
 | 
							{map[interface{}]interface{}{}, "{%raw%} text2 {%endraw %}", "text2"},
 | 
				
			||||||
		{map[interface{}]interface{}{},
 | 
							{map[interface{}]interface{}{},
 | 
				
			||||||
@@ -124,10 +125,13 @@ func TestConvertJekyllContent(t *testing.T) {
 | 
				
			|||||||
		{map[interface{}]interface{}{},
 | 
							{map[interface{}]interface{}{},
 | 
				
			||||||
			"{% img right /placekitten/300/500 'Place Kitten #4' 'An image of a very cute kitten' %}",
 | 
								"{% 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\" >}}"},
 | 
								"{{< 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 {
 | 
						for _, data := range testDataList {
 | 
				
			||||||
		result := convertJekyllContent(data.metadata, data.content)
 | 
							result, err := convertJekyllContent(data.metadata, data.content)
 | 
				
			||||||
		c.Assert(data.expect, qt.Equals, result)
 | 
							c.Assert(result, qt.Equals, data.expect)
 | 
				
			||||||
 | 
							c.Assert(err, qt.IsNil)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user