@@ -11,10 +11,11 @@ use serde::Serialize;
1111
1212use std:: collections:: BTreeMap ;
1313use std:: env;
14- use std:: fs;
14+ use std:: fs:: { self , File } ;
1515use std:: io:: { self , Read , Write } ;
1616use std:: path:: { PathBuf , Path } ;
1717use std:: process:: { Command , Stdio } ;
18+ use std:: collections:: HashMap ;
1819
1920static HOSTS : & [ & str ] = & [
2021 "aarch64-unknown-linux-gnu" ,
@@ -366,6 +367,7 @@ impl Builder {
366367 self . lldb_git_commit_hash = self . git_commit_hash ( "lldb" , "x86_64-unknown-linux-gnu" ) ;
367368 self . miri_git_commit_hash = self . git_commit_hash ( "miri" , "x86_64-unknown-linux-gnu" ) ;
368369
370+ self . check_toolstate ( ) ;
369371 self . digest_and_sign ( ) ;
370372 let manifest = self . build_manifest ( ) ;
371373 self . write_channel_files ( & self . rust_release , & manifest) ;
@@ -375,6 +377,25 @@ impl Builder {
375377 }
376378 }
377379
380+ /// If a tool does not pass its tests, don't ship it.
381+ /// Right now, we do this only for Miri.
382+ fn check_toolstate ( & mut self ) {
383+ let toolstates: Option < HashMap < String , String > > =
384+ File :: open ( self . input . join ( "toolstates-linux.json" ) ) . ok ( )
385+ . and_then ( |f| serde_json:: from_reader ( & f) . ok ( ) ) ;
386+ let toolstates = toolstates. unwrap_or_else ( || {
387+ println ! ( "WARNING: `toolstates-linux.json` missing/malformed; \
388+ assuming all tools failed") ;
389+ HashMap :: default ( ) // Use empty map if anything went wrong.
390+ } ) ;
391+ // Mark some tools as missing based on toolstate.
392+ if toolstates. get ( "miri" ) . map ( |s| & * s as & str ) != Some ( "test-pass" ) {
393+ println ! ( "Miri tests are not passing, removing component" ) ;
394+ self . miri_version = None ;
395+ self . miri_git_commit_hash = None ;
396+ }
397+ }
398+
378399 /// Hash all files, compute their signatures, and collect the hashes in `self.digests`.
379400 fn digest_and_sign ( & mut self ) {
380401 for file in t ! ( self . input. read_dir( ) ) . map ( |e| t ! ( e) . path ( ) ) {
0 commit comments