From 27c7fdd5a67eb082d3f44747e589be48c1b1011f Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Thu, 26 Mar 2026 04:39:38 +0000 Subject: object/id: Empty tree --- object/id/algorithms.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'object/id/algorithms.go') diff --git a/object/id/algorithms.go b/object/id/algorithms.go index 404d3bbf..f3540c42 100644 --- a/object/id/algorithms.go +++ b/object/id/algorithms.go @@ -24,6 +24,7 @@ type algorithmDetails struct { packHashID uint32 sum func([]byte) ObjectID new func() hash.Hash + emptyTree ObjectID } //nolint:gochecknoglobals @@ -69,12 +70,15 @@ var ( ) func init() { //nolint:gochecknoinits + emptyTreeInput := []byte("tree 0\x00") + for algo := Algorithm(0); int(algo) < len(algorithmTable); algo++ { - info := algorithmTable[algo] + info := &algorithmTable[algo] if info.name == "" { continue } + info.emptyTree = info.sum(emptyTreeInput) algorithmByName[info.name] = algo supportedAlgorithms = append(supportedAlgorithms, algo) } @@ -135,6 +139,12 @@ func (algo Algorithm) New() (hash.Hash, error) { return newFn(), nil } +// EmptyTree returns the object ID of an empty tree ("tree 0\x00") for this +// algorithm. +func (algo Algorithm) EmptyTree() ObjectID { + return algo.info().emptyTree +} + func (algo Algorithm) info() algorithmDetails { return algorithmTable[algo] } -- cgit v1.3.1-10-gc9f91