diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f9e1f1cb..0970bfdc8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,8 @@ v0.22 + 1 * `git_config_get_string_buf()` provides a way to safely retrieve a string from a non-snapshot configuration. +* Reference renaming now uses the right id for the old value. + ### API removals ### Breaking API changes diff --git a/src/refdb_fs.c b/src/refdb_fs.c index 77cb1a8ce..e1a77f3ff 100644 --- a/src/refdb_fs.c +++ b/src/refdb_fs.c @@ -1324,7 +1324,7 @@ static int refdb_fs_backend__rename( /* Try to rename the refog; it's ok if the old doesn't exist */ error = refdb_reflog_fs__rename(_backend, old_name, new_name); if (((error == 0) || (error == GIT_ENOTFOUND)) && - ((error = reflog_append(backend, new, NULL, NULL, who, message)) < 0)) { + ((error = reflog_append(backend, new, git_reference_target(new), NULL, who, message)) < 0)) { git_reference_free(new); git_filebuf_cleanup(&file); return error; diff --git a/tests/refs/branches/move.c b/tests/refs/branches/move.c index fa0b2faca..bec39e18b 100644 --- a/tests/refs/branches/move.c +++ b/tests/refs/branches/move.c @@ -203,6 +203,7 @@ void test_refs_branches_move__default_reflog_message(void) const git_reflog_entry *entry; git_signature *sig; git_config *cfg; + git_oid id; cl_git_pass(git_repository_config(&cfg, repo)); cl_git_pass(git_config_set_string(cfg, "user.name", "Foo Bar")); @@ -212,6 +213,7 @@ void test_refs_branches_move__default_reflog_message(void) cl_git_pass(git_signature_default(&sig, repo)); cl_git_pass(git_reference_lookup(&branch, repo, "refs/heads/master")); + git_oid_cpy(&id, git_reference_target(branch)); cl_git_pass(git_branch_move(&new_branch, branch, "master2", 0)); cl_git_pass(git_reflog_read(&log, repo, git_reference_name(new_branch))); @@ -219,6 +221,8 @@ void test_refs_branches_move__default_reflog_message(void) cl_assert_equal_s("branch: renamed refs/heads/master to refs/heads/master2", git_reflog_entry_message(entry)); cl_assert_equal_s(sig->email, git_reflog_entry_committer(entry)->email); + cl_assert_equal_oid(&id, git_reflog_entry_id_old(entry)); + cl_assert_equal_oid(&id, git_reflog_entry_id_new(entry)); git_reference_free(branch); git_reference_free(new_branch);