[PATCH] diff: treat -crlf files as binary
- Date: Fri, 29 Aug 2008 14:28:20 -0700
- From: Junio C Hamano <gitster@xxxxxxxxx>
- Subject: [PATCH] diff: treat -crlf files as binary
The manual advertises that setting "crlf" attribute to false marks the
file as binary. We should pay attention to this condition in addition
to the "do not diff" attribute (i.e. setting "diff" to false) when
deciding not to show the textual diff.
Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx>
---
* Strictly speaking any change is backward incompatible, and this is
certainly one, but I do not think of a good use case to depend on the
previous behaviour, which was reported as a bug by my coworker.
diff.c | 28 +++++++++++++++++++---------
1 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/diff.c b/diff.c
index 18fa7a7..258b438 100644
--- a/diff.c
+++ b/diff.c
@@ -1314,36 +1314,46 @@ static void emit_binary_diff(FILE *file, mmfile_t *one, mmfile_t *two)
static void setup_diff_attr_check(struct git_attr_check *check)
{
static struct git_attr *attr_diff;
+ static struct git_attr *attr_crlf;
- if (!attr_diff) {
+ if (!attr_diff)
attr_diff = git_attr("diff", 4);
- }
+ if (!attr_crlf)
+ attr_crlf = git_attr("crlf", 4);
check[0].attr = attr_diff;
+ check[1].attr = attr_crlf;
}
static void diff_filespec_check_attr(struct diff_filespec *one)
{
- struct git_attr_check attr_diff_check;
+ struct git_attr_check attr_diff_check[2];
int check_from_data = 0;
if (one->checked_attr)
return;
- setup_diff_attr_check(&attr_diff_check);
+ setup_diff_attr_check(attr_diff_check);
one->is_binary = 0;
one->funcname_pattern_ident = NULL;
- if (!git_checkattr(one->path, 1, &attr_diff_check)) {
+ if (!git_checkattr(one->path, 2, attr_diff_check)) {
const char *value;
- /* binaryness */
- value = attr_diff_check.value;
+ /* binaryness; check both "diff" and "crlf" */
+ value = attr_diff_check[0].value;
if (ATTR_TRUE(value))
;
else if (ATTR_FALSE(value))
one->is_binary = 1;
- else
- check_from_data = 1;
+ else {
+ const char *crlf = attr_diff_check[1].value;
+ if (ATTR_TRUE(crlf))
+ ;
+ else if (ATTR_FALSE(crlf))
+ one->is_binary = 1;
+ else
+ check_from_data = 1;
+ }
/* funcname pattern ident */
if (ATTR_TRUE(value) || ATTR_FALSE(value) || ATTR_UNSET(value))
--
1.6.0.1.90.g27a6e
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html