diff options
author | Junio C Hamano <gitster@pobox.com> | 2010-01-20 20:28:50 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-01-20 20:28:50 -0800 |
commit | fcb2a7e4a3c7899a3432f5804889fa3ea5779220 (patch) | |
tree | 0f0785d427c23c7b8dbaae1afcdbd370ea3b639c /builtin-merge-recursive.c | |
parent | e98f80f50bf9b78aab8cea6184fd708259d0c3b3 (diff) | |
parent | 566c511195adc0ce88559853f2f00933e241d862 (diff) | |
download | git-fcb2a7e4a3c7899a3432f5804889fa3ea5779220.tar.gz git-fcb2a7e4a3c7899a3432f5804889fa3ea5779220.tar.xz |
Merge branch 'ap/merge-backend-opts'
* ap/merge-backend-opts:
Document that merge strategies can now take their own options
Extend merge-subtree tests to test -Xsubtree=dir.
Make "subtree" part more orthogonal to the rest of merge-recursive.
pull: Fix parsing of -X<option>
Teach git-pull to pass -X<option> to git-merge
git merge -X<option>
git-merge-file --ours, --theirs
Conflicts:
git-compat-util.h
Diffstat (limited to 'builtin-merge-recursive.c')
-rw-r--r-- | builtin-merge-recursive.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/builtin-merge-recursive.c b/builtin-merge-recursive.c index 710674c6b..d8875d589 100644 --- a/builtin-merge-recursive.c +++ b/builtin-merge-recursive.c @@ -25,19 +25,30 @@ int cmd_merge_recursive(int argc, const char **argv, const char *prefix) struct commit *result; init_merge_options(&o); - if (argv[0]) { - int namelen = strlen(argv[0]); - if (8 < namelen && - !strcmp(argv[0] + namelen - 8, "-subtree")) - o.subtree_merge = 1; - } + if (argv[0] && !suffixcmp(argv[0], "-subtree")) + o.subtree_shift = ""; if (argc < 4) usagef("%s <base>... -- <head> <remote> ...", argv[0]); for (i = 1; i < argc; ++i) { - if (!strcmp(argv[i], "--")) - break; + const char *arg = argv[i]; + + if (!prefixcmp(arg, "--")) { + if (!arg[2]) + break; + if (!strcmp(arg+2, "ours")) + o.recursive_variant = MERGE_RECURSIVE_OURS; + else if (!strcmp(arg+2, "theirs")) + o.recursive_variant = MERGE_RECURSIVE_THEIRS; + else if (!strcmp(arg+2, "subtree")) + o.subtree_shift = ""; + else if (!prefixcmp(arg+2, "subtree=")) + o.subtree_shift = arg + 10; + else + die("Unknown option %s", arg); + continue; + } if (bases_count < ARRAY_SIZE(bases)-1) { unsigned char *sha = xmalloc(20); if (get_sha1(argv[i], sha)) |