All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Wait for git diff to finish in git difftool
@ 2009-04-22  7:27 Alex Riesen
  2009-04-22  8:26 ` David Aguilar
  0 siblings, 1 reply; 14+ messages in thread
From: Alex Riesen @ 2009-04-22  7:27 UTC (permalink / raw)
  To: David Aguilar; +Cc: gitster, git, charles, markus.heidelberg

In ActivetState Perl, exec does not wait for the started program. This
breaks difftool tests and may cause unexpected behaviour: git difftool
has returned, but the rest of code (diff and possibly the interactive
program are still running in the background.

---
 git-difftool.perl |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

2009/4/6 David Aguilar <davvid@gmail.com>:
> +# Ensures that git-difftool ignores bogus --tool values
> +test_expect_success 'difftool ignores bad --tool values' '
> +       diff=$(git difftool --no-prompt --tool=bogus-tool branch)
> +       test "$?" = 1 &&
> +       test "$diff" = ""
> +'

This breaks in that piece of ActiveState Perl if git-difftool is to
continue to use exec: exec*(2) semantics are not available there
(as they are not possible in Windows at all).

In this case the script will spawn git-diff and immediately exit with 0.
git-diff will run the bogus-tool in "background" later.

I usually don't care for exit code in a pure UI tool, so the kill signal
is just ORed together with the real exit code just to provide indication
of error.

diff --git a/git-difftool.perl b/git-difftool.perl
index 948ff7f..bd828c2 100755
--- a/git-difftool.perl
+++ b/git-difftool.perl
@@ -82,4 +82,5 @@ sub generate_command
 }

 setup_environment();
-exec(generate_command());
+my $rc = system(generate_command());
+exit($rc | ($rc >> 8));
-- 
1.6.3.rc0.45.g63634

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

end of thread, other threads:[~2009-04-23 19:19 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-04-22  7:27 [PATCH] Wait for git diff to finish in git difftool Alex Riesen
2009-04-22  8:26 ` David Aguilar
2009-04-22 11:04   ` Alex Riesen
2009-04-22 18:59     ` Junio C Hamano
2009-04-22 20:40       ` Alex Riesen
2009-04-23  4:21         ` Junio C Hamano
2009-04-23  7:33           ` Alex Riesen
2009-04-23  8:26             ` Junio C Hamano
2009-04-23  9:52               ` Alex Riesen
2009-04-23 14:00                 ` Sverre Rabbelier
2009-04-23 14:51                 ` Junio C Hamano
2009-04-23 18:57                   ` Alex Riesen
2009-04-23 19:08                     ` Alex Riesen
2009-04-23 19:18                       ` [PATCH] Explain seemingly pointless use of system in difftool Alex Riesen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.