]> git.proxmox.com Git - libgit2.git/commitdiff
refs: properly report errors from `update_wt_heads`
authorPatrick Steinhardt <ps@pks.im>
Tue, 6 Jun 2017 12:54:19 +0000 (14:54 +0200)
committerPatrick Steinhardt <ps@pks.im>
Thu, 8 Jun 2017 10:05:35 +0000 (12:05 +0200)
src/refs.c

index 632a5299cb57b0d83c6664accdcd922009109b5a..f7120d9ee13da0d5f31eb009d1458e0e677923d1 100644 (file)
@@ -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 ((error = git_reference__read_head(&head, repo, path)) < 0) {
+               giterr_set(GITERR_REFERENCE, "could not read HEAD when renaming references");
+               goto out;
+       }
 
-       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 ((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) {