Skip to content

Commit 0ee9456

Browse files
committed
fix download-llvm logic for subtree sync branches
1 parent 9c67cec commit 0ee9456

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

src/build_helper/src/git.rs

+9-1
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ pub fn get_closest_merge_commit(
140140
// cd \"/checkout\" && \"git\" \"merge-base\" \"origin/master\" \"HEAD\"\nexpected success, got: exit status: 1\n"
141141
// ```
142142
// Investigate and resolve this issue instead of skipping it like this.
143+
// NOTE (2025-03): this is probably caused by CI using a sparse checkout.
143144
(channel == "nightly" || !CiEnv::is_rust_lang_managed_ci_job())
144145
{
145146
git_upstream_merge_base(config, git_dir).unwrap()
@@ -150,11 +151,18 @@ pub fn get_closest_merge_commit(
150151
}
151152
};
152153

154+
// Now that rust-lang/rust is the only repo using bors, we can search the entire
155+
// history for a bors commit, not just "first parents". This is crucial to make
156+
// this logic work when the user has currently checked out a subtree sync branch.
157+
// At the same time, we use this logic in CI where only a tiny part of the history
158+
// is even checked out, making this kind of history search very fragile. It turns
159+
// out that by adding `--diff-merges=first-parent`, we get a usable reply
160+
// even for sparse checkouts: it will just return the most recent bors commit.
153161
git.args([
154162
"rev-list",
155163
&format!("--author={}", config.git_merge_commit_email),
156164
"-n1",
157-
"--first-parent",
165+
"--diff-merges=first-parent",
158166
&merge_base,
159167
]);
160168

0 commit comments

Comments
 (0)