Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
cli: Fix merge commit oid
Alexis Sellier committed 3 years ago
commit a1674600e94a6b6bb9fb31a0a3e523b5d2a9f743
parent ae5982cd6b085ba5b766a742abe6a93d1969abac
1 file changed +20 -21
modified 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<git::Oid> {
    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<git::Oid> {
    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)
}