@@ -4592,6 +4592,33 @@ static int diff_filespec_is_identical(struct diff_filespec *one,
4592
4592
return !memcmp (one -> data , two -> data , one -> size );
4593
4593
}
4594
4594
4595
+ static int diff_filespec_check_stat_unmatch (struct diff_filepair * p )
4596
+ {
4597
+ /*
4598
+ * 1. Entries that come from stat info dirtiness
4599
+ * always have both sides (iow, not create/delete),
4600
+ * one side of the object name is unknown, with
4601
+ * the same mode and size. Keep the ones that
4602
+ * do not match these criteria. They have real
4603
+ * differences.
4604
+ *
4605
+ * 2. At this point, the file is known to be modified,
4606
+ * with the same mode and size, and the object
4607
+ * name of one side is unknown. Need to inspect
4608
+ * the identical contents.
4609
+ */
4610
+ if (!DIFF_FILE_VALID (p -> one ) || /* (1) */
4611
+ !DIFF_FILE_VALID (p -> two ) ||
4612
+ (p -> one -> sha1_valid && p -> two -> sha1_valid ) ||
4613
+ (p -> one -> mode != p -> two -> mode ) ||
4614
+ diff_populate_filespec (p -> one , 1 ) ||
4615
+ diff_populate_filespec (p -> two , 1 ) ||
4616
+ (p -> one -> size != p -> two -> size ) ||
4617
+ !diff_filespec_is_identical (p -> one , p -> two )) /* (2) */
4618
+ return 1 ;
4619
+ return 0 ;
4620
+ }
4621
+
4595
4622
static void diffcore_skip_stat_unmatch (struct diff_options * diffopt )
4596
4623
{
4597
4624
int i ;
@@ -4602,27 +4629,7 @@ static void diffcore_skip_stat_unmatch(struct diff_options *diffopt)
4602
4629
for (i = 0 ; i < q -> nr ; i ++ ) {
4603
4630
struct diff_filepair * p = q -> queue [i ];
4604
4631
4605
- /*
4606
- * 1. Entries that come from stat info dirtiness
4607
- * always have both sides (iow, not create/delete),
4608
- * one side of the object name is unknown, with
4609
- * the same mode and size. Keep the ones that
4610
- * do not match these criteria. They have real
4611
- * differences.
4612
- *
4613
- * 2. At this point, the file is known to be modified,
4614
- * with the same mode and size, and the object
4615
- * name of one side is unknown. Need to inspect
4616
- * the identical contents.
4617
- */
4618
- if (!DIFF_FILE_VALID (p -> one ) || /* (1) */
4619
- !DIFF_FILE_VALID (p -> two ) ||
4620
- (p -> one -> sha1_valid && p -> two -> sha1_valid ) ||
4621
- (p -> one -> mode != p -> two -> mode ) ||
4622
- diff_populate_filespec (p -> one , 1 ) ||
4623
- diff_populate_filespec (p -> two , 1 ) ||
4624
- (p -> one -> size != p -> two -> size ) ||
4625
- !diff_filespec_is_identical (p -> one , p -> two )) /* (2) */
4632
+ if (diff_filespec_check_stat_unmatch (p ))
4626
4633
diff_q (& outq , p );
4627
4634
else {
4628
4635
/*
0 commit comments