package Git::PurePerl::Protocol::SSH;
use Moose;
use MooseX::StrictConstructor;
use Moose::Util::TypeConstraints;
use IPC::Open2;
use namespace::autoclean;
extends 'Git::PurePerl::Protocol';
has 'hostname' => ( is => 'ro', isa => 'Str', required => 1 );
has 'username' => ( is => 'ro', isa => 'Str', required => 0 );
has 'path' => ( is => 'ro', isa => 'Str', required => 1 );
sub connect_socket {
my $self = shift;
my ($read, $write);
my $connect = join('@', grep {defined} $self->username, $self->hostname);
my $pid = open2(
$read, $write,
"ssh", $connect,
"-o", "BatchMode yes",
"git-upload-pack", $self->path,
);
$read->autoflush(1);
$write->autoflush(1);
$self->read_socket($read);
$self->write_socket($write);
}
1;