Skip to content

Commit

Permalink
Don't restack abandoned or merged changes
Browse files Browse the repository at this point in the history
Closes #48
  • Loading branch information
9999years committed Apr 6, 2024
1 parent b542bbc commit b2eaf54
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 8 deletions.
7 changes: 7 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ serde = { version = "1.0.197", features = ["derive"] }
serde_json = "1.0.115"
serde_with = { version = "3.7.0", features = ["time_0_3"] }
shell-words = "1.1.0"
tap = "1.0.1"
time = { version = "0.3.34", features = ["local-offset", "formatting", "macros"] }
tracing = { version = "0.1.40", features = ["attributes"] }
tracing-human-layer = "0.1.3"
Expand Down
24 changes: 22 additions & 2 deletions src/change_number.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ use clap::builder::ValueParserFactory;
use owo_colors::OwoColorize;
use owo_colors::Stream::Stderr;
use owo_colors::Style;
use tap::Pipe;

use crate::change::Change;
use crate::change_status::ChangeStatus;
use crate::gerrit::Gerrit;
use crate::patchset::ChangePatchset;
use crate::patchset::Patchset;
Expand Down Expand Up @@ -47,10 +49,28 @@ impl ChangeNumber {
}

pub fn pretty(&self, gerrit: &Gerrit) -> miette::Result<String> {
let subject = gerrit.get_change(*self)?.subject;
let change = gerrit.get_change(*self)?;
let subject = change.subject;
let abandoned = change.status == ChangeStatus::Abandoned;
let merged = change.status == ChangeStatus::Merged;
let wip = change.wip;
let styled = |style: owo_colors::Style| {
if merged {
style.magenta()
} else if abandoned {
style.dimmed().strikethrough()
} else if wip {
style.dimmed()
} else {
style.green()
}
};
Ok(format!(
"{}{}",
self.if_supports_color(Stderr, |change| Style::new().bold().green().style(change)),
self.if_supports_color(Stderr, |change| Style::new()
.bold()
.pipe(styled)
.style(change)),
subject
.map(|subject| format!(" ({subject})"))
.unwrap_or_default()
Expand Down
24 changes: 18 additions & 6 deletions src/restack.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ use miette::Context;
use miette::IntoDiagnostic;

use crate::change_number::ChangeNumber;
use crate::change_status::ChangeStatus;
use crate::commit_hash::CommitHash;
use crate::dependency_graph::DependencyGraph;
use crate::gerrit::GerritGitRemote;
Expand Down Expand Up @@ -308,9 +309,20 @@ pub fn create_todo(gerrit: &mut GerritGitRemote, branch: &str) -> miette::Result
queue.push_front(*root);

while let Some(change) = queue.pop_back() {
if roots.contains(&change) {
let change = gerrit.get_change(change)?;

match change.status {
ChangeStatus::New => {
// Carry on.
}
ChangeStatus::Merged | ChangeStatus::Abandoned => {
tracing::debug!("Skipping merged/abandoned change {}", change.number);
continue;
}
}

if roots.contains(&change.number) {
// Change is root, cherry-pick on target branch.
let change = gerrit.get_change(change)?;
let step = Step {
change: change.number,
onto: RestackOnto::Branch {
Expand All @@ -324,18 +336,18 @@ pub fn create_todo(gerrit: &mut GerritGitRemote, branch: &str) -> miette::Result
// Change is not root, cherry-pick on parent.
let parent = todo
.graph
.depends_on(change)
.ok_or_else(|| miette!("Change does not have parent: {change}"))?;
.depends_on(change.number)
.ok_or_else(|| miette!("Change does not have parent: {}", change.number))?;

let step = Step {
change,
change: change.number,
onto: RestackOnto::Change(parent),
};
tracing::debug!(%step, "Discovered restack step");
todo.steps.push_back(step);
}

let reverse_dependencies = todo.graph.needed_by(change);
let reverse_dependencies = todo.graph.needed_by(change.number);

for needed_by in reverse_dependencies {
if !seen.contains(needed_by) {
Expand Down

0 comments on commit b2eaf54

Please sign in to comment.