Remove the internal GitInfo type and make Page.GitInf() return a pointer

See #5693
This commit is contained in:
Bjørn Erik Pedersen
2025-07-07 13:03:57 +02:00
parent 61e6c730dd
commit 90d397b142
10 changed files with 16 additions and 62 deletions

View File

@@ -30,14 +30,14 @@ type gitInfo struct {
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(name, "/")
gi, found := g.repo.Files[name]
if !found {
return source.GitInfo{}
return nil
}
return source.NewGitInfo(*gi)
return gi
}
func newGitInfo(d *deps.Deps) (*gitInfo, error) {

View File

@@ -230,13 +230,13 @@ func (h *HugoSites) RegularPages() page.Pages {
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 {
return source.GitInfo{}, err
return nil, err
}
if h.gitInfo == nil {
return source.GitInfo{}, nil
return nil, nil
}
return h.gitInfo.forPage(p), nil

View File

@@ -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
}

View File

@@ -86,7 +86,7 @@ type pageCommon struct {
targetPathDescriptor page.TargetPathDescriptor
// Set if feature enabled and this is in a Git repo.
gitInfo source.GitInfo
gitInfo *source.GitInfo
codeowners []string
// Positional navigation

View File

@@ -405,7 +405,7 @@ func (p *pageState) setMetaPostParams() error {
}
var gitAuthorDate time.Time
if !p.gitInfo.IsZero() {
if p.gitInfo != nil {
gitAuthorDate = p.gitInfo.AuthorDate
}

View File

@@ -135,7 +135,7 @@ type GetPageProvider interface {
// GitInfoProvider provides Git info.
type GitInfoProvider interface {
// GitInfo returns the Git info for this object.
GitInfo() source.GitInfo
GitInfo() *source.GitInfo
// CodeOwners returns the code owners for this object.
CodeOwners() []string
}

View File

@@ -178,8 +178,8 @@ func (p *nopPage) GetTerms(taxonomy string) Pages {
return nil
}
func (p *nopPage) GitInfo() source.GitInfo {
return source.GitInfo{}
func (p *nopPage) GitInfo() *source.GitInfo {
return nil
}
func (p *nopPage) CodeOwners() []string {

View File

@@ -225,8 +225,8 @@ func (p *testPage) GetInternalRelatedDocsHandler() *RelatedDocsHandler {
return relatedDocsHandler
}
func (p *testPage) GitInfo() source.GitInfo {
return source.GitInfo{}
func (p *testPage) GitInfo() *source.GitInfo {
return nil
}
func (p *testPage) CodeOwners() []string {

View File

@@ -16,7 +16,6 @@ package source
import (
"path/filepath"
"sync"
"time"
"github.com/bep/gitmap"
"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.
type GitInfo struct {
// 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 == ""
}
type GitInfo = gitmap.GitInfo

View File

@@ -221,7 +221,7 @@ disableLiveReload = true
b.AssertFileContent("public/index.html", "1\n2\n3")
}
func TestThatPageGitInfoShouldBeZero(t *testing.T) {
func TestThatPageGitInfoShouldBeNil(t *testing.T) {
t.Parallel()
files := `