Distribution::Common
Create an installable Distribution from common sources.
But really this serves to provide examples on how to create your own Distribution classes that don't
rely on a specific file system directory layout before being installed.
Synopsis
use Distribution::Common::Git;
use Distribution::Common::Tar;
use Distribution::Common::Directory;
# a local path with a .git folder
my $git-dist = Distribution::Common::Git.new($path.IO, :$force);
# a file ending in .tar.gz
my $tar-dist = Distribution::Common::Tar.new($path.IO, :$force);
# a plain directory like Distribution::Path for brevity
my $dir-dist = Distribution::Common::Directory.new($path.IO, :$force);
Classes
Distribution::Common::Tar
Installable Distribution from a .tar.gz archive
Distribution::Common::Git
Installable Distribution from a local git repo. Because this is a directory it inclusion is meant to serve as
an example as Distribution::Common::Directory will handle this similarly. In the future however it could
support changing branches
Distribution::Common::Directory
Essentially the built-in Distribution::Path but built around the Distribution::Common interface
Roles
Distribution::Common
The base for the various common distribution classes. Fulfills rakudo's Distribution role by providing its own
IO interface requirements (Distribution::IO) which do most of the actual work. It's main purpose is to fake IO::Handle
methods such as open and close for IO-like access to objects that don't need to be .open before being read.
Distribution::IO
Like rakudo's own Distribution, but with an additional requirement, ls-files, to automatically handle
the setting of $!meta{files} for Distribution::Common
Distribution::IO::Proc::Tar
Distribution::IO::Proc::Git
Extract a single file from a distribution to memory. When CompUnitRepository::Installation::Install.install accesses
such files they are written directly to their install location instead of first using an intermediate temporary location
Distribution::IO::Directory
Basically provides a recursive file listing and little else