mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-03 08:53:48 +00:00
Merge pull request #4143 from richardipsum/issue-4094
Fix: make reflog include "(merge)" for merge commits
This commit is contained in:
commit
cf8e9a3ad5
14
src/refs.c
14
src/refs.c
@ -1130,6 +1130,18 @@ int git_reference__update_terminal(
|
||||
return error;
|
||||
}
|
||||
|
||||
static const char *commit_type(const git_commit *commit)
|
||||
{
|
||||
unsigned int count = git_commit_parentcount(commit);
|
||||
|
||||
if (count >= 2)
|
||||
return " (merge)";
|
||||
else if (count == 0)
|
||||
return " (initial)";
|
||||
else
|
||||
return "";
|
||||
}
|
||||
|
||||
int git_reference__update_for_commit(
|
||||
git_repository *repo,
|
||||
git_reference *ref,
|
||||
@ -1146,7 +1158,7 @@ int git_reference__update_for_commit(
|
||||
if ((error = git_commit_lookup(&commit, repo, id)) < 0 ||
|
||||
(error = git_buf_printf(&reflog_msg, "%s%s: %s",
|
||||
operation ? operation : "commit",
|
||||
git_commit_parentcount(commit) == 0 ? " (initial)" : "",
|
||||
commit_type(commit),
|
||||
git_commit_summary(commit))) < 0)
|
||||
goto done;
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include "git2/reflog.h"
|
||||
#include "reflog.h"
|
||||
|
||||
|
||||
static const char *merge_reflog_message = "commit (merge): Merge commit";
|
||||
static const char *new_ref = "refs/heads/test-reflog";
|
||||
static const char *current_master_tip = "a65fedf39aefe402d3bb6e24df4d4f5fe4547750";
|
||||
#define commit_msg "commit: bla bla"
|
||||
@ -448,3 +448,45 @@ void test_refs_reflog_reflog__logallrefupdates_nonbare_set_false(void)
|
||||
|
||||
assert_no_reflog_update();
|
||||
}
|
||||
|
||||
void test_refs_reflog_reflog__show_merge_for_merge_commits(void)
|
||||
{
|
||||
git_oid b1_oid;
|
||||
git_oid b2_oid;
|
||||
git_oid merge_commit_oid;
|
||||
git_commit *b1_commit;
|
||||
git_commit *b2_commit;
|
||||
git_signature *s;
|
||||
git_commit *parent_commits[2];
|
||||
git_tree *tree;
|
||||
git_reflog *log;
|
||||
const git_reflog_entry *entry;
|
||||
|
||||
cl_git_pass(git_signature_now(&s, "alice", "alice@example.com"));
|
||||
|
||||
cl_git_pass(git_reference_name_to_id(&b1_oid, g_repo, "HEAD"));
|
||||
cl_git_pass(git_reference_name_to_id(&b2_oid, g_repo, "refs/heads/test"));
|
||||
|
||||
cl_git_pass(git_commit_lookup(&b1_commit, g_repo, &b1_oid));
|
||||
cl_git_pass(git_commit_lookup(&b2_commit, g_repo, &b2_oid));
|
||||
|
||||
parent_commits[0] = b1_commit;
|
||||
parent_commits[1] = b2_commit;
|
||||
|
||||
cl_git_pass(git_commit_tree(&tree, b1_commit));
|
||||
|
||||
cl_git_pass(git_commit_create(&merge_commit_oid,
|
||||
g_repo, "HEAD", s, s, NULL,
|
||||
"Merge commit", tree,
|
||||
2, (const struct git_commit **) parent_commits));
|
||||
|
||||
cl_git_pass(git_reflog_read(&log, g_repo, "HEAD"));
|
||||
entry = git_reflog_entry_byindex(log, 0);
|
||||
cl_assert_equal_s(merge_reflog_message, git_reflog_entry_message(entry));
|
||||
|
||||
git_reflog_free(log);
|
||||
git_tree_free(tree);
|
||||
git_commit_free(b1_commit);
|
||||
git_commit_free(b2_commit);
|
||||
git_signature_free(s);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user