@@ -1665,10 +1665,26 @@ impl Config {
1665
1665
let mut debuginfo_level_tools = None ;
1666
1666
let mut debuginfo_level_tests = None ;
1667
1667
let mut optimize = None ;
1668
- let mut omit_git_hash = None ;
1669
1668
let mut lld_enabled = None ;
1670
1669
let mut std_features = None ;
1671
1670
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
+
1672
1688
let mut is_user_configured_rust_channel = false ;
1673
1689
1674
1690
if let Some ( rust) = toml. rust {
@@ -1699,7 +1715,7 @@ impl Config {
1699
1715
verbose_tests,
1700
1716
optimize_tests,
1701
1717
codegen_tests,
1702
- omit_git_hash : omit_git_hash_toml ,
1718
+ omit_git_hash : _ , // already handled above
1703
1719
dist_src,
1704
1720
save_toolstates,
1705
1721
codegen_backends,
@@ -1750,7 +1766,6 @@ impl Config {
1750
1766
std_features = std_features_toml;
1751
1767
1752
1768
optimize = optimize_toml;
1753
- omit_git_hash = omit_git_hash_toml;
1754
1769
config. rust_new_symbol_mangling = new_symbol_mangling;
1755
1770
set ( & mut config. rust_optimize_tests , optimize_tests) ;
1756
1771
set ( & mut config. codegen_tests , codegen_tests) ;
@@ -1826,24 +1841,6 @@ impl Config {
1826
1841
1827
1842
config. reproducible_artifacts = flags. reproducible_artifact ;
1828
1843
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
-
1847
1844
// We need to override `rust.channel` if it's manually specified when using the CI rustc.
1848
1845
// This is because if the compiler uses a different channel than the one specified in config.toml,
1849
1846
// tests may fail due to using a different channel than the one used by the compiler during tests.
@@ -2760,9 +2757,19 @@ impl Config {
2760
2757
2761
2758
// If `download-rustc` is not set, default to rebuilding.
2762
2759
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 ,
2764
2762
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
+ }
2766
2773
Some ( StringOrBool :: String ( other) ) => {
2767
2774
panic ! ( "unrecognized option for download-rustc: {other}" )
2768
2775
}
@@ -2789,7 +2796,7 @@ impl Config {
2789
2796
}
2790
2797
println ! ( "ERROR: could not find commit hash for downloading rustc" ) ;
2791
2798
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 " ) ;
2793
2800
println ! ( "HELP: or fetch enough history to include one upstream commit" ) ;
2794
2801
crate :: exit!( 1 ) ;
2795
2802
}
0 commit comments