summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2017-06-12 12:56:40 +0100
committerEdward Thomson <ethomson@edwardthomson.com>2017-06-12 12:56:40 +0100
commitcb3010c54a4b35e8799a157bdff4eae0378eb8db (patch)
tree543f816c47836c29a70cbac86718763adf623382
parentbd6928096d7a4c8f26b55a1e9ec710faeee7db93 (diff)
downloadlibgit2-ethomson/read_prefix.tar.gz
odb_read_prefix: reset error in backends loopethomson/read_prefix
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.
-rw-r--r--src/odb.c5
1 files changed, 4 insertions, 1 deletions
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;