NAME
   CPAN::Local - Hack custom CPAN repos

VERSION
   version 0.009

DESCRIPTION
   CPAN::Local is a framework for creating custom CPAN implementations. The
   individual tasks related to mirror management are handled by separate
   plugins, and those plugins can be combined to achieve the desired
   behavior, or new ones can be written where further customizations is
   needed.

   There are other libraries for managing a local CPAN mirror, but while
   all of them focus on functionality, CPAN::Local focuses entirely on
   extensibility. It is insipered by Dist::Zilla and attempts to provide
   sufficient flexibility to acommodate the strangest of needs.

   This document describes the "CPAN::Local" class, which represents a
   local repository with plugins configured to perform actions on it.

ATTRIBUTES
 config_filename
   Base name of the configuration file. Default is "cpanlocal".

 config
   A Config::MVP::Sequence representing the mirror configuration. Normally
   generated by reading the configuration file (see "config_filename").

 root_namespace
   The root namespaces for plugins and roles that will be loaded. Default
   is "CPAN::Local".

 distribution_base_class
   The base class for distribution objects. Default is
   "CPAN::Local::Distribution".

 root
   The root directory of the repository. Assumes the current working
   directory by default.

 logger
   Logging facility. An instance of Log::Dispatchouli by default.

 plugins
   All plugins requested by the "config", required and instantiated.

METHODS
 plugins_with($role_name)
   Returns all plugins that implement a given role. Only the last portion
   of the role name should be passed as an argument - i.e. if $role_name is
   "Index", then all plugins implementing "CPAN::Local::Role::Index" will
   be returned.

SEE ALSO
 Other libraries for building private CPANs
   CPAN::Mini and CPAN::Mini::Inject
   Pinto
   OrePAN
   CPAN::Site
   MyCPAN::App::DPAN

 Useful modules for plugin authors
   Index files

   CPAN::Index::API
       Read and write 00whois.xml, 01mailrc.txt, 02packages.details.txt,
       and 03modlist.data

   PAUSE::Permissions
       Read 06perms.txt

   CPAN::Indexer::Mirror
       Write mirror.yml and mirror.json

   File::Rsync::Mirror::Recentfile
       Read and write RECENT-XX.json files

   Parse::CPAN::MirroredBy
       Read MIRRORED.BY

   Parse::CPAN::Distributions
       Read find-ls

   CPAN::Checksums
       Read and write checksums

   Populating a repository

   CPAN::Inject - Add a distribution tarball to a local mirror
   CPAN::Cache - Mirror a file from a remote repo

   Distribution metadata

   CPAN::DistnameInfo
       Parse a distribution filename

   Dist::Metadata
       Read a distribution META file

   CPAN::ParseDistribution
       Use regular expressions to find distribution name, version, and
       provided packages

   Perl::PrereqScanner
       Use PPI to find a distribution's dependencies

   Module::Depends::Intrusive
       Execute Makefile.PL/Build.PL to find a distribution's dependencies

   Testing

   CPAN::Faker - Build a dummy repo for testing
   CPAN::Faker::HTTPD - Build a dummy repo and serve it over http

   Miscellaneous

   CPAN::Visitor - Traverse distributions in a repo

AUTHOR
   Peter Shangov <[email protected]>

COPYRIGHT AND LICENSE
   This software is copyright (c) 2012 by Venda, Inc..

   This is free software; you can redistribute it and/or modify it under
   the same terms as the Perl 5 programming language system itself.