diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-04-02 10:52:43 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-04-02 16:10:13 +0200 |
commit | e91e222cd21213961d1e6206e1523bee2c21fa0c (patch) | |
tree | 5e97ed5b92fe54e6ea94bac3caa1cdd24e5631fd /resources/page/pages.go | |
parent | 5185fb065b0f8a4142c29ee3e3cd917e917280a4 (diff) |
resources/page: Implement compare.ProbablyEqer for the core slices
Fixes #5808
Diffstat (limited to 'resources/page/pages.go')
-rw-r--r-- | resources/page/pages.go | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/resources/page/pages.go b/resources/page/pages.go index 1f79932a9..ccfecdf2b 100644 --- a/resources/page/pages.go +++ b/resources/page/pages.go @@ -17,11 +17,14 @@ import ( "fmt" "math/rand" + "github.com/gohugoio/hugo/compare" + "github.com/gohugoio/hugo/resources/resource" ) var ( _ resource.ResourcesConverter = Pages{} + _ compare.ProbablyEqer = Pages{} ) // Pages is a slice of pages. This is the most common list type in Hugo. @@ -95,6 +98,33 @@ func (p Pages) Len() int { return len(p) } +// ProbablyEq wraps comare.ProbablyEqer +func (pages Pages) ProbablyEq(other interface{}) bool { + otherPages, ok := other.(Pages) + if !ok { + return false + } + + if len(pages) != len(otherPages) { + return false + } + + step := 1 + + for i := 0; i < len(pages); i += step { + if !pages[i].Eq(otherPages[i]) { + return false + } + + if i > 50 { + // This is most likely the same. + step = 50 + } + } + + return true +} + func (ps Pages) removeFirstIfFound(p Page) Pages { ii := -1 for i, pp := range ps { |