* [PATCH v5 2/3] t4150-am: refactor am -3 tests
2015-06-04 23:24 [PATCH v5 1/3] git-am.sh: fix initialization of the threeway variable Remi Lespinet
@ 2015-06-04 23:24 ` Remi Lespinet
2015-06-08 11:36 ` Matthieu Moy
2015-06-04 23:24 ` [PATCH v5 3/3] git-am: add am.threeWay config variable Remi Lespinet
1 sibling, 1 reply; 4+ messages in thread
From: Remi Lespinet @ 2015-06-04 23:24 UTC (permalink / raw)
To: git
Cc: Remi Galan, Remi Lespinet, Guillaume Pages,
Louis-Alexandre Stuber, Antoine Delaite, Matthieu Moy
Create a setup for git am -3 in a separate test instead of creating
this setup each time.
This prepares for the next commit which will use this setup as well.
Signed-off-by: Remi Lespinet <remi.lespinet@ensimag.grenoble-inp.fr>
---
t/t4150-am.sh | 32 ++++++++++++++------------------
1 file changed, 14 insertions(+), 18 deletions(-)
diff --git a/t/t4150-am.sh b/t/t4150-am.sh
index 306e6f3..6ced98c 100755
--- a/t/t4150-am.sh
+++ b/t/t4150-am.sh
@@ -274,15 +274,21 @@ test_expect_success 'am --keep-non-patch really keeps the non-patch part' '
grep "^\[foo\] third" actual
'
+test_expect_success 'setup am -3' '
+ rm -fr .git/rebase-apply &&
+ git reset --hard &&
+ git checkout -b base3way master2 &&
+ sed -n -e "3,\$p" msg >file &&
+ head -n 9 msg >>file &&
+ git add file &&
+ test_tick &&
+ git commit -m "copied stuff"
+'
+
test_expect_success 'am -3 falls back to 3-way merge' '
rm -fr .git/rebase-apply &&
git reset --hard &&
- git checkout -b lorem2 master2 &&
- sed -n -e "3,\$p" msg >file &&
- head -n 9 msg >>file &&
- git add file &&
- test_tick &&
- git commit -m "copied stuff" &&
+ git checkout -b lorem2 base3way &&
git am -3 lorem-move.patch &&
test_path_is_missing .git/rebase-apply &&
git diff --exit-code lorem
@@ -291,12 +297,7 @@ test_expect_success 'am -3 falls back to 3-way merge' '
test_expect_success 'am -3 -p0 can read --no-prefix patch' '
rm -fr .git/rebase-apply &&
git reset --hard &&
- git checkout -b lorem3 master2 &&
- sed -n -e "3,\$p" msg >file &&
- head -n 9 msg >>file &&
- git add file &&
- test_tick &&
- git commit -m "copied stuff" &&
+ git checkout -b lorem3 base3way &&
git am -3 -p0 lorem-zero.patch &&
test_path_is_missing .git/rebase-apply &&
git diff --exit-code lorem
@@ -338,12 +339,7 @@ test_expect_success 'am -3 can rename a file after falling back to 3-way merge'
test_expect_success 'am -3 -q is quiet' '
rm -fr .git/rebase-apply &&
git checkout -f lorem2 &&
- git reset master2 --hard &&
- sed -n -e "3,\$p" msg >file &&
- head -n 9 msg >>file &&
- git add file &&
- test_tick &&
- git commit -m "copied stuff" &&
+ git reset base3way --hard &&
git am -3 -q lorem-move.patch >output.out 2>&1 &&
! test -s output.out
'
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v5 3/3] git-am: add am.threeWay config variable
2015-06-04 23:24 [PATCH v5 1/3] git-am.sh: fix initialization of the threeway variable Remi Lespinet
2015-06-04 23:24 ` [PATCH v5 2/3] t4150-am: refactor am -3 tests Remi Lespinet
@ 2015-06-04 23:24 ` Remi Lespinet
1 sibling, 0 replies; 4+ messages in thread
From: Remi Lespinet @ 2015-06-04 23:24 UTC (permalink / raw)
To: git
Cc: Remi Galan, Remi Lespinet, Guillaume Pages,
Louis-Alexandre Stuber, Antoine Delaite, Matthieu Moy
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>
---
Only one change compared to previous version:
"git-config(1)" replaced by "linkgit:git-config[1]"
Documentation/config.txt | 8 ++++++++
Documentation/git-am.txt | 7 +++++--
git-am.sh | 9 +++++++++
t/t4150-am.sh | 19 +++++++++++++++++++
4 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index d44bc85..36b75d9 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/git-am.sh b/git-am.sh
index c460dd0..75e701a 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -390,6 +390,11 @@ then
keepcr=t
fi
+if test "$(git config --bool --get am.threeWay)" = true
+then
+ threeway=t
+fi
+
while test $# != 0
do
case "$1" in
@@ -401,6 +406,8 @@ it will be removed. Please do not use it anymore."
;;
-3|--3way)
threeway=t ;;
+ --no-3way)
+ threeway=f ;;
-s|--signoff)
sign=t ;;
-u|--utf8)
@@ -658,6 +665,8 @@ fi
if test "$(cat "$dotest/threeway")" = t
then
threeway=t
+else
+ threeway=f
fi
git_apply_opt=$(cat "$dotest/apply-opt")
if test "$(cat "$dotest/sign")" = t
diff --git a/t/t4150-am.sh b/t/t4150-am.sh
index 6ced98c..b822a39 100755
--- a/t/t4150-am.sh
+++ b/t/t4150-am.sh
@@ -303,6 +303,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 &&
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread