Re: [PATCH 6/9] difftool: replace system call with Git::command_noisy

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Mar 16, 2012 at 6:59 PM, Tim Henigan <tim.henigan@xxxxxxxxx> wrote:
> The Git.pm module includes functions intended to standardize working
> with Git repositories in Perl scripts. This commit teaches difftool
> to use Git::command_noisy rather than a system call to run the diff
> command.

Git::command_noisy() calls _cmd_exec() which calls _execv_git_cmd()
which does a fork() + exec('git', @_) + waitpid();

We were avoiding exec() for portability reasons, as Alex explained in
677fbff88f368ed6ac52438ddbb530166ec1d5d1:

# ActiveState Perl for Win32 does not implement POSIX semantics of
# exec* system call. It just spawns the given executable and finishes
# the starting program, exiting with code 0.
# system will at least catch the errors returned by git diff,
# allowing the caller of git difftool better handling of failures.

Is this no longer a concern?  Does Git.pm need a similar portability
caveat, or  does it avoid the problem altogether since it uses fork()
+ exec() + waitpid()?  (if this is true then it implies that this
change is fine).

I have not read the rest of this series yet, so apologies if these
questions were answered elsewhere.

In general, I am a little nervous about having difftool copy worktree
content somewhere temporary only to copy it back in later.  Is there
some way to make the diff machinery reuse the worktree?  I was under
the impression that we could do some GIT_INDEX tricks to do it, though
I will admit that I did not read that suggestion in depth, nor did I
grasp whether this was the problem it was meant to address.

Thoughts?


>
> Signed-off-by: Tim Henigan <tim.henigan@xxxxxxxxx>
> ---
>  git-difftool.perl |   10 +---------
>  1 file changed, 1 insertion(+), 9 deletions(-)
>
> diff --git a/git-difftool.perl b/git-difftool.perl
> index 9495f14..8498089 100755
> --- a/git-difftool.perl
> +++ b/git-difftool.perl
> @@ -72,12 +72,4 @@ elsif (defined($no_prompt)) {
>
>  $ENV{GIT_PAGER} = '';
>  $ENV{GIT_EXTERNAL_DIFF} = 'git-difftool--helper';
> -my @command = ('git', 'diff', @ARGV);
> -
> -# ActiveState Perl for Win32 does not implement POSIX semantics of
> -# exec* system call. It just spawns the given executable and finishes
> -# the starting program, exiting with code 0.
> -# system will at least catch the errors returned by git diff,
> -# allowing the caller of git difftool better handling of failures.
> -my $rc = system(@command);
> -exit($rc | ($rc >> 8));
> +git_cmd_try { Git::command_noisy(('diff', @ARGV)) } 'exit code %d';
> --
> 1.7.9.1.290.gbd444
>



-- 
David
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]