mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-30 00:03:34 -05:00
parent
37fb2d43e5
commit
5ef52294f9
2 changed files with 49 additions and 1 deletions
|
@ -14,10 +14,12 @@
|
||||||
package hugolib
|
package hugolib
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/spf13/cast"
|
|
||||||
"html/template"
|
"html/template"
|
||||||
"sync"
|
"sync"
|
||||||
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/spf13/cast"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Node struct {
|
type Node struct {
|
||||||
|
@ -37,6 +39,24 @@ type Node struct {
|
||||||
paginator *Pager
|
paginator *Pager
|
||||||
paginatorInit sync.Once
|
paginatorInit sync.Once
|
||||||
scratch *Scratch
|
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 {
|
func (n *Node) Now() time.Time {
|
||||||
|
|
|
@ -14,8 +14,11 @@
|
||||||
package hugolib
|
package hugolib
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNodeSimpleMethods(t *testing.T) {
|
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