merge-tree: use ll_merge() not xdl_merge()
ll_merge() interface was designed to merge contents under git control while taking per-path attributes into account. Update the three-way merge implementation used by merge-tree to use it. Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									9914cf4689
								
							
						
					
					
						commit
						15b4f7a68d
					
				
							
								
								
									
										16
									
								
								merge-file.c
								
								
								
								
							
							
						
						
									
										16
									
								
								merge-file.c
								
								
								
								
							|  | @ -1,6 +1,7 @@ | |||
| #include "cache.h" | ||||
| #include "run-command.h" | ||||
| #include "xdiff-interface.h" | ||||
| #include "ll-merge.h" | ||||
| #include "blob.h" | ||||
|  | ||||
| static int fill_mmfile_blob(mmfile_t *f, struct blob *obj) | ||||
|  | @ -24,16 +25,13 @@ static void free_mmfile(mmfile_t *f) | |||
| 	free(f->ptr); | ||||
| } | ||||
|  | ||||
| static void *three_way_filemerge(mmfile_t *base, mmfile_t *our, mmfile_t *their, unsigned long *size) | ||||
| static void *three_way_filemerge(const char *path, mmfile_t *base, mmfile_t *our, mmfile_t *their, unsigned long *size) | ||||
| { | ||||
| 	mmbuffer_t res; | ||||
| 	xmparam_t xmp; | ||||
| 	int merge_status; | ||||
| 	mmbuffer_t res; | ||||
|  | ||||
| 	memset(&xmp, 0, sizeof(xmp)); | ||||
| 	merge_status = xdl_merge(base, our, ".our", their, ".their", | ||||
| 		&xmp, XDL_MERGE_ZEALOUS, &res); | ||||
|  | ||||
| 	merge_status = ll_merge(&res, path, base, | ||||
| 				our, ".our", their, ".their", 0); | ||||
| 	if (merge_status < 0) | ||||
| 		return NULL; | ||||
|  | ||||
|  | @ -75,7 +73,7 @@ static int generate_common_file(mmfile_t *res, mmfile_t *f1, mmfile_t *f2) | |||
| 	return xdi_diff(f1, f2, &xpp, &xecfg, &ecb); | ||||
| } | ||||
|  | ||||
| void *merge_file(struct blob *base, struct blob *our, struct blob *their, unsigned long *size) | ||||
| void *merge_file(const char *path, struct blob *base, struct blob *our, struct blob *their, unsigned long *size) | ||||
| { | ||||
| 	void *res = NULL; | ||||
| 	mmfile_t f1, f2, common; | ||||
|  | @ -108,7 +106,7 @@ void *merge_file(struct blob *base, struct blob *our, struct blob *their, unsign | |||
| 		if (generate_common_file(&common, &f1, &f2) < 0) | ||||
| 			goto out_free_f2_f1; | ||||
| 	} | ||||
| 	res = three_way_filemerge(&common, &f1, &f2, size); | ||||
| 	res = three_way_filemerge(path, &common, &f1, &f2, size); | ||||
| 	free_mmfile(&common); | ||||
| out_free_f2_f1: | ||||
| 	free_mmfile(&f2); | ||||
|  |  | |||
|  | @ -54,7 +54,7 @@ static const char *explanation(struct merge_list *entry) | |||
| 	return "removed in remote"; | ||||
| } | ||||
|  | ||||
| extern void *merge_file(struct blob *, struct blob *, struct blob *, unsigned long *); | ||||
| extern void *merge_file(const char *, struct blob *, struct blob *, struct blob *, unsigned long *); | ||||
|  | ||||
| static void *result(struct merge_list *entry, unsigned long *size) | ||||
| { | ||||
|  | @ -76,7 +76,7 @@ static void *result(struct merge_list *entry, unsigned long *size) | |||
| 	their = NULL; | ||||
| 	if (entry) | ||||
| 		their = entry->blob; | ||||
| 	return merge_file(base, our, their, size); | ||||
| 	return merge_file(entry->path, base, our, their, size); | ||||
| } | ||||
|  | ||||
| static void *origin(struct merge_list *entry, unsigned long *size) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano