feat(repo/branch): update next branch when not based on main
All checks were successful
ci/woodpecker/push/push-next Pipeline was successful
ci/woodpecker/push/tag-created Pipeline was successful
ci/woodpecker/push/cron-docker-builder Pipeline was successful

Closes kemitix/git-next#41
This commit is contained in:
Paul Campbell 2024-04-13 15:26:45 +01:00
parent 2055421067
commit 0622e6092b

View file

@ -47,15 +47,7 @@ pub async fn validate_positions(
let next_is_ancestor_of_dev = commit_histories.dev.iter().any(|dev| dev == &next);
if !next_is_ancestor_of_dev {
info!("Next is not an ancestor of dev - resetting next to main");
let reset = git.reset(
&config.branches().next(),
main.into(),
ResetForce::Force(next.into()),
&repo_details,
);
if let Err(err) = reset {
warn!(?err, "Failed");
}
reset_next_to_main(next, main, &repo_details, &config, &git);
revalidate_positions(addr).await;
return;
}
@ -67,10 +59,11 @@ pub async fn validate_positions(
.collect::<Vec<_>>();
if !next_commits.contains(&main) {
warn!(
"Main branch '{}' is not on the same commit as next branch '{}', or it's parent",
"Main branch '{}' is not on the same commit as next branch '{}', or it's parent - resetting next to main",
config.branches().main(),
config.branches().next()
);
reset_next_to_main(next, main, &repo_details, &config, &git);
revalidate_positions(addr).await;
return;
}
@ -85,7 +78,7 @@ pub async fn validate_positions(
.any(|commit| commit == &next_commits[0]);
if !dev_has_next {
warn!(
"Dev branch '{}' is not based on next branch '{}'",
"Dev branch '{}' is not based on next branch '{}' - next branch will be updated shortly",
config.branches().dev(),
config.branches().next()
);
@ -95,9 +88,10 @@ pub async fn validate_positions(
let dev_has_main = commit_histories.dev.iter().any(|commit| commit == &main);
if !dev_has_main {
warn!(
"Dev branch '{}' is not based on main branch '{}'",
"Dev branch '{}' is not based on main branch '{}' - user should rebase onto main branch '{}'",
config.branches().dev(),
config.branches().main()
config.branches().main(),
config.branches().main(),
);
revalidate_positions(addr).await;
return;
@ -132,6 +126,24 @@ async fn get_commit_histories(
}
}
fn reset_next_to_main(
next: forge::Commit,
main: forge::Commit,
repo_details: &RepoDetails,
repo_config: &RepoConfig,
git: &Git,
) {
let reset = git.reset(
&repo_config.branches().next(),
main.into(),
ResetForce::Force(next.into()),
repo_details,
);
if let Err(err) = reset {
warn!(?err, "Failed");
}
}
async fn revalidate_positions(addr: Addr<RepoActor>) {
// TODO : (#18) sleep and restart while we don't have webhooks
tokio::time::sleep(std::time::Duration::from_secs(10)).await;