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 <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Miklos Vajna
2008-08-25 16:25:57 +02:00
committed by Junio C Hamano
parent 73118f89b8
commit 8a2fce1895
4 changed files with 192 additions and 169 deletions

View File

@ -1,26 +1,42 @@
#ifndef MERGE_RECURSIVE_H
#define MERGE_RECURSIVE_H
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);
#endif