@@ -13,7 +13,7 @@ use std::{env, process};
1313
1414use bootstrap:: {
1515 Build , CONFIG_CHANGE_HISTORY , ChangeId , Config , Flags , Subcommand , debug,
16- find_recent_config_change_ids, human_readable_changes, t,
16+ find_recent_config_change_ids, human_readable_changes, symlink_dir , t,
1717} ;
1818#[ cfg( feature = "tracing" ) ]
1919use tracing:: instrument;
@@ -107,10 +107,21 @@ fn main() {
107107 let out_dir = config. out . clone ( ) ;
108108
109109 let tracing_enabled = is_tracing_enabled ( ) ;
110+
111+ // Prepare a directory for tracing output
112+ // Also store a symlink named "latest" to point to the latest tracing directory.
110113 let tracing_dir = out_dir. join ( "bootstrap-trace" ) . join ( std:: process:: id ( ) . to_string ( ) ) ;
114+ let latest_trace_dir = tracing_dir. parent ( ) . unwrap ( ) . join ( "latest" ) ;
111115 if tracing_enabled {
112116 let _ = std:: fs:: remove_dir_all ( & tracing_dir) ;
113117 std:: fs:: create_dir_all ( & tracing_dir) . unwrap ( ) ;
118+
119+ #[ cfg( windows) ]
120+ let _ = std:: fs:: remove_dir ( & latest_trace_dir) ;
121+ #[ cfg( not( windows) ) ]
122+ let _ = std:: fs:: remove_file ( & latest_trace_dir) ;
123+
124+ t ! ( symlink_dir( & config, & tracing_dir, & latest_trace_dir) ) ;
114125 }
115126
116127 debug ! ( "creating new build based on config" ) ;
@@ -175,7 +186,7 @@ fn main() {
175186 build. report_step_graph ( & tracing_dir) ;
176187
177188 if tracing_enabled {
178- eprintln ! ( "Tracing/profiling output has been written to {}" , tracing_dir . display( ) ) ;
189+ eprintln ! ( "Tracing/profiling output has been written to {}" , latest_trace_dir . display( ) ) ;
179190 }
180191}
181192
0 commit comments