<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Hi everyone-</div><div><br></div><div>A few months ago, I was tasked with building a private CPAN for a new client.  I had already done this a couple times before using CPAN::Site or CPAN::Mini, but I was never really happy with the results.  So this time, I started from scratch.  The result is called <a href="https://metacpan.org/release/THALJEF/Pinto-0.026">Pinto</a>, and it is now available on CPAN.  Pinto is inspired by CPAN::Mini, CPAN::Mini::Inject, and OrePAN, but adds several interesting features (listed below).</div><div><br></div><div>So I invite you to kick the tires on <a href="https://metacpan.org/release/THALJEF/Pinto-0.026">Pinto</a> and give me your feedback.  Beware that Pinto has a lot of dependencies, and I'm still not sure what the minimum versions should be.  So I recommend brewing a fresh perl or using the -L option with cpanm(1) to install Pinto into a clean (and separate) sandbox.  Pinto is still alpha code and subject to change in incompatible ways.</div><div><br></div><div>Thanks for your time.  Let me know what you think.</div><div><br></div><div>-Jeff</div><div><br></div><div><br></div><div><br></div><div><b>* Pinto supports several usage patterns:  </b>With Pinto, you can create a repository that mirrors all the latest distributions from CPAN.  Or you can create a repository with just your own private distributions.  Or you can create a repository that has all the distributions required for a particular project.  Or you can combine any of the above patterns.</div><div><br></div><div><b>* Pinto supports adding and removing distributions in the repository:  </b>Pinto gives you the power to precisely tune the contents of your repository.  For example, you can add your own locally patched CPAN distribution, and then remove it when the original author releases a fixed version.</div><div><br></div><div><b>* Pinto helps you avoid breakage due to upgrades:  </b>Pinto lets you pin your repository index to a particular version of a package, so that you can hold that package at the last know working version, while allowing other packages to be upgraded.</div><div><b><br></b></div><div><b>* Pinto can be integrated with your version control system:  </b>Pinto can automatically commit to your version control system whenever the contents of the repository changes.  This gives you reproducible and identifiable snapshots of your dependencies, and a mechanism for rollback when things go wrong.</div><div><br></div><div><b>* Pinto makes it easier to build several local repositories:  </b>Creating new Pinto repositories is easy, and each has its own configuration.  So you can have different repositories for each department, or each project, or each version of perl, or each customer, or whatever you want.</div><div><br></div><div><b>* Pinto can pull distributions from multiple remote repositories:  </b>Pinto can mirror or import distributions from multiple sources, so you can create private (or public) networks of repositories that enable separate teams or individuals to share distributions.</div><div><br></div><div><b>* Pinto supports team development:  </b>Pinto is suitable for small to medium-sized development teams, where several developers might contribute new distributions at the same time.  Pinto ensures that concurrent users don't clobber each other.</div><div><br></div><div><b>* Pinto has a robust command line interface:  </b>The pinto-admin(1) command line tool has options to control every aspect of your Pinto repository.  It is well documented and behaves in a DWIM fashion.</div><div><br></div><div><b>* Pinto can be extended:  </b>You can extend Pinto by creating Pinto::Action subclasses to perform new operations on your repository, such as extracting documentation from a distribution, or grepping the source code of several distributions.</div><div><br></div><div><br></div><div><br></div><div><br></div></body></html>