mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
parent
37fb2d43e5
commit
5ef52294f9
2 changed files with 49 additions and 1 deletions
|
@ -14,10 +14,12 @@
|
|||
package hugolib
|
||||
|
||||
import (
|
||||
"github.com/spf13/cast"
|
||||
"html/template"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/spf13/cast"
|
||||
)
|
||||
|
||||
type Node struct {
|
||||
|
@ -37,6 +39,24 @@ type Node struct {
|
|||
paginator *Pager
|
||||
paginatorInit sync.Once
|
||||
scratch *Scratch
|
||||
id int
|
||||
idInit sync.Once
|
||||
}
|
||||
|
||||
// This should probably be owned by Site and new ids assigned on creation,
|
||||
// but that would lead to massive changes; do it simple for now.
|
||||
var nodeIDCounter uint64
|
||||
|
||||
func nextNodeID() int {
|
||||
return int(atomic.AddUint64(&nodeIDCounter, 1))
|
||||
}
|
||||
|
||||
// ID returns an integer that identifies this Node.
|
||||
// This is unique for a given Hugo build, but must not be considered stable.
|
||||
// See UniqueID on Page for an identify that is stable for repeated builds.
|
||||
func (n *Node) ID() int {
|
||||
n.idInit.Do(func() { n.id = nextNodeID() })
|
||||
return n.id
|
||||
}
|
||||
|
||||
func (n *Node) Now() time.Time {
|
||||
|
|
|
@ -14,8 +14,11 @@
|
|||
package hugolib
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestNodeSimpleMethods(t *testing.T) {
|
||||
|
@ -38,3 +41,28 @@ func TestNodeSimpleMethods(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestNodeID(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
n1 := &Node{}
|
||||
n2 := &Node{}
|
||||
|
||||
assert.True(t, n1.ID() > 0)
|
||||
assert.Equal(t, n1.ID(), n1.ID())
|
||||
assert.True(t, n2.ID() > n1.ID())
|
||||
|
||||
var wg sync.WaitGroup
|
||||
|
||||
for i := 1; i <= 10; i++ {
|
||||
wg.Add(1)
|
||||
go func(j int) {
|
||||
for k := 0; k < 10; k++ {
|
||||
n := &Node{}
|
||||
assert.True(t, n.ID() > 0)
|
||||
}
|
||||
wg.Done()
|
||||
}(i)
|
||||
}
|
||||
wg.Wait()
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue