From a1674600e94a6b6bb9fb31a0a3e523b5d2a9f743 Mon Sep 17 00:00:00 2001 From: Alexis Sellier Date: Sun, 14 May 2023 14:19:07 +0200 Subject: [PATCH] cli: Fix merge commit oid We were storing the commit *before* the merge in the COB, instead of storing the commit *after* the merge. --- radicle-cli/src/commands/merge.rs | 41 +++++++++++++++---------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/radicle-cli/src/commands/merge.rs b/radicle-cli/src/commands/merge.rs index bd1c8707..62ef574c 100644 --- a/radicle-cli/src/commands/merge.rs +++ b/radicle-cli/src/commands/merge.rs @@ -273,20 +273,18 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> { // // Perform merge // - match merge_style { + let head = match merge_style { MergeStyle::Commit => { - merge_commit(&repo, patch_id, &patch_commit, &patch, signer.public_key())?; + merge_commit(&repo, patch_id, &patch_commit, &patch, signer.public_key()) } - MergeStyle::FastForward => { - fast_forward(&repo, &revision.head())?; - } - } + MergeStyle::FastForward => fast_forward(&repo, &revision.head()), + }?; term::success!( "Updated {} {} -> {} via {}", term::format::highlight(branch), term::format::secondary(term::format::oid(head_oid)), - term::format::secondary(term::format::oid(revision.head())), + term::format::secondary(term::format::oid(head)), merge_style_pretty ); @@ -294,7 +292,7 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> { // Update patch COB // // TODO: Don't allow merging the same revision twice? - patch.merge(revision_id, head_oid.into(), &signer)?; + patch.merge(revision_id, head, &signer)?; term::success!( "Patch state updated, use {} to publish", @@ -317,7 +315,7 @@ fn merge_commit( patch_commit: &git::raw::AnnotatedCommit, patch: &Patch, whoami: &PublicKey, -) -> anyhow::Result<()> { +) -> anyhow::Result { let description = patch.description().trim(); let mut merge_opts = git::raw::MergeOptions::new(); let mut merge_msg = format!( @@ -367,24 +365,25 @@ fn merge_commit( let tree = repo.find_tree(tree)?; let parents = &[&repo.head()?.peel_to_commit()?, &commit]; - repo.commit( - Some("HEAD"), - &author, - &committer, - &merge_msg, - &tree, - parents, - ) - .context("merge commit failed")?; + let oid = repo + .commit( + Some("HEAD"), + &author, + &committer, + &merge_msg, + &tree, + parents, + ) + .context("merge commit failed")?; // Cleanup merge state. repo.cleanup_state().context("merge state cleanup failed")?; - Ok(()) + Ok(oid.into()) } /// Perform fast-forward merge of patch. -fn fast_forward(repo: &git::raw::Repository, patch_oid: &git::Oid) -> anyhow::Result<()> { +fn fast_forward(repo: &git::raw::Repository, patch_oid: &git::Oid) -> anyhow::Result { let oid = patch_oid.to_string(); let args = ["merge", "--ff-only", &oid]; @@ -399,5 +398,5 @@ fn fast_forward(repo: &git::raw::Repository, patch_oid: &git::Oid) -> anyhow::Re term::blob(output); - Ok(()) + Ok(*patch_oid) }