From b524fe1a3c6033a5a8a64b7d8f9acc5cd3dd90c4 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Fri, 14 Dec 2012 08:35:59 -0800 Subject: [PATCH] Local Only ignore ENOTFOUNDs when adding corrupted refs --- src/refs.c | 2 +- src/transports/local.c | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/refs.c b/src/refs.c index 85813096b..df533c95d 100644 --- a/src/refs.c +++ b/src/refs.c @@ -177,7 +177,7 @@ static int loose_parse_oid(git_oid *oid, git_buf *file_content) corrupted: giterr_set(GITERR_REFERENCE, "Corrupted loose reference file"); - return -1; + return GIT_ENOTFOUND; } static git_ref_t loose_guess_rtype(const git_buf *full_path) diff --git a/src/transports/local.c b/src/transports/local.c index 8aeab2975..b5b1dd06d 100644 --- a/src/transports/local.c +++ b/src/transports/local.c @@ -42,6 +42,7 @@ static int add_ref(transport_local *t, const char *name) git_remote_head *head; git_object *obj = NULL, *target = NULL; git_buf buf = GIT_BUF_INIT; + int error; head = git__calloc(1, sizeof(git_remote_head)); GITERR_CHECK_ALLOC(head); @@ -49,12 +50,17 @@ static int add_ref(transport_local *t, const char *name) head->name = git__strdup(name); GITERR_CHECK_ALLOC(head->name); - if (git_reference_name_to_id(&head->oid, t->repo, name) < 0) { - /* This is actually okay. Empty repos often have a HEAD that points to - * a nonexistant "refs/haeds/master". */ + error = git_reference_name_to_id(&head->oid, t->repo, name); + if (error < 0) { git__free(head->name); git__free(head); - return 0; + if (error == GIT_ENOTFOUND) { + /* This is actually okay. Empty repos often have a HEAD that points to + * a nonexistant "refs/haeds/master". */ + giterr_clear(); + return 0; + } + return error; } if (git_vector_insert(&t->refs, head) < 0)