oracular (3) Pinto::Manual::Introduction.3pm.gz

Provided by: pinto_0.14000-2_all bug

NAME

       Pinto::Manual::Introduction - Why Pinto exists

VERSION

       version 0.14

GOALS

       Pinto has two primary goals.  First, Pinto seeks to address the problem of instability in the CPAN
       mirrors.  Distribution archives are constantly added and removed from the CPAN, so if you use it to build
       a system or application, you may not get the same result twice. Second, Pinto seeks to encourage
       developers to use the CPAN toolchain for building, testing, and dependency management of their own local
       software, even if they never plan to release it to the CPAN.

       Pinto accomplishes these goals by providing tools for creating and managing your own custom repositories
       of distribution archives.  These repositories can contain any distribution archives you like, and can be
       used with the standard CPAN toolchain.  The tools also support various operations that enable you to deal
       with common problems that arise during the development process.

PRIOR ART

       Over the last few years, I personally used various combinations of those modules to create custom
       repositories at several organizations. But they always required some wrapping and/or glue to make them
       usable  in the development process.  And none of them seemed to be designed for  extension.

       I wanted a tool that would work out-of-the-box, would accommodate a  wide range of use cases, would scale
       to a large number of users, and  could grow in unexpected directions.  And so, Pinto was born.

COMPONENTS

       The Pinto suite consists of several components, which are all included in this distribution.  For most
       use cases, you should treat Pinto as  an external application rather than a library that is integrated
       with  your own application code.  I strongly recommend reading  Pinto::Manual::Installing for tips on
       installing Pinto in the manner  that is most appropriate for your needs.

   pinto
       pinto is a command line application for creating and managing a Pinto repository.  It works transparently
       with both remote and local repositories.  However, repositories can only be created locally.

   pintod
       pintod provides a web service interface to your Pinto repository. This allows multiple (possibly remote)
       developers to manage a central repository.  pintod also functions as the back end HTTP server for
       installer clients like cpan, cpanp, and cpanm.

   Pinto and Pinto::Remote
       Pinto and Pinto::Remote are the backend libraries for the pinto application.  These are fairly stable,
       but not officially public and not documented.  If you want to hack on Pinto's internals, or create a new
       application around Pinto, you should start looking at these.

   Pinto::Server
       Pinto::Server is the backend library for the pintod server application.  It is still immature, and
       subject to radical change. It is based on raw Plack, so if you are brave you could wrap it with various
       middlewares to do interesting things.

TERMINOLOGY

       Some of the terminology related to the CPAN is overloaded, which can lead to some confusion.  So I'll try
       to define some of the key terms that I use throughout the documentation and the code.

   Archive
       An "archive" is the file that developers ship, which contains all their application/library code, test
       cases, build scripts etc. Conversely, the archive is the file that users must fetch to install the
       application/library.  Sometimes I also refer to these as "distributions".

   Package
       A "package" is something inside a distribution archive that provides some unit of functionality.  In
       Perl, packages are declared with the "package" keyword.  Some folks call these "modules" but I try to
       avoid that term because it is frequently misused.

   Prerequisite
       A "prerequisite" is a package that must be installed for the sake of another distribution archive.
       Sometimes I call these "dependencies". Pinto does not currently distinguish between different flavors of
       prerequisites, such as "build-time" or "run-time" prerequisites.

CONCEPTS

   Stack
       All CPAN-like repositories have an index which maps the latest version of each package to the archive
       that contains it.  Usually, there is only one such index.  But with Pinto, there can be many indexes.
       Each of these indexes is called a "stack".  This allows you to create different stacks of dependencies
       within a single repository.  So you could have a "development" stack and a "production" stack.  Whenever
       you add a distribution or upgrade a prerequisite, it only affects one stack.

   Pin
       Only one version of a package can exist within a stack.  So when you upgrade a package in a stack, the
       newer version replaces the older one. But sometimes, you discover that a newer version of package is
       incompatible with your application, and you want to stay with the older version until you have an
       opportunity to fix the problem.  In those situations, Pinto allows you to "pin" a particular version of a
       package to the stack.  This prevents the package from being upgraded (either directly or as a
       prerequisite for some other package).

WHY IS IT CALLED PINTO

       Pinto is a name that I sometimes use for my son Wesley (as in "pinto bean").  Daddy loves you, Wes!

SEE ALSO

       Pinto::Manual::Tutorial
           Presents a narrative explanation of how to use Pinto.

       Pinto::Manual::QuickStart
           Presents a condensed summary of pinto commands.

AUTHOR

       Jeffrey Ryan Thalhammer <jeff@stratopan.com>

       This software is copyright (c) 2015 by Jeffrey Ryan Thalhammer.

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