Browse Source

Git.pm: Try to support ActiveState output pipe

The code is stolen from git-annotate and completely untested since
I don't have access to any Microsoft operating system now. Someone
ActiveState-savvy should look at it anyway and try to implement
the input pipe as well, if it is possible at all; also, the implementation
seems to be horribly whitespace-unsafe.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Petr Baudis 19 years ago committed by Junio C Hamano
parent
commit
a6065b548f
  1. 48
      perl/Git.pm

48
perl/Git.pm

@ -663,7 +663,17 @@ sub _command_common_pipe { @@ -663,7 +663,17 @@ sub _command_common_pipe {
}
_check_valid_cmd($cmd);

my $pid = open(my $fh, $direction);
my $fh;
if ($^O eq '##INSERT_ACTIVESTATE_STRING_HERE##') {
# ActiveState Perl
#defined $opts{STDERR} and
# warn 'ignoring STDERR option - running w/ ActiveState';
$direction eq '-|' or
die 'input pipe for ActiveState not implemented';
tie ($fh, 'Git::activestate_pipe', $cmd, @args);

} else {
my $pid = open($fh, $direction);
if (not defined $pid) {
throw Error::Simple("open failed: $!");
} elsif ($pid == 0) {
@ -676,6 +686,7 @@ sub _command_common_pipe { @@ -676,6 +686,7 @@ sub _command_common_pipe {
}
_cmd_exec($self, $cmd, @args);
}
}
return wantarray ? ($fh, join(' ', $cmd, @args)) : $fh;
}

@ -749,4 +760,39 @@ sub AUTOLOAD { @@ -749,4 +760,39 @@ sub AUTOLOAD {
sub DESTROY { }


# Pipe implementation for ActiveState Perl.

package Git::activestate_pipe;
use strict;

sub TIEHANDLE {
my ($class, @params) = @_;
# FIXME: This is probably horrible idea and the thing will explode
# at the moment you give it arguments that require some quoting,
# but I have no ActiveState clue... --pasky
my $cmdline = join " ", @params;
my @data = qx{$cmdline};
bless { i => 0, data => \@data }, $class;
}

sub READLINE {
my $self = shift;
if ($self->{i} >= scalar @{$self->{data}}) {
return undef;
}
return $self->{'data'}->[ $self->{i}++ ];
}

sub CLOSE {
my $self = shift;
delete $self->{data};
delete $self->{i};
}

sub EOF {
my $self = shift;
return ($self->{i} >= scalar @{$self->{data}});
}


1; # Famous last words

Loading…
Cancel
Save