git-am: add am.threeWay config variable

Add the am.threeWay configuration variable to use the -3 or --3way
option of git am by default. When am.threeway is set and not desired
for a specific git am command, the --no-3way option can be used to
override it.

Signed-off-by: Remi Lespinet <remi.lespinet@ensimag.grenoble-inp.fr>
Signed-off-by: Paul Tan <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Remi Lespinet 2015-08-04 22:19:26 +08:00 committed by Junio C Hamano
parent 783d7e865e
commit e97a5e765d
4 changed files with 34 additions and 2 deletions

View File

@ -769,6 +769,14 @@ am.keepcr::
by giving '--no-keep-cr' from the command line. by giving '--no-keep-cr' from the command line.
See linkgit:git-am[1], linkgit:git-mailsplit[1]. See linkgit:git-am[1], linkgit:git-mailsplit[1].


am.threeWay::
By default, `git am` will fail if the patch does not apply cleanly. When
set to true, this setting tells `git am` to fall back on 3-way merge if
the patch records the identity of blobs it is supposed to apply to and
we have those blobs available locally (equivalent to giving the `--3way`
option from the command line). Defaults to `false`.
See linkgit:git-am[1].

apply.ignoreWhitespace:: apply.ignoreWhitespace::
When set to 'change', tells 'git apply' to ignore changes in When set to 'change', tells 'git apply' to ignore changes in
whitespace, in the same way as the '--ignore-space-change' whitespace, in the same way as the '--ignore-space-change'

View File

@ -10,7 +10,7 @@ SYNOPSIS
-------- --------
[verse] [verse]
'git am' [--signoff] [--keep] [--[no-]keep-cr] [--[no-]utf8] 'git am' [--signoff] [--keep] [--[no-]keep-cr] [--[no-]utf8]
[--3way] [--interactive] [--committer-date-is-author-date] [--[no-]3way] [--interactive] [--committer-date-is-author-date]
[--ignore-date] [--ignore-space-change | --ignore-whitespace] [--ignore-date] [--ignore-space-change | --ignore-whitespace]
[--whitespace=<option>] [-C<n>] [-p<n>] [--directory=<dir>] [--whitespace=<option>] [-C<n>] [-p<n>] [--directory=<dir>]
[--exclude=<path>] [--include=<path>] [--reject] [-q | --quiet] [--exclude=<path>] [--include=<path>] [--reject] [-q | --quiet]
@ -90,10 +90,13 @@ default. You can use `--no-utf8` to override this.


-3:: -3::
--3way:: --3way::
--no-3way::
When the patch does not apply cleanly, fall back on When the patch does not apply cleanly, fall back on
3-way merge if the patch records the identity of blobs 3-way merge if the patch records the identity of blobs
it is supposed to apply to and we have those blobs it is supposed to apply to and we have those blobs
available locally. available locally. `--no-3way` can be used to override
am.threeWay configuration variable. For more information,
see am.threeWay in linkgit:git-config[1].


--ignore-space-change:: --ignore-space-change::
--ignore-whitespace:: --ignore-whitespace::

View File

@ -152,6 +152,8 @@ static void am_state_init(struct am_state *state, const char *dir)


state->prec = 4; state->prec = 4;


git_config_get_bool("am.threeway", &state->threeway);

state->utf8 = 1; state->utf8 = 1;


git_config_get_bool("am.messageid", &state->message_id); git_config_get_bool("am.messageid", &state->message_id);

View File

@ -551,6 +551,25 @@ test_expect_success 'am -3 -p0 can read --no-prefix patch' '
git diff --exit-code lorem git diff --exit-code lorem
' '


test_expect_success 'am with config am.threeWay falls back to 3-way merge' '
rm -fr .git/rebase-apply &&
git reset --hard &&
git checkout -b lorem4 base3way &&
test_config am.threeWay 1 &&
git am lorem-move.patch &&
test_path_is_missing .git/rebase-apply &&
git diff --exit-code lorem
'

test_expect_success 'am with config am.threeWay overridden by --no-3way' '
rm -fr .git/rebase-apply &&
git reset --hard &&
git checkout -b lorem5 base3way &&
test_config am.threeWay 1 &&
test_must_fail git am --no-3way lorem-move.patch &&
test_path_is_dir .git/rebase-apply
'

test_expect_success 'am can rename a file' ' test_expect_success 'am can rename a file' '
grep "^rename from" rename.patch && grep "^rename from" rename.patch &&
rm -fr .git/rebase-apply && rm -fr .git/rebase-apply &&