Changes for version 0.025_001 - 2011-12-02
- IMPORTANT: This version of Pinto is not compatible with repositories built with any prior version. In theory, you can migrate your old repository with the right combination of pinto-admin and VCS commands. If you really want to try migrating your old repository, please contact me for guidance.
- Otherwise, you'll have to create a new repository and 'add' each of your local distributions again. If you have foreign distributions in your repository then you'll have to 'mirror' them again too, but you might not get exactly the same versions that you used to have (because they are no longer the 'latest' version on CPAN).
- I know this sucks, but it is definitely worth the upgrade. This version of Pinto is faster, more reliable, and packed with new features. And going forward, I'll be able to maintain backward compatibility or at least provide an automated migration path.
- New Features:
- Pinto now uses a SQLite database to store information. This improves performance, reduces memory consumption, and ensures data integrity. Pinto is single threaded and permits only one database connection at a time, so it is safe for NFS (or so I've been told by SQLite experts).
- Pinto now behaves more like PAUSE, and will accept distributions with overlapping packages. As always, only the 'latest' version of a package appears in the index file. And just like PAUSE, Pinto tries to figure out the lineage of packages (i.e. which version came first, second, third, etc.) by looking at version numbers and file timestamps. So you can throw a pile of archives at it without having to think about putting them in a certain order (See POD for details). You can also remove a distribution, and the "prior" versions of its packages will automatically become the latest.
- A Pinto repository can now be used with the cpan[1] utility. It should also work with cpanp[1], but I haven't tried it. And of course it still works with cpanm[1]. However, Pinto does not provide a full 01mailrc.txt.gz or 03modlist.data.gz file. So cpan[1] features that rely on those files may not work.
- Pinto can now pull foreign distributions from multiple repositories. You can use this to fall back to another repository if one of them is offline (which sometimes happens with CPAN mirrors). Or you can use this to create a network of repositories that may each have different sets of distributions. I'm not sure if this is actually a good idea, but we'll see.
- Pinto does the-right-thing with development distributions (See POD for details). And each Pinto repository now has a 'devel' configuration parameter. Setting this to a true value instructs Pinto to include development releases in the index. The default is false.
- The 'create' command for pinto-admin now accepts options that set the parameters in the config file that is generated for the new repository.
- The 'list' command for pinto-admin now accepts a --format option that can be used to customize what/how information is displayed.
- The 'remove' command for pinto-admin now works for both foreign and local distributions. However, there is a caveat when removing foreign distributions (See POD for details).
- The 'rebuild' command for pinto-admin now has a --recompute option that causes Pinto to recompute the 'latest' version of all the packages (See POD for details).
- pinto-admin now has a 'manual' command for displaying the full manual for a particular command.
- pinto-admin now has a 'version' command for displaying version information.
- pinto-admin now has a 'purge' command that removes everything from your repository. You'll be prompted for confirmation.
- pinto-admin now has an experimental 'import' command that fetches a remote package or distribution (and its dependencies, recursively) and puts all of them in your local repository.
- Most of the pinto-admin commands now have aliases. Thanks to the awesomeness of App::Cmd, you can say 'pinto-admin rm' instead of 'pinto-admin remove'. The aliases are listed in the manual for each command.
- Other Changes:
- The config files for each Pinto repsoitory are now located in $REPOS/.pinto/config.
- The 'list' command for pinto-admin has been neutered. You can no longer specify the --type or --indexed options. However, the output does show whether the package is local/foreign and indexed/unindexed, so you can grep on that to narrow the results. I'm thinking of developing a query interface to let you select which packages/distributions you want to list.
- The VCS tagging mechanism has changed. Instead of making a tag for every commit, a tag is made only when you specify the --tag option. You can still put date/time placeholders in your tag name.
- The 'noclobber' configuration setting has been removed, since it was never implemented anyway.
- The 'nocleanup' configuration setting is gone, and we no longer support automatic cleanup. Instead, you have to run the 'clean' action separately. You might want to setup a cron job for this.
- The 'update' command is now called 'mirror'. I know, I keep flip-flopping on that. But I think I've finally settled now.
- The --force option on the 'mirror' (formerly 'update') command is no longer supported. I'm thinking of changing the meaning of "force" and might bring it back in a future release.
- pinto-admin is less noisy. You won't see any output on the command line unless you set the --verbose switch or there is some kind of error or warning. Setting the --quiet switch will still suppress any non-fatal warnings.
- Bug Fixes:
- Fixed bug where Pinto might blow up with 'too many args' error the first time you update from a CPAN mirror.
Documentation
administer a Pinto repository
Modules
Command-line driver for Pinto::Admin
Base class for pinto-admin commands
add local distributions to the repository
remove all distributions that are not in the index
create a new empty repository
get selected distributions from a remote repository
list the contents of the repository
show the full manual for a command
get all the latest distributions from another repository
initialize Pinto and exit
remove all distributions from the repository
rebuild the repository index
remove distributions from the repository
report distributions that are missing
show version information
Curate your own CPAN-like repository
Base class for Actions
Add one local distribution to the repository
Remove all outdated distributions from the repository
Import a distribution (and dependencies) into the local repository
An abstract action for listing packages in a repository
Pull all the latest distributions into your repository
A no-op action
Remove all distributions from the repository
Rebuild the index file for the repository
Remove one distribution from the repository
Verify all distributions are present in the repository
Runs a series of actions
Internal configuration for a Pinto repository
Creates a new Pinto repository
Interface to the Pinto database
Exception classes for Pinto
Manages indexes files from remote repositories
Write records to an 02packages.details.txt file
Something that has an author
Something that has a configuration
Something that wants to log its activity
Synchronize concurrent Pinto actions
A simple logger
Extract packages provided/required by a distribution archive
Coordinates the database, files, and indexes
The result from running a Batch of Actions
Something that fetches remote files
Something that makes directory paths
The DBIx::Class::Schema for Pinto
Represents a distribution archive
Represents a package in a Distribution
Storage for a Pinto repository
Base class for VCS-backed Stores
Store your Pinto repository with Git
Store your Pinto repository with Subversion
A class for testing a Pinto repository
Static helper functions for testing
Static utility functions for Pinto
Utility functions for working with Subversion