From 2182ecfd34a24521bf0e3c939627a55327eb1e19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sat, 11 Aug 2018 16:37:00 +0200 Subject: [PATCH] hugolib: Fix GitInfo when multiple content dirs Fixes #5054 --- hugolib/gitinfo.go | 22 ++++++---------------- hugolib/page_test.go | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/hugolib/gitinfo.go b/hugolib/gitinfo.go index affa9cea8..d356fcf07 100644 --- a/hugolib/gitinfo.go +++ b/hugolib/gitinfo.go @@ -14,13 +14,11 @@ package hugolib import ( - "path" "path/filepath" "strings" "github.com/bep/gitmap" "github.com/gohugoio/hugo/config" - "github.com/gohugoio/hugo/helpers" ) type gitInfo struct { @@ -32,28 +30,20 @@ func (g *gitInfo) forPage(p *Page) (*gitmap.GitInfo, bool) { if g == nil { return nil, false } - name := path.Join(g.contentDir, filepath.ToSlash(p.Path())) + + name := strings.TrimPrefix(filepath.ToSlash(p.Filename()), g.contentDir) + name = strings.TrimPrefix(name, "/") + return g.repo.Files[name], true } func newGitInfo(cfg config.Provider) (*gitInfo, error) { - var ( - workingDir = cfg.GetString("workingDir") - contentDir = cfg.GetString("contentDir") - ) + workingDir := cfg.GetString("workingDir") gitRepo, err := gitmap.Map(workingDir, "") if err != nil { return nil, err } - repoPath := filepath.FromSlash(gitRepo.TopLevelAbsPath) - // The Hugo site may be placed in a sub folder in the Git repo, - // one example being the Hugo docs. - // We have to find the root folder to the Hugo site below the Git root. - contentRoot := strings.TrimPrefix(workingDir, repoPath) - contentRoot = strings.TrimPrefix(contentRoot, helpers.FilePathSeparator) - contentDir = path.Join(filepath.ToSlash(contentRoot), contentDir) - - return &gitInfo{contentDir: contentDir, repo: gitRepo}, nil + return &gitInfo{contentDir: gitRepo.TopLevelAbsPath, repo: gitRepo}, nil } diff --git a/hugolib/page_test.go b/hugolib/page_test.go index b512a9a5a..adf4294fc 100644 --- a/hugolib/page_test.go +++ b/hugolib/page_test.go @@ -921,21 +921,50 @@ func TestPageWithLastmodFromGitInfo(t *testing.T) { cfg.Set("frontmatter", map[string]interface{}{ "lastmod": []string{":git", "lastmod"}, }) + cfg.Set("defaultContentLanguage", "en") + langConfig := map[string]interface{}{ + "en": map[string]interface{}{ + "weight": 1, + "languageName": "English", + "contentDir": "content", + }, + "nn": map[string]interface{}{ + "weight": 2, + "languageName": "Nynorsk", + "contentDir": "content_nn", + }, + } + + cfg.Set("languages", langConfig) cfg.Set("enableGitInfo", true) assrt.NoError(loadDefaultSettingsFor(cfg)) + assrt.NoError(loadLanguageSettings(cfg, nil)) wd, err := os.Getwd() assrt.NoError(err) cfg.Set("workingDir", filepath.Join(wd, "testsite")) - s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg}, BuildCfg{SkipRender: true}) + h, err := NewHugoSites(deps.DepsCfg{Fs: fs, Cfg: cfg}) - assrt.Len(s.RegularPages, 1) + assrt.NoError(err) + assrt.Len(h.Sites, 2) + + require.NoError(t, h.Build(BuildCfg{SkipRender: true})) + + enSite := h.Sites[0] + assrt.Len(enSite.RegularPages, 1) // 2018-03-11 is the Git author date for testsite/content/first-post.md - assrt.Equal("2018-03-11", s.RegularPages[0].Lastmod.Format("2006-01-02")) + assrt.Equal("2018-03-11", enSite.RegularPages[0].Lastmod.Format("2006-01-02")) + + nnSite := h.Sites[1] + assrt.Len(nnSite.RegularPages, 1) + + // 2018-08-11 is the Git author date for testsite/content_nn/first-post.md + assrt.Equal("2018-08-11", nnSite.RegularPages[0].Lastmod.Format("2006-01-02")) + } func TestPageWithFrontMatterConfig(t *testing.T) {