1 #ifndef MERGE_RECURSIVE_H
 
   2 #define MERGE_RECURSIVE_H
 
   4 #include "string-list.h"
 
  11                 MERGE_RECURSIVE_NORMAL = 0,
 
  13                 MERGE_RECURSIVE_THEIRS
 
  15         const char *subtree_shift;
 
  16         unsigned buffer_output : 1;
 
  17         unsigned renormalize : 1;
 
  20         int diff_rename_limit;
 
  21         int merge_rename_limit;
 
  23         int needed_rename_limit;
 
  24         int show_rename_progress;
 
  27         struct string_list current_file_set;
 
  28         struct string_list current_directory_set;
 
  29         struct string_list df_conflict_file_set;
 
  32 /* merge_trees() but with recursive ancestor consolidation */
 
  33 int merge_recursive(struct merge_options *o,
 
  36                     struct commit_list *ancestors,
 
  37                     struct commit **result);
 
  39 /* rename-detecting three-way merge, no recursion */
 
  40 int merge_trees(struct merge_options *o,
 
  44                 struct tree **result);
 
  47  * "git-merge-recursive" can be fed trees; wrap them into
 
  48  * virtual commits and call merge_recursive() proper.
 
  50 int merge_recursive_generic(struct merge_options *o,
 
  51                             const unsigned char *head,
 
  52                             const unsigned char *merge,
 
  54                             const unsigned char **ca,
 
  55                             struct commit **result);
 
  57 void init_merge_options(struct merge_options *o);
 
  58 struct tree *write_tree_from_memory(struct merge_options *o);
 
  60 int parse_merge_opt(struct merge_options *out, const char *s);
 
  63 int try_merge_command(const char *strategy, size_t xopts_nr,
 
  64                 const char **xopts, struct commit_list *common,
 
  65                 const char *head_arg, struct commit_list *remotes);