merge-recursive --renormalize

Teach "git merge-recursive" a --renormalize option to enable the
merge.renormalize configuration.  The --no-renormalize option can
be used to override it in the negative.

So in the future, you might be able to, e.g.:

	git checkout -m -Xrenormalize otherbranch

or

	git revert -Xrenormalize otherpatch

or

	git pull --rebase -Xrenormalize

The bad part: merge.renormalize is still not honored for most
commands.  And it reveals lots of places that -X has not been plumbed
in (so we get "git merge -Xrenormalize" but not much else).

NEEDSWORK: tests

Cc: Eyvind Bernhardsen <eyvind.bernhardsen@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jonathan Nieder
2010-08-05 06:32:41 -05:00
committed by Junio C Hamano
parent ff8ba59e7b
commit 7610fa57e6
8 changed files with 45 additions and 8 deletions

View File

@ -54,6 +54,7 @@ static size_t use_strategies_nr, use_strategies_alloc;
static const char **xopts;
static size_t xopts_nr, xopts_alloc;
static const char *branch;
static int option_renormalize;
static int verbosity;
static int allow_rerere_auto;
@ -503,9 +504,8 @@ static int git_merge_config(const char *k, const char *v, void *cb)
return git_config_string(&pull_octopus, k, v);
else if (!strcmp(k, "merge.log") || !strcmp(k, "merge.summary"))
option_log = git_config_bool(k, v);
else if (!strcmp(k, "merge.renormalize")) {
merge_renormalize = git_config_bool(k, v);
}
else if (!strcmp(k, "merge.renormalize"))
option_renormalize = git_config_bool(k, v);
return git_diff_ui_config(k, v, cb);
}
@ -627,6 +627,11 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
if (!strcmp(strategy, "subtree"))
o.subtree_shift = "";
o.renormalize = option_renormalize;
/*
* NEEDSWORK: merge with table in builtin/merge-recursive
*/
for (x = 0; x < xopts_nr; x++) {
if (!strcmp(xopts[x], "ours"))
o.recursive_variant = MERGE_RECURSIVE_OURS;
@ -636,6 +641,10 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
o.subtree_shift = "";
else if (!prefixcmp(xopts[x], "subtree="))
o.subtree_shift = xopts[x]+8;
else if (!strcmp(xopts[x], "renormalize"))
o.renormalize = 1;
else if (!strcmp(xopts[x], "no-renormalize"))
o.renormalize = 0;
else
die("Unknown option for merge-recursive: -X%s", xopts[x]);
}
@ -819,7 +828,7 @@ static int finish_automerge(struct commit_list *common,
return 0;
}
static int suggest_conflicts(void)
static int suggest_conflicts(int renormalizing)
{
FILE *fp;
int pos;
@ -1304,5 +1313,5 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
"stopped before committing as requested\n");
return 0;
} else
return suggest_conflicts();
return suggest_conflicts(option_renormalize);
}