72f0a2895d15124edb778cdae93ffe6c7d985f12
   1#ifndef MERGE_RECURSIVE_H
   2#define MERGE_RECURSIVE_H
   3
   4struct merge_options {
   5        const char *branch1;
   6        const char *branch2;
   7        unsigned subtree_merge : 1;
   8        unsigned buffer_output : 1;
   9        int verbosity;
  10        int diff_rename_limit;
  11        int merge_rename_limit;
  12};
  13
  14/* merge_trees() but with recursive ancestor consolidation */
  15int merge_recursive(struct merge_options *o,
  16                    struct commit *h1,
  17                    struct commit *h2,
  18                    struct commit_list *ancestors,
  19                    struct commit **result);
  20
  21/* rename-detecting three-way merge, no recursion */
  22int merge_trees(struct merge_options *o,
  23                struct tree *head,
  24                struct tree *merge,
  25                struct tree *common,
  26                struct tree **result);
  27
  28/*
  29 * "git-merge-recursive" can be fed trees; wrap them into
  30 * virtual commits and call merge_recursive() proper.
  31 */
  32int merge_recursive_generic(struct merge_options *o,
  33                            const unsigned char *head,
  34                            const unsigned char *merge,
  35                            int num_ca,
  36                            const unsigned char **ca,
  37                            struct commit **result);
  38
  39void init_merge_options(struct merge_options *o);
  40struct tree *write_tree_from_memory(struct merge_options *o);
  41
  42#endif