cli: Fix merge commit oid
We were storing the commit *before* the merge in the COB, instead of storing the commit *after* the merge.
This commit is contained in:
parent
ae5982cd6b
commit
a1674600e9
|
|
@ -273,20 +273,18 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
|
||||||
//
|
//
|
||||||
// Perform merge
|
// Perform merge
|
||||||
//
|
//
|
||||||
match merge_style {
|
let head = match merge_style {
|
||||||
MergeStyle::Commit => {
|
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!(
|
term::success!(
|
||||||
"Updated {} {} -> {} via {}",
|
"Updated {} {} -> {} via {}",
|
||||||
term::format::highlight(branch),
|
term::format::highlight(branch),
|
||||||
term::format::secondary(term::format::oid(head_oid)),
|
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
|
merge_style_pretty
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -294,7 +292,7 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
|
||||||
// Update patch COB
|
// Update patch COB
|
||||||
//
|
//
|
||||||
// TODO: Don't allow merging the same revision twice?
|
// 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!(
|
term::success!(
|
||||||
"Patch state updated, use {} to publish",
|
"Patch state updated, use {} to publish",
|
||||||
|
|
@ -317,7 +315,7 @@ fn merge_commit(
|
||||||
patch_commit: &git::raw::AnnotatedCommit,
|
patch_commit: &git::raw::AnnotatedCommit,
|
||||||
patch: &Patch,
|
patch: &Patch,
|
||||||
whoami: &PublicKey,
|
whoami: &PublicKey,
|
||||||
) -> anyhow::Result<()> {
|
) -> anyhow::Result<git::Oid> {
|
||||||
let description = patch.description().trim();
|
let description = patch.description().trim();
|
||||||
let mut merge_opts = git::raw::MergeOptions::new();
|
let mut merge_opts = git::raw::MergeOptions::new();
|
||||||
let mut merge_msg = format!(
|
let mut merge_msg = format!(
|
||||||
|
|
@ -367,7 +365,8 @@ fn merge_commit(
|
||||||
let tree = repo.find_tree(tree)?;
|
let tree = repo.find_tree(tree)?;
|
||||||
let parents = &[&repo.head()?.peel_to_commit()?, &commit];
|
let parents = &[&repo.head()?.peel_to_commit()?, &commit];
|
||||||
|
|
||||||
repo.commit(
|
let oid = repo
|
||||||
|
.commit(
|
||||||
Some("HEAD"),
|
Some("HEAD"),
|
||||||
&author,
|
&author,
|
||||||
&committer,
|
&committer,
|
||||||
|
|
@ -380,11 +379,11 @@ fn merge_commit(
|
||||||
// Cleanup merge state.
|
// Cleanup merge state.
|
||||||
repo.cleanup_state().context("merge state cleanup failed")?;
|
repo.cleanup_state().context("merge state cleanup failed")?;
|
||||||
|
|
||||||
Ok(())
|
Ok(oid.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Perform fast-forward merge of patch.
|
/// 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 oid = patch_oid.to_string();
|
||||||
let args = ["merge", "--ff-only", &oid];
|
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);
|
term::blob(output);
|
||||||
|
|
||||||
Ok(())
|
Ok(*patch_oid)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue