force "HEAD" for non-CI and git_upstream_merge_base for CI environment

When rust-lang/rust is configured as remote, some of the git
logic (for tracking changed files) that uses get_closest_merge_commit
starts to produce annoying results as the upstream branch becomes outdated
quickly (since it isn't updated with git pull). We can rely on HEAD for
non-CI environments as we specifically treat bors commits as merge commits,
which also exist on upstream. As for CI environments, we should use
`git_upstream_merge_base` to correctly track modified files as bors commits
may be in `HEAD` but not yet on the upstream remote.

Signed-off-by: onur-ozkan <work@onurozkan.dev>
This commit is contained in:
onur-ozkan 2024-10-10 09:38:57 +03:00
parent 11ee3a830b
commit 33ac202904

View File

@ -1,6 +1,8 @@
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::process::{Command, Stdio}; use std::process::{Command, Stdio};
use crate::ci::CiEnv;
pub struct GitConfig<'a> { pub struct GitConfig<'a> {
pub git_repository: &'a str, pub git_repository: &'a str,
pub nightly_branch: &'a str, pub nightly_branch: &'a str,
@ -114,8 +116,8 @@ fn git_upstream_merge_base(
/// Searches for the nearest merge commit in the repository that also exists upstream. /// Searches for the nearest merge commit in the repository that also exists upstream.
/// ///
/// If it fails to find the upstream remote, it then looks for the most recent commit made /// It looks for the most recent commit made by the merge bot by matching the author's email
/// by the merge bot by matching the author's email address with the merge bot's email. /// address with the merge bot's email.
pub fn get_closest_merge_commit( pub fn get_closest_merge_commit(
git_dir: Option<&Path>, git_dir: Option<&Path>,
config: &GitConfig<'_>, config: &GitConfig<'_>,
@ -127,7 +129,15 @@ pub fn get_closest_merge_commit(
git.current_dir(git_dir); git.current_dir(git_dir);
} }
let merge_base = git_upstream_merge_base(config, git_dir).unwrap_or_else(|_| "HEAD".into()); let merge_base = {
if CiEnv::is_ci() {
git_upstream_merge_base(config, git_dir).unwrap()
} else {
// For non-CI environments, ignore rust-lang/rust upstream as it usually gets
// outdated very quickly.
"HEAD".to_string()
}
};
git.args([ git.args([
"rev-list", "rev-list",