hugolib: Avoid scanning entire site to find the home
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 25 Feb 2018 09:50:44 +0000 (10:50 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 25 Feb 2018 09:50:44 +0000 (10:50 +0100)
See #4447

hugolib/page_collections.go
hugolib/site_sections.go

index 3bdb4d9ce911d7042feb4d0671d6befcea0b6c36..157d4e68dea1e8799a6d1ff4600c6a6616f1ffdf 100644 (file)
@@ -152,6 +152,15 @@ func (*PageCollections) findPagesByKindIn(kind string, inPages Pages) Pages {
        return pages
 }
 
+func (*PageCollections) findFirstPageByKindIn(kind string, inPages Pages) *Page {
+       for _, p := range inPages {
+               if p.Kind == kind {
+                       return p
+               }
+       }
+       return nil
+}
+
 func (*PageCollections) findPagesByKindNotIn(kind string, inPages Pages) Pages {
        var pages Pages
        for _, p := range inPages {
index 5de350b2fce30d842ef17e5eb88b2a1b6d902893..c8bca03e3d3fa001675170471dbcfebce83acb80 100644 (file)
@@ -161,18 +161,12 @@ func (s *Site) assembleSections() Pages {
        )
 
        var (
-               home       *Page
                inPages    = radix.New().Txn()
                inSections = radix.New().Txn()
                undecided  Pages
        )
 
-       homes := s.findPagesByKind(KindHome)
-       if len(homes) == 1 {
-               home = homes[0]
-       } else if len(homes) > 1 {
-               panic("Too many homes")
-       }
+       home := s.findFirstPageByKindIn(KindHome, s.Pages)
 
        for i, p := range s.Pages {
                if p.Kind != KindPage {