diff options
author | Jeff King <peff@peff.net> | 2012-02-24 17:05:03 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-02-24 14:12:19 -0800 |
commit | 4c3b57b98bccfdb740b8f1d0ca574dd51deacfad (patch) | |
tree | 30c26917c01a0cedd3e70b9eb5856206b52c95ec | |
parent | 92ac3197e4859ba8c19e3e7f7b8cf5dc38e4669d (diff) | |
download | git-4c3b57b98bccfdb740b8f1d0ca574dd51deacfad.tar.gz |
teach dry-run convert_to_git not to require a src buffer
When we call convert_to_git in dry-run mode, it may still
want to look at the source buffer, because some CRLF
conversion modes depend on analyzing the source to determine
whether it is in fact convertible CRLF text.
However, the main motivation for convert_to_git's dry-run
mode is that we would decide which method to use to acquire
the blob's data (streaming versus in-core). Requiring this
source analysis creates a chicken-and-egg problem. We are
better off simply guessing that anything we can't analyze
will end up needing conversion.
This patch lets a caller specify a NULL src buffer when
using dry-run mode (and only dry-run mode). A non-zero
return value goes from "we would convert" to "we might
convert"; a zero return value remains "we would definitely
not convert".
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | convert.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -195,9 +195,17 @@ static int crlf_to_git(const char *path, const char *src, size_t len, char *dst; if (crlf_action == CRLF_BINARY || - (crlf_action == CRLF_GUESS && auto_crlf == AUTO_CRLF_FALSE) || !len) + (crlf_action == CRLF_GUESS && auto_crlf == AUTO_CRLF_FALSE) || + (src && !len)) return 0; + /* + * If we are doing a dry-run and have no source buffer, there is + * nothing to analyze; we must assume we would convert. + */ + if (!buf && !src) + return 1; + gather_stats(src, len, &stats); if (crlf_action == CRLF_AUTO || crlf_action == CRLF_GUESS) { @@ -532,7 +540,7 @@ static int ident_to_git(const char *path, const char *src, size_t len, { char *dst, *dollar; - if (!ident || !count_ident(src, len)) + if (!ident || (src && !count_ident(src, len))) return 0; if (!buf) |