diff options
author | Miklos Vajna <vmiklos@frugalware.org> | 2008-08-25 16:25:57 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-08-30 20:46:54 -0700 |
commit | 8a2fce1895c058945d8e2dbd8cb7456cc7450ad8 (patch) | |
tree | 5a5b8822510adea8f39b4f9262b58f8a70f35008 /builtin-merge-recursive.c | |
parent | 73118f89b81f5a3ed1bb56e2517627d56e9ebdfb (diff) | |
download | git-8a2fce1895c058945d8e2dbd8cb7456cc7450ad8.tar.gz |
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>
Diffstat (limited to 'builtin-merge-recursive.c')
-rw-r--r-- | builtin-merge-recursive.c | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/builtin-merge-recursive.c b/builtin-merge-recursive.c index 25f540b4a8..6b534c1a66 100644 --- a/builtin-merge-recursive.c +++ b/builtin-merge-recursive.c @@ -17,32 +17,33 @@ static const char *better_branch_name(const char *branch) int cmd_merge_recursive(int argc, const char **argv, const char *prefix) { - const char *bases[21]; + const unsigned char *bases[21]; unsigned bases_count = 0; int i, failed; - const char *branch1, *branch2; unsigned char h1[20], h2[20]; - int subtree_merge = 0; + struct merge_options o; + struct commit *result; + init_merge_options(&o); if (argv[0]) { int namelen = strlen(argv[0]); if (8 < namelen && !strcmp(argv[0] + namelen - 8, "-subtree")) - subtree_merge = 1; + o.subtree_merge = 1; } - git_config(merge_recursive_config, NULL); - merge_recursive_setup(subtree_merge); if (argc < 4) die("Usage: %s <base>... -- <head> <remote> ...\n", argv[0]); for (i = 1; i < argc; ++i) { - if (!strcmp(argv[i], "--")) { - bases[bases_count] = NULL; + if (!strcmp(argv[i], "--")) break; + if (bases_count < ARRAY_SIZE(bases)-1) { + unsigned char *sha = xmalloc(20); + if (get_sha1(argv[i], sha)) + die("Could not parse object '%s'", argv[i]); + bases[bases_count++] = sha; } - if (bases_count < ARRAY_SIZE(bases)-1) - bases[bases_count++] = argv[i]; else warning("Cannot handle more than %zu bases. " "Ignoring %s.", ARRAY_SIZE(bases)-1, argv[i]); @@ -50,21 +51,21 @@ int cmd_merge_recursive(int argc, const char **argv, const char *prefix) if (argc - i != 3) /* "--" "<head>" "<remote>" */ die("Not handling anything other than two heads merge."); - branch1 = argv[++i]; - branch2 = argv[++i]; + o.branch1 = argv[++i]; + o.branch2 = argv[++i]; - if (get_sha1(branch1, h1)) - die("Could not resolve ref '%s'", branch1); - if (get_sha1(branch2, h2)) - die("Could not resolve ref '%s'", branch2); + if (get_sha1(o.branch1, h1)) + die("Could not resolve ref '%s'", o.branch1); + if (get_sha1(o.branch2, h2)) + die("Could not resolve ref '%s'", o.branch2); - branch1 = better_branch_name(branch1); - branch2 = better_branch_name(branch2); + o.branch1 = better_branch_name(o.branch1); + o.branch2 = better_branch_name(o.branch2); - if (merge_recursive_verbosity >= 3) - printf("Merging %s with %s\n", branch1, branch2); + if (o.verbosity >= 3) + printf("Merging %s with %s\n", o.branch1, o.branch2); - failed = merge_recursive_generic(bases, h1, branch1, h2, branch2); + failed = merge_recursive_generic(&o, h1, h2, bases_count, bases, &result); if (failed < 0) return 128; /* die() error code */ return failed; |