From 0f642f3168e847c33a9607e4b8562e9ca955b26d Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Tue, 6 Jun 2017 14:54:19 +0200 Subject: [PATCH] refs: properly report errors from `update_wt_heads` --- src/refs.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/refs.c b/src/refs.c index 632a5299c..f7120d9ee 100644 --- a/src/refs.c +++ b/src/refs.c @@ -622,15 +622,25 @@ typedef struct { static int update_wt_heads(git_repository *repo, const char *path, void *payload) { rename_cb_data *data = (rename_cb_data *) payload; - git_reference *head; + git_reference *head = NULL; char *gitdir = NULL; - int error = 0; + int error; - if (git_reference__read_head(&head, repo, path) < 0 || - git_reference_type(head) != GIT_REF_SYMBOLIC || - git__strcmp(head->target.symbolic, data->old_name) != 0 || - (gitdir = git_path_dirname(path)) == NULL) + if ((error = git_reference__read_head(&head, repo, path)) < 0) { + giterr_set(GITERR_REFERENCE, "could not read HEAD when renaming references"); goto out; + } + + if ((gitdir = git_path_dirname(path)) == NULL) { + error = -1; + goto out; + } + + if (git_reference_type(head) != GIT_REF_SYMBOLIC || + git__strcmp(head->target.symbolic, data->old_name) != 0) { + error = 0; + goto out; + } /* Update HEAD it was pointing to the reference being renamed */ if ((error = git_repository_create_head(gitdir, data->new_name)) < 0) {