Padre::Task::File - File operations in the background


Padre documentation Contained in the Padre distribution.

Index


Code Index:

NAME

Top

Padre::Task::File - File operations in the background

SYNOPSIS

Top

  # Recursively delete
  Padre::Task::File->new(
    remove => 'C:\foo\bar\baz',
  )->schedule;

DESCRIPTION

Top

The File::Remove CPAN module is a specialised package for deleting files or recursively deleting directories.

As well as providing the basic support for recursive deletion, it adds several other important features such as removing readonly limits on the fly, taking ownership of files if permitted, and moving the current working directory out of the deletion path so that directory cursors won't block the deletion (a particular problem on Windows).

The task takes the name of a single file or directory to delete (for now), and proceeds to attempt a recursive deletion of the file or directory via the File::Remove remove method.

In the future, this module will also support more types of file operations and support the execution of a list of operations.

METHODS

Top

new

  my $task = Padre::Task::File->new(
      remove => '/foo/bar/baz',
  );

Creates a new deletion task.

Takes a single parameter remove which must be an absolute path to the file to delete (as the "current directory" may change between the time the removal task is created and when it is executed).

remove

The remove accessor returns the absolute path of the file or directory the task will try to delete (or tried to delete in the case of completed tasks).

SEE ALSO

Top

Padre, Padre::Task, File::Remove

COPYRIGHT

Top


Padre documentation Contained in the Padre distribution.
package Padre::Task::File;

use 5.008;
use strict;
use warnings;
use File::Spec  ();
use Padre::Task ();

our $VERSION = '0.86';
our @ISA     = 'Padre::Task';





######################################################################
# Constructor

sub new {
	my $self = shift->SUPER::new(@_);

	# Check the path to remove
	unless ( defined $self->remove ) {
		die "Missing or invalid path";
	}
	unless ( File::Spec->file_name_is_absolute( $self->remove ) ) {
		die "File path is not absolute";
	}

	return $self;
}

sub remove {
	$_[0]->{remove};
}





######################################################################
# Padre::Task Methods

sub run {
	my $self = shift;

	# Do not check for the path existing at prepare time as this involves
	# a blocking stat call. Better to just pass it through and do the file
	# existance check and any resulting shortcuts in the background.
	my $path = $self->remove;
	unless ( -e $path ) {
		return 1;
	}

	# Hand off to the specialist module
	require File::Remove;
	$self->{removed} = [ File::Remove::remove( \1, $path ) ];

	return 1;
}

1;