From cb3010c54a4b35e8799a157bdff4eae0378eb8db Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Mon, 12 Jun 2017 12:56:40 +0100 Subject: [PATCH] odb_read_prefix: reset error in backends loop When looking for an object by prefix, we query all the backends so that we can ensure that there is no ambiguity. We need to reset the `error` value between backends; otherwise the first backend may find an object by prefix, but subsequent backends may not. If we do not reset the `error` value then it will remain at `GIT_ENOTFOUND` and `read_prefix_1` will fail, despite having actually found an object. --- src/odb.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/odb.c b/src/odb.c index b66324f87..ae8f247e3 100644 --- a/src/odb.c +++ b/src/odb.c @@ -1116,8 +1116,11 @@ static int read_prefix_1(git_odb_object **out, git_odb *db, if (b->read_prefix != NULL) { git_oid full_oid; error = b->read_prefix(&full_oid, &raw.data, &raw.len, &raw.type, b, key, len); - if (error == GIT_ENOTFOUND || error == GIT_PASSTHROUGH) + + if (error == GIT_ENOTFOUND || error == GIT_PASSTHROUGH) { + error = 0; continue; + } if (error) goto out;