git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] git-am: add am.threeWay config variable
@ 2015-08-04 14:19 Paul Tan
  2015-08-07  9:18 ` Johannes Schindelin
  2015-08-18  9:36 ` Matthieu Moy
  0 siblings, 2 replies; 5+ messages in thread
From: Paul Tan @ 2015-08-04 14:19 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Paul Tan, Remi Lespinet

From: Remi Lespinet <remi.lespinet@ensimag.grenoble-inp.fr>

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>
---
I tweaked Remi's patch so it is implemented on top of builtin/am.c. Hopefully
there will be no regressions this time ;)

 Documentation/config.txt |  8 ++++++++
 Documentation/git-am.txt |  7 +++++--
 builtin/am.c             |  2 ++
 t/t4150-am.sh            | 19 +++++++++++++++++++
 4 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/Documentation/config.txt b/Documentation/config.txt
index 315f271..fb3fc57 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -769,6 +769,14 @@ am.keepcr::
 	by giving '--no-keep-cr' from the command line.
 	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::
 	When set to 'change', tells 'git apply' to ignore changes in
 	whitespace, in the same way as the '--ignore-space-change'
diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt
index 0d8ba48..dbea6e7 100644
--- a/Documentation/git-am.txt
+++ b/Documentation/git-am.txt
@@ -10,7 +10,7 @@ SYNOPSIS
 --------
 [verse]
 '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]
 	 [--whitespace=<option>] [-C<n>] [-p<n>] [--directory=<dir>]
 	 [--exclude=<path>] [--include=<path>] [--reject] [-q | --quiet]
@@ -90,10 +90,13 @@ default.   You can use `--no-utf8` to override this.
 
 -3::
 --3way::
+--no-3way::
 	When the patch does not apply cleanly, 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.
+	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-whitespace::
diff --git a/builtin/am.c b/builtin/am.c
index 84d57d4..1399c8d 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -152,6 +152,8 @@ static void am_state_init(struct am_state *state, const char *dir)
 
 	state->prec = 4;
 
+	git_config_get_bool("am.threeway", &state->threeway);
+
 	state->utf8 = 1;
 
 	git_config_get_bool("am.messageid", &state->message_id);
diff --git a/t/t4150-am.sh b/t/t4150-am.sh
index e9b6f81..dd627c4 100755
--- a/t/t4150-am.sh
+++ b/t/t4150-am.sh
@@ -551,6 +551,25 @@ test_expect_success 'am -3 -p0 can read --no-prefix patch' '
 	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' '
 	grep "^rename from" rename.patch &&
 	rm -fr .git/rebase-apply &&
-- 
2.5.0.280.gd88bd6e

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] git-am: add am.threeWay config variable
  2015-08-04 14:19 [PATCH] git-am: add am.threeWay config variable Paul Tan
@ 2015-08-07  9:18 ` Johannes Schindelin
  2015-08-18  9:36 ` Matthieu Moy
  1 sibling, 0 replies; 5+ messages in thread
From: Johannes Schindelin @ 2015-08-07  9:18 UTC (permalink / raw)
  To: Paul Tan; +Cc: git, Junio C Hamano, Remi Lespinet

Hi,

On 2015-08-04 16:19, Paul Tan wrote:
> From: Remi Lespinet <remi.lespinet@ensimag.grenoble-inp.fr>
> 
> 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>
> ---
> I tweaked Remi's patch so it is implemented on top of builtin/am.c. Hopefully
> there will be no regressions this time ;)

The diff looks obviously correct to me (and yes, I also looked at the context... :-)).

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] git-am: add am.threeWay config variable
  2015-08-04 14:19 [PATCH] git-am: add am.threeWay config variable Paul Tan
  2015-08-07  9:18 ` Johannes Schindelin
@ 2015-08-18  9:36 ` Matthieu Moy
  2015-08-19  8:33   ` Paul Tan
  1 sibling, 1 reply; 5+ messages in thread
From: Matthieu Moy @ 2015-08-18  9:36 UTC (permalink / raw)
  To: Paul Tan; +Cc: git, Junio C Hamano, Remi Lespinet

Paul Tan <pyokagan@gmail.com> writes:

> From: Remi Lespinet <remi.lespinet@ensimag.grenoble-inp.fr>
>
> 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>
> ---
> I tweaked Remi's patch so it is implemented on top of builtin/am.c. Hopefully
> there will be no regressions this time ;)

Thanks for doing this.

I don't remember the details of the regression we had with the shell
version, but that would probably deserve an additional test to enforce
the "Hopefully there will be no regressions" part of your message.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] git-am: add am.threeWay config variable
  2015-08-18  9:36 ` Matthieu Moy
@ 2015-08-19  8:33   ` Paul Tan
  2015-08-19  9:45     ` Matthieu Moy
  0 siblings, 1 reply; 5+ messages in thread
From: Paul Tan @ 2015-08-19  8:33 UTC (permalink / raw)
  To: Matthieu Moy; +Cc: Git List, Junio C Hamano, Remi Lespinet

On Tue, Aug 18, 2015 at 5:36 PM, Matthieu Moy
<Matthieu.Moy@grenoble-inp.fr> wrote:
> I don't remember the details of the regression we had with the shell
> version, but that would probably deserve an additional test to enforce
> the "Hopefully there will be no regressions" part of your message.

Actually, technically, I think this patch by its own would reintroduce
the regression ;)

The reason is that the bug was caused by the overall structure of the
git-am.sh code, and not the patch itself[1].

This is fixed in another patch series[2] on top of this patch which
also implements a test for "git am --3way".

[1] http://thread.gmane.org/gmane.comp.version-control.git/274577
[2] http://thread.gmane.org/gmane.comp.version-control.git/275322

Thanks,
Paul

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] git-am: add am.threeWay config variable
  2015-08-19  8:33   ` Paul Tan
@ 2015-08-19  9:45     ` Matthieu Moy
  0 siblings, 0 replies; 5+ messages in thread
From: Matthieu Moy @ 2015-08-19  9:45 UTC (permalink / raw)
  To: Paul Tan; +Cc: Git List, Junio C Hamano, Remi Lespinet

Paul Tan <pyokagan@gmail.com> writes:

> On Tue, Aug 18, 2015 at 5:36 PM, Matthieu Moy
> <Matthieu.Moy@grenoble-inp.fr> wrote:
>> I don't remember the details of the regression we had with the shell
>> version, but that would probably deserve an additional test to enforce
>> the "Hopefully there will be no regressions" part of your message.
>
> Actually, technically, I think this patch by its own would reintroduce
> the regression ;)
>
> The reason is that the bug was caused by the overall structure of the
> git-am.sh code, and not the patch itself[1].
>
> This is fixed in another patch series[2] on top of this patch which
> also implements a test for "git am --3way".

OK, perfect. I had missed that. Thanks again.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-08-19  9:45 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-04 14:19 [PATCH] git-am: add am.threeWay config variable Paul Tan
2015-08-07  9:18 ` Johannes Schindelin
2015-08-18  9:36 ` Matthieu Moy
2015-08-19  8:33   ` Paul Tan
2015-08-19  9:45     ` Matthieu Moy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).