Dist-Zilla-Role-Tempdir
view release on metacpan or search on metacpan
lib/Dist/Zilla/Tempdir/Dir.pm view on Meta::CPAN
has '_input_files' => (
isa => 'HashRef',
traits => [qw( Hash )],
is => ro =>,
lazy => 1,
default => sub { {} },
handles => {
'_set_input_file' => 'set',
'_all_input_files' => 'values',
'_has_input_file' => 'exists',
},
);
has '_output_files' => (
isa => 'HashRef',
traits => [qw( Hash )],
is => ro =>,
lazy => 1,
default => sub { {} },
handles => {
'_set_output_file' => 'set',
'files' => 'values',
},
);
sub add_file {
my ( $self, $file ) = @_;
my $state = Dist::Zilla::Tempdir::Item::State->new(
file => $file,
storage_prefix => $self->_tempdir,
);
$state->write_out;
$self->_set_input_file( $file->name, $state );
return;
}
sub update_input_file {
my ( $self, $file ) = @_;
my $update_item = Dist::Zilla::Tempdir::Item->new( name => $file->name, file => $file->file, );
$update_item->set_original;
if ( not $file->on_disk ) {
$update_item->set_deleted;
}
elsif ( $file->on_disk_changed ) {
$update_item->set_modified;
my %params = ( name => $file->name, content => $file->new_content );
if ( Dist::Zilla::File::InMemory->can('encoded_content') ) {
$params{encoded_content} = delete $params{content};
}
$update_item->file( Dist::Zilla::File::InMemory->new(%params) );
}
$self->_set_output_file( $file->name, $update_item );
return;
}
sub update_disk_file {
my ( $self, $fullname ) = @_;
my $fullpath = path($fullname);
my $shortname = $fullpath->relative( $self->_tempdir );
my %params = ( name => "$shortname", content => $fullpath->slurp_raw );
if ( Dist::Zilla::File::InMemory->can('encoded_content') ) {
$params{encoded_content} = delete $params{content};
}
my $item = Dist::Zilla::Tempdir::Item->new(
name => "$shortname",
file => Dist::Zilla::File::InMemory->new(%params),
);
$item->set_new;
$self->_set_output_file( "$shortname", $item );
return;
}
sub update_input_files {
my ($self) = @_;
for my $file ( $self->_all_input_files ) {
$self->update_input_file($file);
}
return;
}
sub update_disk_files {
my ($self) = @_;
for my $filename ( Path::Iterator::Rule->new->file->all( $self->_tempdir->stringify ) ) {
next if $self->_has_input_file( path($filename)->relative( $self->_tempdir ) );
$self->update_disk_file($filename);
}
return;
}
sub run_in {
my ( $self, $code ) = @_;
## no critic ( ProhibitLocalVars )
local $CWD = $self->_tempdir->stringify;
return $code->($self);
}
sub keepalive {
my $nargs = my ( $self, $keep ) = @_;
my $path = $self->_tempdir;
if ( $nargs < 2 ) {
return $path;
}
if ($keep) {
$path->[Path::Tiny::TEMP]->unlink_on_destroy(0);
}
else {
$path->[Path::Tiny::TEMP]->unlink_on_destroy(1);
}
return $path;
}
( run in 1.907 second using v1.01-cache-2.11-cpan-39bf76dae61 )