Teach the merge-recursive strategy a --patience option to use the "patience diff" algorithm, which tends to improve results when cherry-picking a patch that reorders functions at the same time as refactoring them. To support this, struct merge_options and ll_merge_options gain an xdl_opts member, so programs can use arbitrary xdiff flags (think "XDF_IGNORE_WHITESPACE") in a git-aware merge. git merge and git rebase can be passed the -Xpatience option to use this. [jn: split from --ignore-space patch; with documentation] Signed-off-by: Justin Frankel <justin@cockos.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			25 lines
		
	
	
		
			567 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			25 lines
		
	
	
		
			567 B
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Low level 3-way in-core file merge.
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef LL_MERGE_H
 | 
						|
#define LL_MERGE_H
 | 
						|
 | 
						|
struct ll_merge_options {
 | 
						|
	unsigned virtual_ancestor : 1;
 | 
						|
	unsigned variant : 2;	/* favor ours, favor theirs, or union merge */
 | 
						|
	unsigned renormalize : 1;
 | 
						|
	long xdl_opts;
 | 
						|
};
 | 
						|
 | 
						|
int ll_merge(mmbuffer_t *result_buf,
 | 
						|
	     const char *path,
 | 
						|
	     mmfile_t *ancestor, const char *ancestor_label,
 | 
						|
	     mmfile_t *ours, const char *our_label,
 | 
						|
	     mmfile_t *theirs, const char *their_label,
 | 
						|
	     const struct ll_merge_options *opts);
 | 
						|
 | 
						|
int ll_merge_marker_size(const char *path);
 | 
						|
 | 
						|
#endif
 |