1
1
use std:: collections:: HashMap ;
2
- use std:: io:: Write ;
2
+ use std:: fs:: { self , File } ;
3
+ use std:: io:: { BufWriter , Write } ;
3
4
use std:: path:: PathBuf ;
4
5
use std:: sync:: mpsc:: channel;
5
6
use std:: sync:: { Arc , RwLock } ;
@@ -14,7 +15,7 @@ use rari_doc::utils::TEMPL_RECORDER_SENDER;
14
15
use rari_doc:: walker:: read_docs_parallel;
15
16
use rari_tools:: history:: gather_history;
16
17
use rari_tools:: popularities:: update_popularities;
17
- use rari_types:: globals:: SETTINGS ;
18
+ use rari_types:: globals:: { build_out_root , SETTINGS } ;
18
19
use rari_types:: settings:: Settings ;
19
20
use tabwriter:: TabWriter ;
20
21
use tracing_log:: AsTrace ;
@@ -69,6 +70,8 @@ struct BuildArgs {
69
70
#[ arg( long) ]
70
71
skip_curriculum : bool ,
71
72
#[ arg( long) ]
73
+ skip_sitemap : bool ,
74
+ #[ arg( long) ]
72
75
templ_stats : bool ,
73
76
}
74
77
@@ -163,21 +166,36 @@ fn main() -> Result<(), anyhow::Error> {
163
166
)
164
167
. unwrap ( ) ;
165
168
}
166
- println ! ( "Took: {:?} for {}" , start. elapsed( ) , docs. len( ) ) ;
169
+ println ! ( "Took: {: >10.3?} for {}" , start. elapsed( ) , docs. len( ) ) ;
170
+ let mut urls = Vec :: new ( ) ;
167
171
if !args. skip_content {
168
172
let start = std:: time:: Instant :: now ( ) ;
169
- build_docs ( docs) ?;
170
- println ! ( "Took: {:?} to build content" , start. elapsed( ) ) ;
173
+ urls . extend ( build_docs ( & docs) ?) ;
174
+ println ! ( "Took: {: >10.3 ?} to build content" , start. elapsed( ) ) ;
171
175
}
172
176
if !args. skip_curriculum && args. files . is_empty ( ) {
173
177
let start = std:: time:: Instant :: now ( ) ;
174
- build_curriculum_pages ( ) ?;
175
- println ! ( "Took: {:?} to build curriculum" , start. elapsed( ) ) ;
178
+ urls . extend ( build_curriculum_pages ( ) ?) ;
179
+ println ! ( "Took: {: >10.3 ?} to build curriculum" , start. elapsed( ) ) ;
176
180
}
177
181
if !args. skip_blog && args. files . is_empty ( ) {
178
182
let start = std:: time:: Instant :: now ( ) ;
179
- build_blog_pages ( ) ?;
180
- println ! ( "Took: {:?} to build blog" , start. elapsed( ) ) ;
183
+ urls. extend ( build_blog_pages ( ) ?) ;
184
+ println ! ( "Took: {: >10.3?} to build blog" , start. elapsed( ) ) ;
185
+ }
186
+ if !args. skip_sitemap && args. files . is_empty ( ) && !urls. is_empty ( ) {
187
+ let start = std:: time:: Instant :: now ( ) ;
188
+ let out_path = build_out_root ( ) ?;
189
+ fs:: create_dir_all ( out_path) . unwrap ( ) ;
190
+ let out_file = out_path. join ( "sitemap.txt" ) ;
191
+ let file = File :: create ( out_file) . unwrap ( ) ;
192
+ let mut buffed = BufWriter :: new ( file) ;
193
+ urls. sort ( ) ;
194
+ for url in urls {
195
+ buffed. write_all ( url. as_bytes ( ) ) ?;
196
+ buffed. write_all ( b"\n " ) ?;
197
+ }
198
+ println ! ( "Took: {: >10.3?} to write sitemap.txt" , start. elapsed( ) ) ;
181
199
}
182
200
if let Some ( ( recorder_handler, tx) ) = templ_stats {
183
201
tx. send ( "∞" . to_string ( ) ) ?;
0 commit comments