Use exact length matching, add centralized helper, add SHA-256 test

This commit is contained in:
GDS K S 2026-04-11 22:56:57 -05:00
parent 4c43104537
commit f32c86a7f8
No known key found for this signature in database
3 changed files with 34 additions and 9 deletions

View file

@ -12,6 +12,15 @@ import (
const EmptyTreeCommitHash = "4b825dc642cb6eb9a060e54bf8d69288fbee4904"
const EmptyTreeCommitHashSHA256 = "6ef19b41225c5369f1c104d45d8d85efa9b057b53b14b4b9b939dd74decc5321"
// EmptyTreeHashForFormat returns the empty tree hash for the given object
// format ("sha1" or "sha256"). Falls back to SHA-1 for unknown formats.
func EmptyTreeHashForFormat(objectFormat string) string {
if objectFormat == "sha256" {
return EmptyTreeCommitHashSHA256
}
return EmptyTreeCommitHash
}
type CommitStatus uint8
const (
@ -129,9 +138,11 @@ func (c *Commit) ParentRefName() string {
}
// emptyTreeHash returns the empty tree object hash matching this repo's
// object format. SHA-256 repos produce 64-char hashes; SHA-1 repos 40-char.
// object format. This is only called when IsFirstCommit() is true, so the
// commit comes from git log with a full-length hash (40 for SHA-1, 64 for
// SHA-256).
func (c *Commit) emptyTreeHash() string {
if len(c.Hash()) > 40 {
if len(c.Hash()) == len(EmptyTreeCommitHashSHA256) {
return EmptyTreeCommitHashSHA256
}
return EmptyTreeCommitHash

View file

@ -32,9 +32,10 @@ type Pipe struct {
}
var (
highlightStyle = style.FgLightWhite.SetBold()
EmptyTreeCommitHash = models.EmptyTreeCommitHash
StartCommitHash = "START"
highlightStyle = style.FgLightWhite.SetBold()
EmptyTreeCommitHash = models.EmptyTreeCommitHash
EmptyTreeCommitHashSHA256 = models.EmptyTreeCommitHashSHA256
StartCommitHash = "START"
)
func (self Pipe) left() int16 {
@ -142,11 +143,11 @@ func getNextPipes(prevPipes []Pipe, commit *models.Commit, getStyle func(c *mode
var toHash *string
if commit.IsFirstCommit() {
emptyHash := EmptyTreeCommitHash
if len(commit.Hash()) > 40 {
emptyHash = models.EmptyTreeCommitHashSHA256
if len(commit.Hash()) == len(EmptyTreeCommitHashSHA256) {
toHash = &EmptyTreeCommitHashSHA256
} else {
toHash = &EmptyTreeCommitHash
}
toHash = &emptyHash
} else {
toHash = commit.ParentPtrs()[0]
}

View file

@ -531,6 +531,19 @@ func TestGetNextPipes(t *testing.T) {
{fromPos: 1, toPos: 1, fromHash: pool("root"), toHash: pool(models.EmptyTreeCommitHash), kind: STARTS, style: &style.FgDefault},
},
},
// SHA-256 repo: first commit with a 64-char hash should use the SHA-256 empty tree hash
{
prevPipes: []Pipe{
{fromPos: 0, toPos: 0, fromHash: pool("a"), toHash: pool("ba741fcd02b3cd42187ee46d4bdbfed10bf8fdbb15ccf739cb9ce583aefe5cae"), kind: TERMINATES, style: &style.FgDefault},
},
commit: models.NewCommit(hashPool, models.NewCommitOpts{
Hash: "ba741fcd02b3cd42187ee46d4bdbfed10bf8fdbb15ccf739cb9ce583aefe5cae",
Parents: []string{},
}),
expected: []Pipe{
{fromPos: 1, toPos: 1, fromHash: pool("ba741fcd02b3cd42187ee46d4bdbfed10bf8fdbb15ccf739cb9ce583aefe5cae"), toHash: pool(models.EmptyTreeCommitHashSHA256), kind: STARTS, style: &style.FgDefault},
},
},
}
oldColorLevel := color.ForceSetColorLevel(terminfo.ColorLevelMillions)