=head1 PRIORITIES

=over 4

=item Support dist path and dist URL targets for Import action

=item Support --fallback on Package::Locator

=item Exception hierarchy/handling

=item Remove the whole permission mechanism

=back

=head1 A LITTLE LESS IMPORTANT

=over

=item Documentation review

=item API documentation

=item Support target_perl option

=item Use standard logging module

=item More robust list action

=item Query language?

=back

=head1 IDEAS FOR COOL NEW ACTIONS

=over

=item look: Unpack archive in temp dir and launch shell there

=item ack: Do an ack command across all distributions

=item news: list recent additions. maybe something from Changes file

=item assign: change ownership of a distribution

=back

=head1 OTHER STUFF TODO

In no particular order...

=over 4

=item Implement --force option for the mirror command (always fetch new index)  WHY?

=item Implement --soft option for the mirror command (never fetch new index): WHY?

=item Enable plugins for visiting and filtering. See CPAN::Mini and
CPAN::Mini::Visit.

=item Make file/directory permissions configurable. Not sure this is needed.

=item Standardize API, using named parameters except where it makes
sense not to.

=item Write a tutorial to explain different ways for using Pinto in
the development/deployment cycle. ++

=item Generate a RECENT file.  This could just contain the files
added in the last action (if any).

=item Improve Perl::Critic compliance.

=item Document, document, document.

=item Tests, tests, tests.

=item Look for better ways to use Moose roles.

=item Look into using Path::Class::SVN or Alien::SVN instead of using
my home-grown interface to Subversion.

=item Consider using MooseX::Params::Validate on methods.

=item Consider MooseX::Declare for method signatures.

=item Profile and look for performance optimizations.

=item Add --package option to the Add action, to excplicitly 
declare what the archive provides (in case META is whack).

=back

=head1 STUFF DISCUSSED WITH RJBS

=head2 Features inspired by XPAN

=over 4

=item Add recursion to Action::Add.  

Currently, all the recursion stuff is baked into Action::Import.  So
that probably needs to pulled out into a role that both Action classes
can use.  Then the add command needs an option to turn recursion
on/off (probably on by default).

=item Implement a "dry-run" feature.  

Whenever Pinto fetches a .tar.gz, it first puts in a temporary
directory (I think).  After the packages and prereqs have been
extracted, only then does it actually place it in the repository.  So
if --dryrun is enabled, don't put it in the repository.  Also, if
--dryrun is enabled, roll back the database transaction.  There might
be multiple layers of transactions going on, so we'll have to roll
back at the right level.  Finally, each Action must return 0 if
--dryrun is enabled, to indicate that the repository state has not
changed and does not need to be committed to VCS.

=item Warn when an imported/added package conflicts with a pinned
package.  

Each time a package is added, Pinto looks at all the other packages
with the same name and sorts them according to version number, whether
it is pinned, and whether it is "local" or "foreign".  From that, it
determines what the "latest" version is and marks that to be included
in the index.  So that would probably be the time to warn if an
incoming prereq is blocked by an older pinned package.

=back

=head2 Other housekeeping chores that need to be done...

=over 4

=item Use a real logger.  

Right now, I have rolled my own simple logger -- I don't know why.
Should probably be using MooseX::Role::Loggable or something like
that.  Also, I think Pinto should record the logs to a file in the
repository (in addition to STDOUT), and that file should be committed
to VCS.

=item Optimize generation of CHECKSUMS files.  

At the moment, I'm using Adreas' module, which generates a CHECKSUMS
file by recomputing md5s for everything in the directory.  I think
this is because PAUSE is paranoid about keeping accurate CHECKSUMS.
But this makes importing/adding/mirroring slow if the author's
directory already contains a lot of dists.  Better to just compute the
md5 for the new dist and append it to the ones that are already in the
CHECKSUMS file.

=item Come up with a strategy for schema migration.  

I'm using SQLite and DBIx::Class.  Every time the database schema
changes, I break compatibility with all the existing repos (if there
are any).  So I need some way for Pinto to upgrade its own schema.  I
know there are frameworks for doing this but I just haven't learned
them.  Or maybe just use something like KiokuDB.

=item Document the architecture.  

Pinto has a pretty well-defined architecture -- there are distinct
layers and separations of concern.  It may not be the *right*
architecture, but it is definitely there.  I need to capture it on
paper so I (and others) can reason about it.

=item Document the API.  

Only the command-line interface has any real documentation.  The
internal API has started to become stable and needs to get some
documentation love.

=back

=head2 Grand wishes...

=over 4

=item I would love to make Pinto extensible in the way that
Dist::Zilla is.  

For example, I can imagine roles like BeforeAddition/AfterAddition and
BeforeRemoval/AfterRemoval that provide hooks where plugins can make
stuff happen when a dist is added or removed from the repository.
Stuff like publish the POD to a website, or tweet a notification, or
fire off a build, or run a local metacpan.  But that all may be
premature.

=back

=cut
