| #ifndef MERGE_RECURSIVE_H | 
 | #define MERGE_RECURSIVE_H | 
 |  | 
 | #include "string-list.h" | 
 |  | 
 | struct merge_options { | 
 | 	const char *branch1; | 
 | 	const char *branch2; | 
 | 	enum { | 
 | 		MERGE_RECURSIVE_NORMAL = 0, | 
 | 		MERGE_RECURSIVE_OURS, | 
 | 		MERGE_RECURSIVE_THEIRS, | 
 | 	} recursive_variant; | 
 | 	const char *subtree_shift; | 
 | 	unsigned buffer_output : 1; | 
 | 	int verbosity; | 
 | 	int diff_rename_limit; | 
 | 	int merge_rename_limit; | 
 | 	int call_depth; | 
 | 	struct strbuf obuf; | 
 | 	struct string_list current_file_set; | 
 | 	struct string_list current_directory_set; | 
 | }; | 
 |  | 
 | /* Return a list of user-friendly error messages to be used by merge */ | 
 | struct unpack_trees_error_msgs get_porcelain_error_msgs(void); | 
 |  | 
 | /* merge_trees() but with recursive ancestor consolidation */ | 
 | int merge_recursive(struct merge_options *o, | 
 | 		    struct commit *h1, | 
 | 		    struct commit *h2, | 
 | 		    struct commit_list *ancestors, | 
 | 		    struct commit **result); | 
 |  | 
 | /* rename-detecting three-way merge, no recursion */ | 
 | int merge_trees(struct merge_options *o, | 
 | 		struct tree *head, | 
 | 		struct tree *merge, | 
 | 		struct tree *common, | 
 | 		struct tree **result); | 
 |  | 
 | /* | 
 |  * "git-merge-recursive" can be fed trees; wrap them into | 
 |  * virtual commits and call merge_recursive() proper. | 
 |  */ | 
 | int merge_recursive_generic(struct merge_options *o, | 
 | 			    const unsigned char *head, | 
 | 			    const unsigned char *merge, | 
 | 			    int num_ca, | 
 | 			    const unsigned char **ca, | 
 | 			    struct commit **result); | 
 |  | 
 | void init_merge_options(struct merge_options *o); | 
 | struct tree *write_tree_from_memory(struct merge_options *o); | 
 |  | 
 | #endif |