|
Packit |
26bf30 |
package File::Find::Object::TreeCreate;
|
|
Packit |
26bf30 |
|
|
Packit |
26bf30 |
use strict;
|
|
Packit |
26bf30 |
use warnings;
|
|
Packit |
26bf30 |
|
|
Packit |
26bf30 |
use File::Spec;
|
|
Packit |
26bf30 |
|
|
Packit |
26bf30 |
sub new
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
my $class = shift;
|
|
Packit |
26bf30 |
my $self = {};
|
|
Packit |
26bf30 |
bless $self, $class;
|
|
Packit |
26bf30 |
$self->_initialize(@_);
|
|
Packit |
26bf30 |
return $self;
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
|
|
Packit |
26bf30 |
sub _initialize
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
|
|
Packit |
26bf30 |
sub get_path
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
my $self = shift;
|
|
Packit |
26bf30 |
my $path = shift;
|
|
Packit |
26bf30 |
|
|
Packit |
26bf30 |
my @components;
|
|
Packit |
26bf30 |
|
|
Packit |
26bf30 |
if ($path =~ s{^\./}{})
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
push @components, File::Spec->curdir();
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
|
|
Packit |
26bf30 |
my $is_dir = ($path =~ s{/$}{});
|
|
Packit |
26bf30 |
push @components, split(/\//, $path);
|
|
Packit |
26bf30 |
if ($is_dir)
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
return File::Spec->catdir(@components);
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
else
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
return File::Spec->catfile(@components);
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
|
|
Packit |
26bf30 |
sub exist
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
my $self = shift;
|
|
Packit |
26bf30 |
return (-e $self->get_path(@_));
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
|
|
Packit |
26bf30 |
sub is_file
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
my $self = shift;
|
|
Packit |
26bf30 |
return (-f $self->get_path(@_));
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
|
|
Packit |
26bf30 |
sub is_dir
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
my $self = shift;
|
|
Packit |
26bf30 |
return (-d $self->get_path(@_));
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
|
|
Packit |
26bf30 |
sub cat
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
my $self = shift;
|
|
Packit |
26bf30 |
open my $in, "<", $self->get_path(@_) or
|
|
Packit |
26bf30 |
return 0;
|
|
Packit |
26bf30 |
my $data;
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
local $/;
|
|
Packit |
26bf30 |
$data = <$in>;
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
close($in);
|
|
Packit |
26bf30 |
return $data;
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
|
|
Packit |
26bf30 |
sub ls
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
my $self = shift;
|
|
Packit |
26bf30 |
opendir my $dir, $self->get_path(@_) or
|
|
Packit |
26bf30 |
return undef;
|
|
Packit |
26bf30 |
my @files =
|
|
Packit |
26bf30 |
sort { $a cmp $b }
|
|
Packit |
26bf30 |
grep { !(($_ eq ".") || ($_ eq "..")) }
|
|
Packit |
26bf30 |
readdir($dir);
|
|
Packit |
26bf30 |
closedir($dir);
|
|
Packit |
26bf30 |
return \@files;
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
|
|
Packit |
26bf30 |
sub create_tree
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
my ($self, $unix_init_path, $tree) = @_;
|
|
Packit |
26bf30 |
my $real_init_path = $self->get_path($unix_init_path);
|
|
Packit |
26bf30 |
return $self->_real_create_tree($real_init_path, $tree);
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
|
|
Packit |
26bf30 |
sub _real_create_tree
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
my ($self, $init_path, $tree) = @_;
|
|
Packit |
26bf30 |
my $name = $tree->{'name'};
|
|
Packit |
26bf30 |
if ($name =~ s{/$}{})
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
my $dir_name = File::Spec->catfile($init_path, $name);
|
|
Packit |
26bf30 |
mkdir($dir_name);
|
|
Packit |
26bf30 |
if (exists($tree->{'subs'}))
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
foreach my $sub (@{$tree->{'subs'}})
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
$self->_real_create_tree($dir_name, $sub);
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
else
|
|
Packit |
26bf30 |
{
|
|
Packit |
26bf30 |
open my $out, ">", File::Spec->catfile($init_path, $name);
|
|
Packit |
26bf30 |
print {$out} +(exists($tree->{'contents'}) ? $tree->{'contents'} : "");
|
|
Packit |
26bf30 |
close($out);
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
return 0;
|
|
Packit |
26bf30 |
}
|
|
Packit |
26bf30 |
1;
|
|
Packit |
26bf30 |
|