summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Tan <jonathantanmy@google.com>2020-04-07 22:11:42 (GMT)
committerJunio C Hamano <gitster@pobox.com>2020-04-07 23:09:29 (GMT)
commitc14b6f83ec7453d2a93bba04f45caf26905f2bff (patch)
treefa918791b1e3a7bbf0bc6836c134938ca4d53fdd
parent1c37e86ab2834dfca311799e799568794bc474ce (diff)
downloadgit-c14b6f83ec7453d2a93bba04f45caf26905f2bff.zip
git-c14b6f83ec7453d2a93bba04f45caf26905f2bff.tar.gz
git-c14b6f83ec7453d2a93bba04f45caf26905f2bff.tar.bz2
diff: refactor object read
Refactor the object reads in diff_populate_filespec() to have the first object read not be in an if/else branch, because in a future patch, a retry will be added to that first object read. Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--diff.c29
1 files changed, 21 insertions, 8 deletions
diff --git a/diff.c b/diff.c
index c7457aa..61ce05d 100644
--- a/diff.c
+++ b/diff.c
@@ -4023,12 +4023,22 @@ int diff_populate_filespec(struct repository *r,
}
}
else {
- enum object_type type;
+ struct object_info info = {
+ .sizep = &s->size
+ };
+
+ if (!(size_only || check_binary))
+ /*
+ * Set contentp, since there is no chance that merely
+ * the size is sufficient.
+ */
+ info.contentp = &s->data;
+
+ if (oid_object_info_extended(r, &s->oid, &info,
+ OBJECT_INFO_LOOKUP_REPLACE))
+ die("unable to read %s", oid_to_hex(&s->oid));
+
if (size_only || check_binary) {
- type = oid_object_info(r, &s->oid, &s->size);
- if (type < 0)
- die("unable to read %s",
- oid_to_hex(&s->oid));
if (size_only)
return 0;
if (s->size > big_file_threshold && s->is_binary == -1) {
@@ -4036,9 +4046,12 @@ int diff_populate_filespec(struct repository *r,
return 0;
}
}
- s->data = repo_read_object_file(r, &s->oid, &type, &s->size);
- if (!s->data)
- die("unable to read %s", oid_to_hex(&s->oid));
+ if (!info.contentp) {
+ info.contentp = &s->data;
+ if (oid_object_info_extended(r, &s->oid, &info,
+ OBJECT_INFO_LOOKUP_REPLACE))
+ die("unable to read %s", oid_to_hex(&s->oid));
+ }
s->should_free = 1;
}
return 0;