@@ -1665,10 +1665,26 @@ impl Config {
16651665 let mut debuginfo_level_tools = None ;
16661666 let mut debuginfo_level_tests = None ;
16671667 let mut optimize = None ;
1668- let mut omit_git_hash = None ;
16691668 let mut lld_enabled = None ;
16701669 let mut std_features = None ;
16711670
1671+ let default = config. channel == "dev" ;
1672+ config. omit_git_hash = toml. rust . as_ref ( ) . and_then ( |r| r. omit_git_hash ) . unwrap_or ( default) ;
1673+
1674+ config. rust_info = GitInfo :: new ( config. omit_git_hash , & config. src ) ;
1675+ config. cargo_info = GitInfo :: new ( config. omit_git_hash , & config. src . join ( "src/tools/cargo" ) ) ;
1676+ config. rust_analyzer_info =
1677+ GitInfo :: new ( config. omit_git_hash , & config. src . join ( "src/tools/rust-analyzer" ) ) ;
1678+ config. clippy_info =
1679+ GitInfo :: new ( config. omit_git_hash , & config. src . join ( "src/tools/clippy" ) ) ;
1680+ config. miri_info = GitInfo :: new ( config. omit_git_hash , & config. src . join ( "src/tools/miri" ) ) ;
1681+ config. rustfmt_info =
1682+ GitInfo :: new ( config. omit_git_hash , & config. src . join ( "src/tools/rustfmt" ) ) ;
1683+ config. enzyme_info =
1684+ GitInfo :: new ( config. omit_git_hash , & config. src . join ( "src/tools/enzyme" ) ) ;
1685+ config. in_tree_llvm_info = GitInfo :: new ( false , & config. src . join ( "src/llvm-project" ) ) ;
1686+ config. in_tree_gcc_info = GitInfo :: new ( false , & config. src . join ( "src/gcc" ) ) ;
1687+
16721688 let mut is_user_configured_rust_channel = false ;
16731689
16741690 if let Some ( rust) = toml. rust {
@@ -1699,7 +1715,7 @@ impl Config {
16991715 verbose_tests,
17001716 optimize_tests,
17011717 codegen_tests,
1702- omit_git_hash : omit_git_hash_toml ,
1718+ omit_git_hash : _ , // already handled above
17031719 dist_src,
17041720 save_toolstates,
17051721 codegen_backends,
@@ -1750,7 +1766,6 @@ impl Config {
17501766 std_features = std_features_toml;
17511767
17521768 optimize = optimize_toml;
1753- omit_git_hash = omit_git_hash_toml;
17541769 config. rust_new_symbol_mangling = new_symbol_mangling;
17551770 set ( & mut config. rust_optimize_tests , optimize_tests) ;
17561771 set ( & mut config. codegen_tests , codegen_tests) ;
@@ -1826,24 +1841,6 @@ impl Config {
18261841
18271842 config. reproducible_artifacts = flags. reproducible_artifact ;
18281843
1829- // rust_info must be set before is_ci_llvm_available() is called.
1830- let default = config. channel == "dev" ;
1831- config. omit_git_hash = omit_git_hash. unwrap_or ( default) ;
1832- config. rust_info = GitInfo :: new ( config. omit_git_hash , & config. src ) ;
1833-
1834- config. cargo_info = GitInfo :: new ( config. omit_git_hash , & config. src . join ( "src/tools/cargo" ) ) ;
1835- config. rust_analyzer_info =
1836- GitInfo :: new ( config. omit_git_hash , & config. src . join ( "src/tools/rust-analyzer" ) ) ;
1837- config. clippy_info =
1838- GitInfo :: new ( config. omit_git_hash , & config. src . join ( "src/tools/clippy" ) ) ;
1839- config. miri_info = GitInfo :: new ( config. omit_git_hash , & config. src . join ( "src/tools/miri" ) ) ;
1840- config. rustfmt_info =
1841- GitInfo :: new ( config. omit_git_hash , & config. src . join ( "src/tools/rustfmt" ) ) ;
1842- config. enzyme_info =
1843- GitInfo :: new ( config. omit_git_hash , & config. src . join ( "src/tools/enzyme" ) ) ;
1844- config. in_tree_llvm_info = GitInfo :: new ( false , & config. src . join ( "src/llvm-project" ) ) ;
1845- config. in_tree_gcc_info = GitInfo :: new ( false , & config. src . join ( "src/gcc" ) ) ;
1846-
18471844 // We need to override `rust.channel` if it's manually specified when using the CI rustc.
18481845 // This is because if the compiler uses a different channel than the one specified in config.toml,
18491846 // tests may fail due to using a different channel than the one used by the compiler during tests.
@@ -2760,9 +2757,19 @@ impl Config {
27602757
27612758 // If `download-rustc` is not set, default to rebuilding.
27622759 let if_unchanged = match download_rustc {
2763- None | Some ( StringOrBool :: Bool ( false ) ) => return None ,
2760+ None => self . rust_info . is_managed_git_subrepository ( ) ,
2761+ Some ( StringOrBool :: Bool ( false ) ) => return None ,
27642762 Some ( StringOrBool :: Bool ( true ) ) => false ,
2765- Some ( StringOrBool :: String ( s) ) if s == "if-unchanged" => true ,
2763+ Some ( StringOrBool :: String ( s) ) if s == "if-unchanged" => {
2764+ if !self . rust_info . is_managed_git_subrepository ( ) {
2765+ println ! (
2766+ "ERROR: `download-rustc=if-unchanged` is only compatible with Git managed sources."
2767+ ) ;
2768+ crate :: exit!( 1 ) ;
2769+ }
2770+
2771+ true
2772+ }
27662773 Some ( StringOrBool :: String ( other) ) => {
27672774 panic ! ( "unrecognized option for download-rustc: {other}" )
27682775 }
@@ -2789,7 +2796,7 @@ impl Config {
27892796 }
27902797 println ! ( "ERROR: could not find commit hash for downloading rustc" ) ;
27912798 println ! ( "HELP: maybe your repository history is too shallow?" ) ;
2792- println ! ( "HELP: consider disabling ` download-rustc` " ) ;
2799+ println ! ( "HELP: consider setting `rust. download-rustc=false` in config.toml " ) ;
27932800 println ! ( "HELP: or fetch enough history to include one upstream commit" ) ;
27942801 crate :: exit!( 1 ) ;
27952802 }
0 commit comments