Skip to content

Instantly share code, notes, and snippets.

@niner
Created January 30, 2016 12:51
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save niner/8ad4cbefde16d9494e16 to your computer and use it in GitHub Desktop.
Save niner/8ad4cbefde16d9494e16 to your computer and use it in GitHub Desktop.
#!/usr/bin/env perl6
use v6.c;
role Distribution::Directory {
has IO::Path $.path;
has %!meta;
method meta() {
%!meta ||= from-json slurp ('META6.json', 'META.info').map({$.path.child($_)}).first: {$_ ~~ :f};
}
method sources() {
my %sources = self.meta<provides>;
$_ = $.path.child($_) for %sources.values;
%sources
}
method scripts() {
my %scripts;
my $bin-dir = $.path.child('bin');
if $bin-dir ~~ :d {
for $bin-dir.dir -> $bin {
my $basename = $bin.basename;
next if $basename.substr(0, 1) eq '.';
next if !$*DISTRO.is-win and $basename ~~ /\.bat$/;
%scripts{$basename} = ~$bin;
}
}
%scripts
}
method resources {
my $resources-dir = $.path.child('resources');
%( (self.meta<resources> // []).map({
$_ => $_ ~~ m/^libraries\/(.*)/
?? ~$resources-dir.child('libraries').child($*VM.platform-library-name($0.Str.IO))
!! ~$resources-dir.child('$_')
}) );
}
}
sub MAIN($from is copy = '.', :$to = 'site') {
$from = $from.IO;
my $dist-dir = Distribution::Directory.new(path => $from);
CompUnit::RepositoryRegistry.repository-for-name($to).install(
Distribution.new(|$dist-dir.meta),
$dist-dir.sources,
$dist-dir.scripts,
$dist-dir.resources,
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment