@@ -1837,6 +1837,7 @@ static void builtin_diff(const char *name_a,
1837
1837
struct diff_filespec * one ,
1838
1838
struct diff_filespec * two ,
1839
1839
const char * xfrm_msg ,
1840
+ int must_show_header ,
1840
1841
struct diff_options * o ,
1841
1842
int complete_rewrite )
1842
1843
{
@@ -1896,16 +1897,19 @@ static void builtin_diff(const char *name_a,
1896
1897
strbuf_addf (& header , "%s%snew file mode %06o%s\n" , line_prefix , set , two -> mode , reset );
1897
1898
if (xfrm_msg )
1898
1899
strbuf_addstr (& header , xfrm_msg );
1900
+ must_show_header = 1 ;
1899
1901
}
1900
1902
else if (lbl [1 ][0 ] == '/' ) {
1901
1903
strbuf_addf (& header , "%s%sdeleted file mode %06o%s\n" , line_prefix , set , one -> mode , reset );
1902
1904
if (xfrm_msg )
1903
1905
strbuf_addstr (& header , xfrm_msg );
1906
+ must_show_header = 1 ;
1904
1907
}
1905
1908
else {
1906
1909
if (one -> mode != two -> mode ) {
1907
1910
strbuf_addf (& header , "%s%sold mode %06o%s\n" , line_prefix , set , one -> mode , reset );
1908
1911
strbuf_addf (& header , "%s%snew mode %06o%s\n" , line_prefix , set , two -> mode , reset );
1912
+ must_show_header = 1 ;
1909
1913
}
1910
1914
if (xfrm_msg )
1911
1915
strbuf_addstr (& header , xfrm_msg );
@@ -1935,8 +1939,11 @@ static void builtin_diff(const char *name_a,
1935
1939
die ("unable to read files to diff" );
1936
1940
/* Quite common confusing case */
1937
1941
if (mf1 .size == mf2 .size &&
1938
- !memcmp (mf1 .ptr , mf2 .ptr , mf1 .size ))
1942
+ !memcmp (mf1 .ptr , mf2 .ptr , mf1 .size )) {
1943
+ if (must_show_header )
1944
+ fprintf (o -> file , "%s" , header .buf );
1939
1945
goto free_ab_and_return ;
1946
+ }
1940
1947
fprintf (o -> file , "%s" , header .buf );
1941
1948
strbuf_reset (& header );
1942
1949
if (DIFF_OPT_TST (o , BINARY ))
@@ -1954,7 +1961,7 @@ static void builtin_diff(const char *name_a,
1954
1961
struct emit_callback ecbdata ;
1955
1962
const struct userdiff_funcname * pe ;
1956
1963
1957
- if (!DIFF_XDL_TST (o , WHITESPACE_FLAGS )) {
1964
+ if (!DIFF_XDL_TST (o , WHITESPACE_FLAGS ) || must_show_header ) {
1958
1965
fprintf (o -> file , "%s" , header .buf );
1959
1966
strbuf_reset (& header );
1960
1967
}
@@ -2568,18 +2575,19 @@ static void fill_metainfo(struct strbuf *msg,
2568
2575
struct diff_filespec * two ,
2569
2576
struct diff_options * o ,
2570
2577
struct diff_filepair * p ,
2578
+ int * must_show_header ,
2571
2579
int use_color )
2572
2580
{
2573
2581
const char * set = diff_get_color (use_color , DIFF_METAINFO );
2574
2582
const char * reset = diff_get_color (use_color , DIFF_RESET );
2575
2583
struct strbuf * msgbuf ;
2576
2584
char * line_prefix = "" ;
2577
2585
2586
+ * must_show_header = 1 ;
2578
2587
if (o -> output_prefix ) {
2579
2588
msgbuf = o -> output_prefix (o , o -> output_prefix_data );
2580
2589
line_prefix = msgbuf -> buf ;
2581
2590
}
2582
-
2583
2591
strbuf_init (msg , PATH_MAX * 2 + 300 );
2584
2592
switch (p -> status ) {
2585
2593
case DIFF_STATUS_COPIED :
@@ -2613,7 +2621,7 @@ static void fill_metainfo(struct strbuf *msg,
2613
2621
/* fallthru */
2614
2622
default :
2615
2623
/* nothing */
2616
- ;
2624
+ * must_show_header = 0 ;
2617
2625
}
2618
2626
if (one && two && hashcmp (one -> sha1 , two -> sha1 )) {
2619
2627
int abbrev = DIFF_OPT_TST (o , FULL_INDEX ) ? 40 : DEFAULT_ABBREV ;
@@ -2646,6 +2654,7 @@ static void run_diff_cmd(const char *pgm,
2646
2654
{
2647
2655
const char * xfrm_msg = NULL ;
2648
2656
int complete_rewrite = (p -> status == DIFF_STATUS_MODIFIED ) && p -> score ;
2657
+ int must_show_header = 0 ;
2649
2658
2650
2659
if (!DIFF_OPT_TST (o , ALLOW_EXTERNAL ))
2651
2660
pgm = NULL ;
@@ -2661,6 +2670,7 @@ static void run_diff_cmd(const char *pgm,
2661
2670
* external diff driver
2662
2671
*/
2663
2672
fill_metainfo (msg , name , other , one , two , o , p ,
2673
+ & must_show_header ,
2664
2674
DIFF_OPT_TST (o , COLOR_DIFF ) && !pgm );
2665
2675
xfrm_msg = msg -> len ? msg -> buf : NULL ;
2666
2676
}
@@ -2672,7 +2682,8 @@ static void run_diff_cmd(const char *pgm,
2672
2682
}
2673
2683
if (one && two )
2674
2684
builtin_diff (name , other ? other : name ,
2675
- one , two , xfrm_msg , o , complete_rewrite );
2685
+ one , two , xfrm_msg , must_show_header ,
2686
+ o , complete_rewrite );
2676
2687
else
2677
2688
fprintf (o -> file , "* Unmerged path %s\n" , name );
2678
2689
}
0 commit comments