@@ -48,15 +48,16 @@ type allPagesAssembler struct {
4848 r para.Runner
4949
5050 assembleChanges * WhatChanged
51- seenTerms map [term ]sitesmatrix.Vectors
52- droppedPages map [* Site ][]string // e.g. drafts, expired, future.
53- seenRootSections * maps.Cache [string , bool ]
54- seenHome bool
5551 assembleSectionsInParallel bool
5652
57- // Internal state.
5853 pwRoot * doctree.NodeShiftTreeWalker [contentNode ] // walks pages.
5954 rwRoot * doctree.NodeShiftTreeWalker [contentNode ] // walks resources.
55+
56+ // Walking state.
57+ seenTerms * maps.Map [term , sitesmatrix.Vectors ]
58+ droppedPages * maps.Map [* Site , []string ] // e.g. drafts, expired, future.
59+ seenRootSections * maps.Map [string , bool ]
60+ seenHome bool // set before we fan out to multiple goroutines.
6061}
6162
6263func newAllPagesAssembler (
@@ -74,16 +75,16 @@ func newAllPagesAssembler(
7475 pw := rw .Extend ()
7576 pw .Tree = m .treePages
7677
77- seenRootSections := maps .NewCache [string , bool ]()
78+ seenRootSections := maps .NewMap [string , bool ]()
7879 seenRootSections .Set ("" , true ) // home.
7980
8081 return & allPagesAssembler {
8182 ctx : ctx ,
8283 h : h ,
8384 m : m ,
8485 assembleChanges : assembleChanges ,
85- seenTerms : map [term ] sitesmatrix.Vectors {} ,
86- droppedPages : map [* Site ] []string {} ,
86+ seenTerms : maps . NewMap [term , sitesmatrix.Vectors ]() ,
87+ droppedPages : maps . NewMap [* Site , []string ]() ,
8788 seenRootSections : seenRootSections ,
8889 assembleSectionsInParallel : true ,
8990 pwRoot : pw ,
@@ -100,7 +101,7 @@ type sitePagesAssembler struct {
100101
101102func (a * allPagesAssembler ) createAllPages () error {
102103 defer func () {
103- for site , dropped := range a .droppedPages {
104+ for site , dropped := range a .droppedPages . All () {
104105 for _ , s := range dropped {
105106 site .pageMap .treePages .Delete (s )
106107 site .pageMap .resourceTrees .DeletePrefix (paths .AddTrailingSlash (s ))
@@ -112,16 +113,16 @@ func (a *allPagesAssembler) createAllPages() error {
112113 defer func () {
113114 if a .h .isRebuild () && a .h .previousSeenTerms != nil {
114115 // Find removed terms.
115- for t := range a .h .previousSeenTerms {
116- if _ , found := a .seenTerms [ t ] ; ! found {
116+ for t := range a .h .previousSeenTerms . All () {
117+ if _ , found := a .seenTerms . Lookup ( t ) ; ! found {
117118 // This term has been removed.
118119 a .pwRoot .Tree .Delete (t .view .pluralTreeKey )
119120 a .rwRoot .Tree .DeletePrefix (t .view .pluralTreeKey + "/" )
120121 }
121122 }
122123 // Find new terms.
123- for t := range a .seenTerms {
124- if _ , found := a .h .previousSeenTerms [ t ] ; ! found {
124+ for t := range a .seenTerms . All () {
125+ if _ , found := a .h .previousSeenTerms . Lookup ( t ) ; ! found {
125126 // This term is new.
126127 if n , ok := a .pwRoot .Tree .GetRaw (t .view .pluralTreeKey ); ok {
127128 a .assembleChanges .Add (cnh .GetIdentity (n ))
@@ -284,7 +285,12 @@ func (a *allPagesAssembler) doCreatePages(prefix string) error {
284285 (& p .m .pageConfig .Build ).Disable ()
285286 default :
286287 // Skip this page.
287- a .droppedPages [site ] = append (a .droppedPages [site ], v .Path ())
288+ a .droppedPages .WithWriteLock (
289+ func (m map [* Site ][]string ) {
290+ m [site ] = append (m [site ], s )
291+ },
292+ )
293+
288294 drop = true
289295 }
290296 }
@@ -471,13 +477,13 @@ func (a *allPagesAssembler) doCreatePages(prefix string) error {
471477 }
472478
473479 if ! isResource && s != "" && ! a .seenHome {
480+ a .seenHome = true
474481 var homePages contentNode
475482 homePages , ns , err = transformPages ("" , newHomePageMetaSource (), cascades )
476483 if err != nil {
477484 return
478485 }
479486 treePages .InsertRaw ("" , homePages )
480- a .seenHome = true
481487 }
482488
483489 n2 , ns , err = transformPages (s , n , cascades )
@@ -633,17 +639,16 @@ func (a *allPagesAssembler) doCreatePages(prefix string) error {
633639 continue
634640 }
635641 t := term {view : viewName , term : v }
636- if vectors , found := a .seenTerms [t ]; found {
637- if _ , found := vectors [vec ]; found {
638- continue
642+ a .seenTerms .WithWriteLock (func (m map [term ]sitesmatrix.Vectors ) {
643+ vectors , found := m [t ]
644+ if ! found {
645+ m [t ] = sitesmatrix.Vectors {
646+ vec : struct {}{},
647+ }
648+ return
639649 }
640650 vectors [vec ] = struct {}{}
641- } else {
642- a .seenTerms [t ] = sitesmatrix.Vectors {
643- vec : struct {}{},
644- }
645- }
646-
651+ })
647652 }
648653 }
649654 }
@@ -752,7 +757,7 @@ func (a *allPagesAssembler) doCreatePages(prefix string) error {
752757 // Create missing term pages.
753758 pw .WalkContext .HooksPost2 ().Push (
754759 func () error {
755- for k , v := range a .seenTerms {
760+ for k , v := range a .seenTerms . All () {
756761 viewTermKey := "/" + k .view .plural + "/" + k .term
757762
758763 pi := a .h .Conf .PathParser ().Parse (files .ComponentFolderContent , viewTermKey + "/_index.md" )
0 commit comments