mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-14 20:33:59 +02:00
Remove the internal GitInfo type and make Page.GitInf() return a pointer
See #5693
This commit is contained in:
@@ -30,14 +30,14 @@ type gitInfo struct {
|
|||||||
repo *gitmap.GitRepo
|
repo *gitmap.GitRepo
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *gitInfo) forPage(p page.Page) source.GitInfo {
|
func (g *gitInfo) forPage(p page.Page) *source.GitInfo {
|
||||||
name := strings.TrimPrefix(filepath.ToSlash(p.File().Filename()), g.contentDir)
|
name := strings.TrimPrefix(filepath.ToSlash(p.File().Filename()), g.contentDir)
|
||||||
name = strings.TrimPrefix(name, "/")
|
name = strings.TrimPrefix(name, "/")
|
||||||
gi, found := g.repo.Files[name]
|
gi, found := g.repo.Files[name]
|
||||||
if !found {
|
if !found {
|
||||||
return source.GitInfo{}
|
return nil
|
||||||
}
|
}
|
||||||
return source.NewGitInfo(*gi)
|
return gi
|
||||||
}
|
}
|
||||||
|
|
||||||
func newGitInfo(d *deps.Deps) (*gitInfo, error) {
|
func newGitInfo(d *deps.Deps) (*gitInfo, error) {
|
||||||
|
@@ -230,13 +230,13 @@ func (h *HugoSites) RegularPages() page.Pages {
|
|||||||
return v
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *HugoSites) gitInfoForPage(p page.Page) (source.GitInfo, error) {
|
func (h *HugoSites) gitInfoForPage(p page.Page) (*source.GitInfo, error) {
|
||||||
if _, err := h.init.gitInfo.Do(context.Background()); err != nil {
|
if _, err := h.init.gitInfo.Do(context.Background()); err != nil {
|
||||||
return source.GitInfo{}, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if h.gitInfo == nil {
|
if h.gitInfo == nil {
|
||||||
return source.GitInfo{}, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return h.gitInfo.forPage(p), nil
|
return h.gitInfo.forPage(p), nil
|
||||||
|
@@ -238,7 +238,7 @@ func (p *pageState) ApplyFilterToHeadings(ctx context.Context, fn func(*tableofc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *pageState) GitInfo() source.GitInfo {
|
func (p *pageState) GitInfo() *source.GitInfo {
|
||||||
return p.gitInfo
|
return p.gitInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -86,7 +86,7 @@ type pageCommon struct {
|
|||||||
targetPathDescriptor page.TargetPathDescriptor
|
targetPathDescriptor page.TargetPathDescriptor
|
||||||
|
|
||||||
// Set if feature enabled and this is in a Git repo.
|
// Set if feature enabled and this is in a Git repo.
|
||||||
gitInfo source.GitInfo
|
gitInfo *source.GitInfo
|
||||||
codeowners []string
|
codeowners []string
|
||||||
|
|
||||||
// Positional navigation
|
// Positional navigation
|
||||||
|
@@ -405,7 +405,7 @@ func (p *pageState) setMetaPostParams() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var gitAuthorDate time.Time
|
var gitAuthorDate time.Time
|
||||||
if !p.gitInfo.IsZero() {
|
if p.gitInfo != nil {
|
||||||
gitAuthorDate = p.gitInfo.AuthorDate
|
gitAuthorDate = p.gitInfo.AuthorDate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -135,7 +135,7 @@ type GetPageProvider interface {
|
|||||||
// GitInfoProvider provides Git info.
|
// GitInfoProvider provides Git info.
|
||||||
type GitInfoProvider interface {
|
type GitInfoProvider interface {
|
||||||
// GitInfo returns the Git info for this object.
|
// GitInfo returns the Git info for this object.
|
||||||
GitInfo() source.GitInfo
|
GitInfo() *source.GitInfo
|
||||||
// CodeOwners returns the code owners for this object.
|
// CodeOwners returns the code owners for this object.
|
||||||
CodeOwners() []string
|
CodeOwners() []string
|
||||||
}
|
}
|
||||||
|
@@ -178,8 +178,8 @@ func (p *nopPage) GetTerms(taxonomy string) Pages {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *nopPage) GitInfo() source.GitInfo {
|
func (p *nopPage) GitInfo() *source.GitInfo {
|
||||||
return source.GitInfo{}
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *nopPage) CodeOwners() []string {
|
func (p *nopPage) CodeOwners() []string {
|
||||||
|
@@ -225,8 +225,8 @@ func (p *testPage) GetInternalRelatedDocsHandler() *RelatedDocsHandler {
|
|||||||
return relatedDocsHandler
|
return relatedDocsHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *testPage) GitInfo() source.GitInfo {
|
func (p *testPage) GitInfo() *source.GitInfo {
|
||||||
return source.GitInfo{}
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *testPage) CodeOwners() []string {
|
func (p *testPage) CodeOwners() []string {
|
||||||
|
@@ -16,7 +16,6 @@ package source
|
|||||||
import (
|
import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/bep/gitmap"
|
"github.com/bep/gitmap"
|
||||||
"github.com/gohugoio/hugo/common/hashing"
|
"github.com/gohugoio/hugo/common/hashing"
|
||||||
@@ -154,50 +153,5 @@ func NewFileInfo(fi hugofs.FileMetaInfo) *File {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewGitInfo(info gitmap.GitInfo) GitInfo {
|
|
||||||
gi := GitInfo{
|
|
||||||
Hash: info.Hash,
|
|
||||||
AbbreviatedHash: info.AbbreviatedHash,
|
|
||||||
Subject: info.Subject,
|
|
||||||
AuthorName: info.AuthorName,
|
|
||||||
AuthorEmail: info.AuthorEmail,
|
|
||||||
AuthorDate: info.AuthorDate,
|
|
||||||
CommitDate: info.CommitDate,
|
|
||||||
Body: info.Body,
|
|
||||||
}
|
|
||||||
|
|
||||||
if info.Ancestor != nil {
|
|
||||||
anc := NewGitInfo(*info.Ancestor)
|
|
||||||
gi.Ancestor = &anc
|
|
||||||
}
|
|
||||||
|
|
||||||
return gi
|
|
||||||
}
|
|
||||||
|
|
||||||
// GitInfo provides information about a version controlled source file.
|
// GitInfo provides information about a version controlled source file.
|
||||||
type GitInfo struct {
|
type GitInfo = gitmap.GitInfo
|
||||||
// Commit hash.
|
|
||||||
Hash string `json:"hash"`
|
|
||||||
// Abbreviated commit hash.
|
|
||||||
AbbreviatedHash string `json:"abbreviatedHash"`
|
|
||||||
// The commit message's subject/title line.
|
|
||||||
Subject string `json:"subject"`
|
|
||||||
// The author name, respecting .mailmap.
|
|
||||||
AuthorName string `json:"authorName"`
|
|
||||||
// The author email address, respecting .mailmap.
|
|
||||||
AuthorEmail string `json:"authorEmail"`
|
|
||||||
// The author date.
|
|
||||||
AuthorDate time.Time `json:"authorDate"`
|
|
||||||
// The commit date.
|
|
||||||
CommitDate time.Time `json:"commitDate"`
|
|
||||||
// The commit message's body.
|
|
||||||
Body string `json:"body"`
|
|
||||||
// The file-filtered ancestor commit, if any.
|
|
||||||
Ancestor *GitInfo `json:"ancestor"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsZero returns true if the GitInfo is empty,
|
|
||||||
// meaning it will also be falsy in the Go templates.
|
|
||||||
func (g *GitInfo) IsZero() bool {
|
|
||||||
return g == nil || g.Hash == ""
|
|
||||||
}
|
|
||||||
|
@@ -221,7 +221,7 @@ disableLiveReload = true
|
|||||||
b.AssertFileContent("public/index.html", "1\n2\n3")
|
b.AssertFileContent("public/index.html", "1\n2\n3")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestThatPageGitInfoShouldBeZero(t *testing.T) {
|
func TestThatPageGitInfoShouldBeNil(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
files := `
|
files := `
|
||||||
|
Reference in New Issue
Block a user