package Alien::Build::Plugin::Fetch::LocalDir;
use strict;
use warnings;
use 5.008004;
use Alien::Build::Plugin;
use File::chdir;
use Path::Tiny ();
# ABSTRACT: Plugin for fetching a local directory
our $VERSION = '2.84'; # VERSION
has root => undef;
has ssl => 0;
sub init
{
my($self, $meta) = @_;
my $url = $meta->prop->{start_url} || 'patch';
$meta->add_requires('configure' => 'Alien::Build::Plugin::Fetch::LocalDir' => '0.72' );
if($url =~ /^file:/)
{
$meta->add_requires('share' => 'URI' => 0 );
$meta->add_requires('share' => 'URI::file' => 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::LocalDir does not support http_headers option") if $options{http_headers};
$path ||= $url;
if($path =~ /^file:/)
{
my $root = URI::file->new($self->root);
my $url = URI->new_abs($path, $root);
$path = $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 => 'file',
filename => $path->basename,
path => $path->stringify,
tmp => 0,
protocol => 'file',
};
}
else
{
$build->log("path $path is not a directory");
$build->log("(you specified $url with root @{[ $self->root ]})");
die "$path is not a directory";
}
}
);
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Alien::Build::Plugin::Fetch::LocalDir - Plugin for fetching a local directory
=head1 VERSION
version 2.84
=head1 SYNOPSIS
use alienfile;
share {
start_url 'patch/libfoo-1.00/';
plugin 'Fetch::LocalDir';
};
=head1 DESCRIPTION
Note: in most case you will want to use L