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 <pshangov@yahoo.com>

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.

