txt: ## dist_github-ugexe-Distribution-Common.md
  ## 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
  