From: Daniel Hahler <genml+git-2014@thequod.de>
To: David Aguilar <davvid@gmail.com>
Cc: Junio C Hamano <gitster@pobox.com>, git@vger.kernel.org
Subject: Re: git: regression with mergetool and answering "n" (backport fix / add tests)
Date: Fri, 26 Dec 2014 02:12:13 +0100	[thread overview]
Message-ID: <549CB5ED.5040804@thequod.de> (raw)
In-Reply-To: <20141226010023.GC14150@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 4965 bytes --]
Hi David,
sorry for the confusion - the patch / fix I've mentioned was meant to be
applied on the commit that caused the regression and not current master.
Cheers,
Daniel.
On 26.12.2014 02:00, David Aguilar wrote:
> On Tue, Dec 23, 2014 at 08:08:34PM +0100, Daniel Hahler wrote:
>> Hi,
>>
>> this is in reply to the commits from David:
>>
>>     commit 0ddedd4d6b9b3e8eb3557d8ed28e1a0b354a25f8
>>     Refs: v2.2.0-60-g0ddedd4
>>     Merge: e886efd 1e86d5b
>>     Author:     Junio C Hamano <gitster@pobox.com>
>>     AuthorDate: Fri Dec 12 14:31:39 2014 -0800
>>     Commit:     Junio C Hamano <gitster@pobox.com>
>>     CommitDate: Fri Dec 12 14:31:39 2014 -0800
>>
>>         Merge branch 'da/difftool-mergetool-simplify-reporting-status'
>>
>>         Code simplification.
>>
>>         * da/difftool-mergetool-simplify-reporting-status:
>>           mergetools: stop setting $status in merge_cmd()
>>           mergetool: simplify conditionals
>>           difftool--helper: add explicit exit statement
>>           mergetool--lib: remove use of $status global
>>           mergetool--lib: remove no-op assignment to $status from setup_user_tool
>>
>> I've ran into a problem, where "git mergetool" (using vimdiff) would add
>> the changes to the index, although you'd answered "n" after not changing/saving
>> the merged file.
> 
> Thanks for the heads-up.
> 
> Do you perhaps have mergetool.vimdiff.trustExitCode defined, or
> a similar setting?
> 
> If you saw the prompt then it should have aborted right after
> you answered "n".
> 
> The very last thing merge_cmd() for vimdiff does is call
> check_unchanged().  We'll come back to check_unchanged() later.
> 
> I tried to reproduce this issue.  Here's a transcript:
> 
> ....
> $ git status -s
> UU file.txt
> 
> $ git mergetool -t vimdiff file.txt
> Merging:
> file.txt
> 
> Normal merge conflict for 'file.txt':
>   {local}: modified file
>   {remote}: modified file
> 4 files to edit
> #### Enter :qall inside vim
> file.txt seems unchanged.
> Was the merge successful? [y/n] n
> merge of file.txt failed
> Continue merging other unresolved paths (y/n) ? n
> 
> $ git status -s
> UU file.txt
> ....
> 
> That seemed to work fine.  Any clues?
> More notes below...
> 
>> This regression has been introduced in:
>>
>>     commit 99474b6340dbcbe58f6c256fdee231cbadb060f4
>>     Author: David Aguilar <davvid@gmail.com>
>>     Date:   Fri Nov 14 13:33:55 2014 -0800
>>
>>         difftool: honor --trust-exit-code for builtin tools
>>         
>>         run_merge_tool() was not setting $status, which prevented the
>>         exit code for builtin tools from being forwarded to the caller.
>>         
>>         Capture the exit status and add a test to guarantee the behavior.
>>         
>>         Reported-by: Adria Farres <14farresa@gmail.com>
>>         Signed-off-by: David Aguilar <davvid@gmail.com>
>>         Signed-off-by: Junio C Hamano <gitster@pobox.com>
>>
>>     diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
>>     index c45a020..cce4f8c 100644
>>     --- a/git-mergetool--lib.sh
>>     +++ b/git-mergetool--lib.sh
>>     @@ -221,6 +221,7 @@ run_merge_tool () {
>>             else
>>                     run_diff_cmd "$1"
>>             fi
>>     +       status=$?
>>             return $status
>>      }
>>
>>
>> My fix has been the following, but I agree that the changes from David
>> are much better in general.
>>
>>     diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh
>>     index cce4f8c..fa9acb1 100644
>>     --- a/git-mergetool--lib.sh
>>     +++ b/git-mergetool--lib.sh
>>     @@ -105,6 +105,7 @@ check_unchanged () {
>>                             esac
>>                     done
>>             fi
>>     +       return $status
>>      }
> 
> I don't think this fix does anything.
> Here is all of check_unchanged() for context:
> 
> check_unchanged () {
> 	if test "$MERGED" -nt "$BACKUP"
> 	then
> 		return 0
> 	else
> 		while true
> 		do
> 			echo "$MERGED seems unchanged."
> 			printf "Was the merge successful? [y/n] "
> 			read answer || return 1
> 			case "$answer" in
> 			y*|Y*) return 0 ;;
> 			n*|N*) return 1 ;;
> 			esac
> 		done
> 	fi
> }
> 
> The addition of "return $status" after the "fi" in the above fix
> won't do anything because that code is unreachable.
> We either return 0 or 1.
> 
>> I haven't verified if it really fixes the regression, but if it does it
>> should get backported into the branches where the regression is present.
> 
> Also, the $status variable doesn't even exist anymore, so the
> fix is suspect.
> 
> What platform are you on?
> 
>> Also, there should be some tests for this.
> 
> I don't disagree with that ;-)
> 
> Let me know if you have any clues.  I don't see anything obvious.
> 
> cheers,
> 
-- 
http://daniel.hahler.de/
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 173 bytes --]
next prev parent reply	other threads:[~2014-12-26  1:17 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-23 19:08 git: regression with mergetool and answering "n" (backport fix / add tests) Daniel Hahler
2014-12-26  1:00 ` David Aguilar
2014-12-26  1:12   ` Daniel Hahler [this message]
2015-01-23 13:19     ` Daniel Hahler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox
  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):
  git send-email \
    --in-reply-to=549CB5ED.5040804@thequod.de \
    --to=genml+git-2014@thequod.de \
    --cc=davvid@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY
  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
  Be sure your reply has a Subject: header at the top and a blank line
  before the message body.
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).