Re: [PATCH 07/14] t7800-difftool.sh: Fix a test failure on Cygwin
From: David Aguilar <hidden>
Date: 2016-06-15 22:50:16
On Tue, Dec 14, 2010 at 06:27:48PM +0000, Ramsay Jones wrote:
quoted hunk ↗ jump to hunk
In particular, test 14 'difftool last flag wins' fails. This is caused by git-difftool.perl passing both GIT_DIFFTOOL_NO_PROMPT (='true') and GIT_DIFFTOOL_PROMPT (='true') to the difftool helper script. Despite the appropriate key being deleted from the ENV hash, it seems that once a key has been set in the hash, it gets passed along to the system() call. (ie deleting the key does not do the equivalent of unsetenv()). In order to fix the problem, we keep track of the required prompt state while processing the arguments, and then set the relevant ENV hash key only once at the end. Signed-off-by: Ramsay Jones <redacted> --- git-difftool.perl | 12 ++++++++---- 1 files changed, 8 insertions(+), 4 deletions(-)diff --git a/git-difftool.perl b/git-difftool.perl index e95e4ad..ced1615 100755 --- a/git-difftool.perl +++ b/git-difftool.perl@@ -52,6 +52,7 @@ sub generate_command my @command = (exe('git'), 'diff'); my $skip_next = 0; my $idx = -1; + my $prompt = '';
Would it be simpler to set $prompt = 1 and then flip it to 0 when -y | or --no-prompt is supplied?
quoted hunk ↗ jump to hunk
for my $arg (@ARGV) { $idx++; if ($skip_next) {@@ -89,13 +90,11 @@ sub generate_command next; } if ($arg eq '-y' || $arg eq '--no-prompt') { - $ENV{GIT_DIFFTOOL_NO_PROMPT} = 'true'; - delete $ENV{GIT_DIFFTOOL_PROMPT}; + $prompt = 'no'; next; } if ($arg eq '--prompt') { - $ENV{GIT_DIFFTOOL_PROMPT} = 'true'; - delete $ENV{GIT_DIFFTOOL_NO_PROMPT}; + $prompt = 'yes'; next; } if ($arg eq '-h' || $arg eq '--help') {@@ -103,6 +102,11 @@ sub generate_command } push @command, $arg; } + if ($prompt eq 'yes') {
This would become:
if ($prompt) {
...
}
else {
...
}
+ $ENV{GIT_DIFFTOOL_PROMPT} = 'true';
+ } elsif ($prompt eq 'no') {
+ $ENV{GIT_DIFFTOOL_NO_PROMPT} = 'true';
+ }
return @command
}
--
1.7.3
-- David