Right now, download-rustc picks a commit to download as follows:
- Choose the last commit authored by bors as the commit we are comparing to:
|
let merge_base = output( |
|
self.git() |
|
.arg("rev-list") |
|
.arg(format!("--author={}", self.stage0_metadata.config.git_merge_commit_email)) |
|
.args(&["-n1", "--first-parent", "HEAD"]), |
|
); |
|
let commit = merge_base.trim_end(); |
- Check if there are changes to
compiler/ since that commit:
|
// Warn if there were changes to the compiler or standard library since the ancestor commit. |
|
let has_changes = !t!(self |
|
.git() |
|
.args(&["diff-index", "--quiet", &commit, "--", &compiler, &library]) |
|
.status()) |
|
.success(); |
This is slightly different than how download-ci-llvm works:
- Choose the last commit author by bors that modified src/llvm-project:
|
let llvm_sha = if is_git { |
|
let mut rev_list = config.git(); |
|
rev_list.args(&[ |
|
PathBuf::from("rev-list"), |
|
format!("--author={}", config.stage0_metadata.config.git_merge_commit_email).into(), |
|
"-n1".into(), |
|
"--first-parent".into(), |
|
"HEAD".into(), |
|
"--".into(), |
|
config.src.join("src/llvm-project"), |
|
config.src.join("src/bootstrap/download-ci-llvm-stamp"), |
|
// the LLVM shared object file is named `LLVM-12-rust-{version}-nightly` |
|
config.src.join("src/version"), |
|
]); |
|
output(&mut rev_list).trim().to_owned() |
This results in some differences in the commit we pick. In particular, download-rustc always chooses the most recent commit authored by bors, even if that commit didn't modify compiler/:
; git log --author=bors -n1 --first-parent 2d0aa57684e10f7b3d3fe740ee18d431181583ad -c --stat --oneline
2d0aa57684e Auto merge of #112645 - Kobzol:ci-mingw-merge, r=pietroalbini
.github/workflows/ci.yml | 22 ++++------------------
src/bootstrap/mk/Makefile.in | 14 ++++++--------
src/ci/github-actions/ci.yml | 30 ++++--------------------------
So we download both more and less often than we need to: more often because we always download the latest bors commit, less often because we only consider compiler/ and library/, so if someone has modified the way bootstrap builds rustc locally, we won't notice.
In #112143 (comment) I tried this changing this approach, but it didn't actually work, because --author interacts strangely with -- compiler/ when used with rollups:
; git log -n1 --author=bors f217411bacbe943ead9dfca93a91dff0753c2a96 -c --stat --oneline
f217411bacb Auto merge of #112774 - compiler-errors:rollup-z8oof6r, r=compiler-errors
compiler/rustc_hir_typeck/src/demand.rs | 7 +--
compiler/rustc_hir_typeck/src/method/confirm.rs | 26 +++++++-
compiler/rustc_hir_typeck/src/method/mod.rs | 21 +++++++
compiler/rustc_mir_build/src/thir/pattern/const_to_pat.rs | 85 ++++++++------------------
compiler/rustc_resolve/src/imports.rs | 93 +++++++++++++----------------
src/bootstrap/mk/Makefile.in | 7 ++-
src/bootstrap/test.rs | 3 +-
src/bootstrap/util.rs | 2 -
src/ci/docker/run.sh | 2 -
src/tools/build_helper/src/ci.rs | 6 +-
tests/ui/typeck/dont-record-adjustments-when-pointing-at-arg.rs | 29 +++++++++
.../typeck/dont-record-adjustments-when-pointing-at-arg.stderr | 17 ++++++
12 files changed, 167 insertions(+), 131 deletions(-)
; git log -n1 --author=bors f217411bacbe943ead9dfca93a91dff0753c2a96 -c --stat --oneline -- compiler/
939786223f2 Auto merge of #112636 - clubby789:no-capture-array-ref, r=cjgillot
compiler/rustc_hir_typeck/src/expr_use_visitor.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
It would be nice to use the same approach for LLVM and ci-rustc, but we'd have to work around this git limitation somehow. Here is an idea i came up with that may or may not work
Details
// 1. Find the last commit that modified compiler/: CHANGE
// 2. Find the last commit authored by bors (if in CI, excluding the current commit): BORS
// 3. Confirm that CHANGE is in the history of BORS
note that if we start doing this, we'll need to introduce a download-ci-rustc-stamp file (like download-ci-llvm-stamp) in case we change the way we build rustc; otherwise we might download artifacts that wouldn't match the artifacts you'd get if you build locally.
Right now, download-rustc picks a commit to download as follows:
rust/src/bootstrap/config.rs
Lines 1921 to 1927 in 85c4ea0
compiler/since that commit:rust/src/bootstrap/config.rs
Lines 1936 to 1941 in 85c4ea0
This is slightly different than how download-ci-llvm works:
rust/src/bootstrap/llvm.rs
Lines 130 to 144 in 68d458b
This results in some differences in the commit we pick. In particular, download-rustc always chooses the most recent commit authored by bors, even if that commit didn't modify compiler/:
So we download both more and less often than we need to: more often because we always download the latest bors commit, less often because we only consider
compiler/andlibrary/, so if someone has modified the way bootstrap builds rustc locally, we won't notice.In #112143 (comment) I tried this changing this approach, but it didn't actually work, because
--authorinteracts strangely with-- compiler/when used with rollups:It would be nice to use the same approach for LLVM and ci-rustc, but we'd have to work around this git limitation somehow. Here is an idea i came up with that may or may not work
Details
note that if we start doing this, we'll need to introduce a
download-ci-rustc-stampfile (likedownload-ci-llvm-stamp) in case we change the way we build rustc; otherwise we might download artifacts that wouldn't match the artifacts you'd get if you build locally.