[PATCH] Wait for git diff to finish in git difftool
- From
Alex Riesen <raa.lkml@gmail.com>
- Date
- Apr 22, 2009, 07:27 UTC
- Message-ID
- <81b0412b0904220027t7afd1ed7xc57c479ef8cdb6b9@mail.gmail.com>
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>:
Show 6 quoted lines
> +# 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