Message ID | 5feddf15978e77b19d8b3e2e5761e394e0bda3e7.1571832177.git.liu.denton@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | apply: fix merge.conflictStyle bug in --3way | expand |
On Wed, Oct 23, 2019 at 8:04 AM Denton Liu <liu.denton@gmail.com> wrote: > Currently, apply does not respect the merge.conflictStyle setting. > Demonstrate this by making the 'apply with --3way' test case generic and > extending it to show that the configuration of > merge.conflictStyle = diff3 causes a breakage. > > Change print_sanitized_diff() to also sanitize `|||||||` conflict markers. > > Signed-off-by: Denton Liu <liu.denton@gmail.com> > --- > diff --git a/t/t4108-apply-threeway.sh b/t/t4108-apply-threeway.sh > @@ -46,28 +46,42 @@ test_expect_success 'apply without --3way' ' > +test_apply_with_3way () { > + status="$1" && > + shift && > + description="$1" && > + shift && > + preamble="$1" && > + shift && > + > + test_expect_$status "apply with --3way ($description)" " > + $preamble && > + > + # Merging side should be similar to applying this patch > + git diff ...side >P.diff && > + [...] > + " > +} > > +test_apply_with_3way success default true > +test_apply_with_3way failure 'merge.conflictStyle = diff3' 'test_config merge.conflictStyle diff3' This isn't the prettiest way to achieve this; the "success"/"failure" arguments, especially, are somewhat ugly. A perhaps more palatable alternative which gives you the same benefit of re-using the common code but avoids the ugliness while still allowing customization (now and in the future): test_apply_with_3way () { # Merging side should be similar to applying this patch git diff ...side >P.diff && [...] } test_expect_success 'apply with --3way (default)' ' test_apply_with_3way ' test_expect_failure 'apply with --3way (merge.conflictStyle = diff3)' ' test_config merge.conflictStyle diff3 && test_apply_with_3way '
diff --git a/t/t4108-apply-threeway.sh b/t/t4108-apply-threeway.sh index 3615256492..84347fc178 100755 --- a/t/t4108-apply-threeway.sh +++ b/t/t4108-apply-threeway.sh @@ -8,7 +8,7 @@ print_sanitized_diff () { git diff HEAD >diff.raw && sed -e ' /^index /d - s/^\(+[<>][<>][<>][<>]*\) .*/\1/ + s/^\(+[<>|][<>|][<>|][<>|]*\) .*/\1/ ' diff.raw } @@ -46,28 +46,42 @@ test_expect_success 'apply without --3way' ' git diff-index --exit-code --cached HEAD ' -test_expect_success 'apply with --3way' ' - # Merging side should be similar to applying this patch - git diff ...side >P.diff && - - # The corresponding conflicted merge - git reset --hard && - git checkout master^0 && - test_must_fail git merge --no-commit side && - git ls-files -s >expect.ls && - print_sanitized_diff >expect.diff && - - # should fail to apply - git reset --hard && - git checkout master^0 && - test_must_fail git apply --index --3way P.diff && - git ls-files -s >actual.ls && - print_sanitized_diff >actual.diff && +test_apply_with_3way () { + status="$1" && + shift && + description="$1" && + shift && + preamble="$1" && + shift && + + test_expect_$status "apply with --3way ($description)" " + $preamble && + + # Merging side should be similar to applying this patch + git diff ...side >P.diff && + + # The corresponding conflicted merge + git reset --hard && + git checkout master^0 && + test_must_fail git merge --no-commit side && + git ls-files -s >expect.ls && + print_sanitized_diff >expect.diff && + + # should fail to apply + git reset --hard && + git checkout master^0 && + test_must_fail git apply --index --3way P.diff && + git ls-files -s >actual.ls && + print_sanitized_diff >actual.diff && + + # The result should resemble the corresponding merge + test_cmp expect.ls actual.ls && + test_cmp expect.diff actual.diff + " +} - # The result should resemble the corresponding merge - test_cmp expect.ls actual.ls && - test_cmp expect.diff actual.diff -' +test_apply_with_3way success default true +test_apply_with_3way failure 'merge.conflictStyle = diff3' 'test_config merge.conflictStyle diff3' test_expect_success 'apply with --3way with rerere enabled' ' test_config rerere.enabled true &&
Currently, apply does not respect the merge.conflictStyle setting. Demonstrate this by making the 'apply with --3way' test case generic and extending it to show that the configuration of merge.conflictStyle = diff3 causes a breakage. Change print_sanitized_diff() to also sanitize `|||||||` conflict markers. Signed-off-by: Denton Liu <liu.denton@gmail.com> --- t/t4108-apply-threeway.sh | 58 ++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 22 deletions(-)