path: root/merge-recursive.h
diff options
authorMiklos Vajna <>2008-08-25 14:25:57 (GMT)
committerJunio C Hamano <>2008-08-31 03:46:54 (GMT)
commit8a2fce1895c058945d8e2dbd8cb7456cc7450ad8 (patch)
tree5a5b8822510adea8f39b4f9262b58f8a70f35008 /merge-recursive.h
parent73118f89b81f5a3ed1bb56e2517627d56e9ebdfb (diff)
merge-recursive: introduce merge_options
This makes it possible to avoid passing the labels of branches as arguments to merge_recursive(), merge_trees() and merge_recursive_generic(). It also takes care of subtree merge, output buffering, verbosity, and rename limits - these were global variables till now in merge-recursive.c. A new function, named init_merge_options(), is introduced as well, it clears the struct merge_info, then initializes with default values, finally updates the default values based on the config and environment variables. Signed-off-by: Miklos Vajna <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'merge-recursive.h')
1 files changed, 29 insertions, 13 deletions
diff --git a/merge-recursive.h b/merge-recursive.h
index 4dd6476..72f0a28 100644
--- a/merge-recursive.h
+++ b/merge-recursive.h
@@ -1,26 +1,42 @@
-int merge_recursive(struct commit *h1,
+struct merge_options {
+ const char *branch1;
+ const char *branch2;
+ unsigned subtree_merge : 1;
+ unsigned buffer_output : 1;
+ int verbosity;
+ int diff_rename_limit;
+ int merge_rename_limit;
+/* merge_trees() but with recursive ancestor consolidation */
+int merge_recursive(struct merge_options *o,
+ struct commit *h1,
struct commit *h2,
- const char *branch1,
- const char *branch2,
struct commit_list *ancestors,
struct commit **result);
-int merge_trees(struct tree *head,
+/* rename-detecting three-way merge, no recursion */
+int merge_trees(struct merge_options *o,
+ struct tree *head,
struct tree *merge,
struct tree *common,
- const char *branch1,
- const char *branch2,
struct tree **result);
-extern int merge_recursive_generic(const char **base_list,
- const unsigned char *head_sha1, const char *head_name,
- const unsigned char *next_sha1, const char *next_name);
-int merge_recursive_config(const char *var, const char *value, void *cb);
-void merge_recursive_setup(int is_subtree_merge);
-struct tree *write_tree_from_memory(void);
-extern int merge_recursive_verbosity;
+ * "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);