diff: avoid generating unused hunk header lines
Some callers of xdi_diff_outf() do not look at the generated hunk header lines at all. By plugging in a no-op hunk callback, this tells xdiff not to even bother formatting them. This patch introduces a stock no-op callback and uses it with a few callers whose line callbacks explicitly ignore hunk headers (because they look only for +/- lines). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									9346d6d14d
								
							
						
					
					
						commit
						3b40a090fd
					
				
							
								
								
									
										4
									
								
								diff.c
								
								
								
								
							
							
						
						
									
										4
									
								
								diff.c
								
								
								
								
							|  | @ -3604,8 +3604,8 @@ static void builtin_diffstat(const char *name_a, const char *name_b, | |||
| 		xpp.anchors_nr = o->anchors_nr; | ||||
| 		xecfg.ctxlen = o->context; | ||||
| 		xecfg.interhunkctxlen = o->interhunkcontext; | ||||
| 		if (xdi_diff_outf(&mf1, &mf2, NULL, diffstat_consume, | ||||
| 				  diffstat, &xpp, &xecfg)) | ||||
| 		if (xdi_diff_outf(&mf1, &mf2, discard_hunk_line, | ||||
| 				  diffstat_consume, diffstat, &xpp, &xecfg)) | ||||
| 			die("unable to generate diffstat for %s", one->path); | ||||
| 	} | ||||
|  | ||||
|  |  | |||
|  | @ -62,7 +62,8 @@ static int diff_grep(mmfile_t *one, mmfile_t *two, | |||
| 	ecbdata.hit = 0; | ||||
| 	xecfg.ctxlen = o->context; | ||||
| 	xecfg.interhunkctxlen = o->interhunkcontext; | ||||
| 	if (xdi_diff_outf(one, two, NULL, diffgrep_consume, &ecbdata, &xpp, &xecfg)) | ||||
| 	if (xdi_diff_outf(one, two, discard_hunk_line, diffgrep_consume, | ||||
| 			  &ecbdata, &xpp, &xecfg)) | ||||
| 		return 0; | ||||
| 	return ecbdata.hit; | ||||
| } | ||||
|  |  | |||
|  | @ -157,6 +157,12 @@ int xdi_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp, xdemitconf_t co | |||
| 	return xdl_diff(&a, &b, xpp, xecfg, xecb); | ||||
| } | ||||
|  | ||||
| void discard_hunk_line(void *priv, | ||||
| 		       long ob, long on, long nb, long nn, | ||||
| 		       const char *func, long funclen) | ||||
| { | ||||
| } | ||||
|  | ||||
| int xdi_diff_outf(mmfile_t *mf1, mmfile_t *mf2, | ||||
| 		  xdiff_emit_hunk_fn hunk_fn, | ||||
| 		  xdiff_emit_line_fn line_fn, | ||||
|  |  | |||
|  | @ -35,6 +35,14 @@ extern void xdiff_clear_find_func(xdemitconf_t *xecfg); | |||
| extern int git_xmerge_config(const char *var, const char *value, void *cb); | ||||
| extern int git_xmerge_style; | ||||
|  | ||||
| /* | ||||
|  * Can be used as a no-op hunk_fn for xdi_diff_outf(), since a NULL | ||||
|  * one just sends the hunk line to the line_fn callback). | ||||
|  */ | ||||
| void discard_hunk_line(void *priv, | ||||
| 		       long ob, long on, long nb, long nn, | ||||
| 		       const char *func, long funclen); | ||||
|  | ||||
| /* | ||||
|  * Compare the strings l1 with l2 which are of size s1 and s2 respectively. | ||||
|  * Returns 1 if the strings are deemed equal, 0 otherwise. | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Jeff King
						Jeff King