package Alien::Build::Plugin::Fetch::Local;
use strict;
use warnings;
use 5.008004;
use Alien::Build::Plugin;
use File::chdir;
use Path::Tiny ();
# ABSTRACT: Plugin for fetching a local file
our $VERSION = '2.84'; # VERSION
has '+url' => '';
has root => undef;
has ssl => 0;
sub init
{
my($self, $meta) = @_;
$meta->prop->{start_url} ||= $self->url;
$self->url($meta->prop->{start_url} || 'patch');
if($self->url =~ /^file:/)
{
$meta->add_requires('share' => 'URI' => 0 );
$meta->add_requires('share' => 'URI::file' => 0 );
$meta->add_requires('share' => 'URI::Escape' => 0 );
}
{
my $root = $self->root;
if(defined $root)
{
$root = Path::Tiny->new($root)->absolute->stringify;
}
else
{
$root = "$CWD";
}
$self->root($root);
}
$meta->register_hook( fetch => sub {
my($build, $path, %options) = @_;
$build->log("plugin Fetch::Local does not support http_headers option") if $options{http_headers};
$path ||= $self->url;
if($path =~ /^file:/)
{
my $root = URI::file->new($self->root);
my $url = URI->new_abs($path, $root);
$path = URI::Escape::uri_unescape($url->path);
$path =~ s{^/([a-z]:)}{$1}i if $^O eq 'MSWin32';
}
$path = Path::Tiny->new($path)->absolute($self->root);
if(-d $path)
{
return {
type => 'list',
protocol => 'file',
list => [
map { { filename => $_->basename, url => $_->stringify } }
sort { $a->basename cmp $b->basename } $path->children,
],
};
}
elsif(-f $path)
{
return {
type => 'file',
filename => $path->basename,
path => $path->stringify,
tmp => 0,
protocol => 'file',
};
}
else
{
die "no such file or directory $path";
}
});
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Alien::Build::Plugin::Fetch::Local - Plugin for fetching a local file
=head1 VERSION
version 2.84
=head1 SYNOPSIS
use alienfile;
share {
start_url 'patch/libfoo-1.00.tar.gz';
plugin 'Fetch::Local';
};
=head1 DESCRIPTION
Note: in most case you will want to use L