1
Fork 0

handle the case when the change-id isn't found

When we switch back and forth between the old and recent branches,
if there was a breaking change in the bootstrap configuration in
between, we have to update the change-id in the build configuration
with each checkout, which can be exhausting. This change fixes that.

Signed-off-by: onur-ozkan <work@onurozkan.dev>
This commit is contained in:
onur-ozkan 2023-10-27 06:51:12 +03:00
parent 750c2ecd15
commit ae4d18b2da
2 changed files with 25 additions and 12 deletions

View file

@ -109,31 +109,35 @@ fn check_version(config: &Config) -> Option<String> {
} }
let latest_config_id = CONFIG_CHANGE_HISTORY.last().unwrap(); let latest_config_id = CONFIG_CHANGE_HISTORY.last().unwrap();
let suggestion = if let Some(id) = config.change_id { if let Some(id) = config.change_id {
if &id != latest_config_id { if &id != latest_config_id {
msg.push_str("WARNING: there have been changes to x.py since you last updated.\n");
let change_links: Vec<String> = find_recent_config_change_ids(id) let change_links: Vec<String> = find_recent_config_change_ids(id)
.iter() .iter()
.map(|id| format!("https://github.com/rust-lang/rust/pull/{id}")) .map(|id| format!("https://github.com/rust-lang/rust/pull/{id}"))
.collect(); .collect();
if !change_links.is_empty() { if !change_links.is_empty() {
msg.push_str("WARNING: there have been changes to x.py since you last updated.\n");
msg.push_str("To see more detail about these changes, visit the following PRs:\n"); msg.push_str("To see more detail about these changes, visit the following PRs:\n");
for link in change_links { for link in change_links {
msg.push_str(&format!(" - {link}\n")); msg.push_str(&format!(" - {link}\n"));
} }
msg.push_str("WARNING: there have been changes to x.py since you last updated.\n");
msg.push_str("note: to silence this warning, ");
msg.push_str(&format!(
"update `config.toml` to use `change-id = {latest_config_id}` instead"
));
} }
msg.push_str("WARNING: there have been changes to x.py since you last updated.\n");
format!("update `config.toml` to use `change-id = {latest_config_id}` instead")
} else { } else {
return None; return None;
} }
} else { } else {
msg.push_str("WARNING: The `change-id` is missing in the `config.toml`. This means that you will not be able to track the major changes made to the bootstrap configurations.\n"); msg.push_str("WARNING: The `change-id` is missing in the `config.toml`. This means that you will not be able to track the major changes made to the bootstrap configurations.\n");
format!("add `change-id = {latest_config_id}` at the top of `config.toml`") msg.push_str("note: to silence this warning, ");
msg.push_str(&format!("add `change-id = {latest_config_id}` at the top of `config.toml`"));
}; };
msg.push_str("note: to silence this warning, ");
msg.push_str(&suggestion);
Some(msg) Some(msg)
} }

View file

@ -1849,10 +1849,19 @@ fn envify(s: &str) -> String {
} }
pub fn find_recent_config_change_ids(current_id: usize) -> Vec<usize> { pub fn find_recent_config_change_ids(current_id: usize) -> Vec<usize> {
let index = CONFIG_CHANGE_HISTORY if !CONFIG_CHANGE_HISTORY.contains(&current_id) {
.iter() // If the current change-id is greater than the most recent one,
.position(|&id| id == current_id) // return an empty list; otherwise, return the full list.
.expect(&format!("Value `{}` was not found in `CONFIG_CHANGE_HISTORY`.", current_id)); if let Some(max_id) = CONFIG_CHANGE_HISTORY.iter().max() {
if &current_id > max_id {
return Vec::new();
}
}
return CONFIG_CHANGE_HISTORY.to_vec();
}
let index = CONFIG_CHANGE_HISTORY.iter().position(|&id| id == current_id).unwrap();
CONFIG_CHANGE_HISTORY CONFIG_CHANGE_HISTORY
.iter() .iter()