summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBen Straub <bs@github.com>2014-01-28 11:30:36 -0800
committerBen Straub <bs@github.com>2014-01-30 15:52:13 -0800
commitccf6ce5c895c5d2261538150e945c93799de0999 (patch)
tree54177c5c6cb78fce834ecefd2592b770987fe29f /src
parent540c1809f40c1bb3cf08627a85921309852fa963 (diff)
downloadlibgit2-ccf6ce5c895c5d2261538150e945c93799de0999.tar.gz
Ensure renaming a reference updates the reflog
Diffstat (limited to 'src')
-rw-r--r--src/branch.c3
-rw-r--r--src/refs.c22
-rw-r--r--src/remote.c28
3 files changed, 27 insertions, 26 deletions
diff --git a/src/branch.c b/src/branch.c
index 4658d3bdd..c7651c6c3 100644
--- a/src/branch.c
+++ b/src/branch.c
@@ -211,7 +211,8 @@ int git_branch_move(
/* first update ref then config so failure won't trash config */
error = git_reference_rename(
- out, branch, git_buf_cstr(&new_reference_name), force);
+ out, branch, git_buf_cstr(&new_reference_name), force,
+ signature, log_message);
if (error < 0)
goto done;
diff --git a/src/refs.c b/src/refs.c
index 65e7e6439..adbc1666a 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -558,35 +558,27 @@ int git_reference_rename(
git_reference **out,
git_reference *ref,
const char *new_name,
- int force)
+ int force,
+ const git_signature *signature,
+ const char *log_message)
{
- git_signature *who;
+ git_signature *who = (git_signature*)signature;
int error;
/* Should we return an error if there is no default? */
- if (((error = git_signature_default(&who, ref->db->repo)) < 0) &&
+ if (!who &&
+ ((error = git_signature_default(&who, ref->db->repo)) < 0) &&
((error = git_signature_now(&who, "unknown", "unknown")) < 0)) {
return error;
}
- error = reference__rename(out, ref, new_name, force, who, NULL);
+ error = reference__rename(out, ref, new_name, force, who, log_message);
git_signature_free(who);
return error;
}
-int git_reference_rename_with_log(
- git_reference **out,
- git_reference *ref,
- const char *new_name,
- int force,
- const git_signature *who,
- const char * message)
-{
- return reference__rename(out, ref, new_name, force, who, message);
-}
-
int git_reference_resolve(git_reference **ref_out, const git_reference *ref)
{
switch (git_reference_type(ref)) {
diff --git a/src/remote.c b/src/remote.c
index 5d35affd1..f33f5ef3c 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -1332,20 +1332,28 @@ static int rename_one_remote_reference(
{
int error;
git_buf new_name = GIT_BUF_INIT;
+ git_buf log_message = GIT_BUF_INIT;
- error = git_buf_printf(
- &new_name,
- GIT_REFS_REMOTES_DIR "%s%s",
- new_remote_name,
- reference->name + strlen(GIT_REFS_REMOTES_DIR) + strlen(old_remote_name));
+ if ((error = git_buf_printf(
+ &new_name,
+ GIT_REFS_REMOTES_DIR "%s%s",
+ new_remote_name,
+ reference->name + strlen(GIT_REFS_REMOTES_DIR) + strlen(old_remote_name))) < 0)
+ goto cleanup;
- if (!error) {
- error = git_reference_rename(
- NULL, reference, git_buf_cstr(&new_name), 0);
- git_reference_free(reference);
- }
+ if ((error = git_buf_printf(&log_message,
+ "renamed remote %s to %s",
+ old_remote_name, new_remote_name)) < 0)
+ goto cleanup;
+
+ error = git_reference_rename(
+ NULL, reference, git_buf_cstr(&new_name), 0,
+ NULL, git_buf_cstr(&log_message));
+ git_reference_free(reference);
+cleanup:
git_buf_free(&new_name);
+ git_buf_free(&log_message);
return error;
}