summaryrefslogtreecommitdiff
path: root/diff.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2017-03-13 06:21:36 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-03-13 06:21:36 (GMT)
commit60f335b87f005c5f6c2eee1787eed9037b90c053 (patch)
tree05a41a0772006def96b8f0734c20afd0f2411116 /diff.c
parent6c621015f2b5028b8743da0b13293cc99fb2be6b (diff)
parent12426e114b252d130d83c3f098c4ceae3cf217e3 (diff)
downloadgit-60f335b87f005c5f6c2eee1787eed9037b90c053.zip
git-60f335b87f005c5f6c2eee1787eed9037b90c053.tar.gz
git-60f335b87f005c5f6c2eee1787eed9037b90c053.tar.bz2
Merge branch 'jc/diff-populate-filespec-size-only-fix'
"git diff --quiet" relies on the size field in diff_filespec to be correctly populated, but diff_populate_filespec() helper function made an incorrect short-cut when asked only to populate the size field for paths that need to go through convert_to_git() (e.g. CRLF conversion). * jc/diff-populate-filespec-size-only-fix: diff: do not short-cut CHECK_SIZE_ONLY check in diff_populate_filespec()
Diffstat (limited to 'diff.c')
-rw-r--r--diff.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/diff.c b/diff.c
index 051761b..a628ac3 100644
--- a/diff.c
+++ b/diff.c
@@ -2870,8 +2870,25 @@ int diff_populate_filespec(struct diff_filespec *s, unsigned int flags)
s->should_free = 1;
return 0;
}
- if (size_only)
+
+ /*
+ * Even if the caller would be happy with getting
+ * only the size, we cannot return early at this
+ * point if the path requires us to run the content
+ * conversion.
+ */
+ if (size_only && !would_convert_to_git(s->path))
return 0;
+
+ /*
+ * Note: this check uses xsize_t(st.st_size) that may
+ * not be the true size of the blob after it goes
+ * through convert_to_git(). This may not strictly be
+ * correct, but the whole point of big_file_threshold
+ * and is_binary check being that we want to avoid
+ * opening the file and inspecting the contents, this
+ * is probably fine.
+ */
if ((flags & CHECK_BINARY) &&
s->size > big_file_threshold && s->is_binary == -1) {
s->is_binary = 1;