diff options
| author | Ben Straub <bs@github.com> | 2014-01-28 11:30:36 -0800 |
|---|---|---|
| committer | Ben Straub <bs@github.com> | 2014-01-30 15:52:13 -0800 |
| commit | ccf6ce5c895c5d2261538150e945c93799de0999 (patch) | |
| tree | 54177c5c6cb78fce834ecefd2592b770987fe29f /src | |
| parent | 540c1809f40c1bb3cf08627a85921309852fa963 (diff) | |
| download | libgit2-ccf6ce5c895c5d2261538150e945c93799de0999.tar.gz | |
Ensure renaming a reference updates the reflog
Diffstat (limited to 'src')
| -rw-r--r-- | src/branch.c | 3 | ||||
| -rw-r--r-- | src/refs.c | 22 | ||||
| -rw-r--r-- | src/remote.c | 28 |
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; } |
