App-devmode
view release on metacpan or search on metacpan
bin/devmode view on Meta::CPAN
};
$session{$1} = $session{$2}
}
}
close $screen;
return map { $_ => $session{$_} } grep { $_ ne $session{$_}{pid} } keys %session;
}
# runs a ssh-agent protecting screen session
sub protect {
my ($task) = @_;
my $protect_dir = "$ENV{HOME}/.devmode_prot";
if ( !-d $protect_dir ) {
mkdir $protect_dir;
}
my $protect_rc = file $protect_dir, $task;
if ( !-f $protect_rc ) {
create_task( $task, 'rcprot', $protect_dir );
}
for my $env ( keys %ENV ) {
delete $ENV{$env} if $env =~ /ssh/i;
}
my $cmd = "$SCREEN -S PROT_$task -c $protect_rc";
if ($option{test}) {
warn $cmd;
exit 0;
}
exec $cmd or error( COULD_NOT_LAUNCH_SCREEN_PROTECTION => $cmd, $OS_ERROR );
}
sub force_title {
my ($task) = @_;
require Term::Title;
Term::Title::set_titlebar(
( $option{short} ? '' : "Devmode " )
. ( $option{title_bar} || $task )
);
return;
}
sub create_task {
my ( $task, $template, $out_dir ) = @_;
require Template;
require Template::Provider::FromDATA;
# Create the provider
my $provider = Template::Provider::FromDATA->new({
CLASSES => __PACKAGE__,
});
# Add the provider to the config
my $tt = Template->new({
LOAD_TEMPLATES => [ $provider ],
OUTPUT_PATH => $out_dir,
});
my %data = (
cwd => file('.')->absolute->resolve,
devmode => file($0)->absolute->resolve,
task => $task,
);
$tt->process( $template, \%data, lc $task ) or error( COULD_NOT_CREATE_CONFIG => $tt->error() );
return "$out_dir/$task";
}
sub auto {
my ($type) = @_;
if ( $type eq 'ssh' ) {
my @hosts
= map {
/(.*?)(?:#.*)?$/;
my ($addr, @a) = split /\s+/, $1;
@a;
}
grep {
!/^\s*$/ && !/^\s*#/
}
map {
/(.*)\n/;
$1 || $_
}
file('/etc/hosts')->slurp;
push @hosts,
map {
/(?:Host\s*)?(.*)/;
$1;
}
grep {
/^Host /
}
map {
/(.*)\n/;
$1 || $_
}
file("$ENV{HOME}/.ssh/config")->slurp;
print join ' ', uniq sort @hosts;
exit 0;
}
elsif ( $type eq 'full' ) {
my @names;
my @running;
if ( $option{server} ) {
@names = remote_cache($option{server});
}
else {
@names
= sort {
my $A = $a;
$A =~ s/(\d+)/sprintf "%05d", $1/egxms;
my $B = $b;
$B =~ s/(\d+)/sprintf "%05d", $1/egxms;
( run in 1.755 second using v1.01-cache-2.11-cpan-13bb782fe5a )