NAME
cpangitify - Convert cpan distribution from BackPAN to a git repository
VERSION
version 0.20
SYNOPSIS
% cpangitify Foo::Bar
DESCRIPTION
This script fetches all known revisions of a distribution from CPAN/BackPAN and creates a git repository with one revision and one tag for each version of the distribution.
The idea is to create a starting point for a git work flow when adopting a CPAN module for which you don't have access to the original repository. It is of course better to import from Subversion or to clone an existing git repository, but that may not be an option.
If the distribution you are migrating changed names during its history, simply specify each name it had on the command line. Be sure to specify the current name first (this will be used when creating a directory name for the repository). For example Mojolicious::Plugin::TtRenderer was once called MojoX::Renderer::TT
, so you would get both names in the history like this:
% cpangitify Mojolicious::Plugin::TtRenderer MojoX::Renderer::TT
OPTIONS
--resume
Resume the import from CPAN. Note that any local changes will be overwritten by the CPAN upstream (your modifications will remain in the repository history).
--output | -o directory
Creat the new repository in the given directory.
--skip version
Skip the given versions. Can be specified multiple times and can be provided as a comma separated list.
--trace
Print each git command before it is executed.
--backpan_index_url
The URL to use for the BackPAN index
--backpan_url
The URL to use for BackPAN
--metacpan_url
The URL to use for metacpan.
--branch | -b
Default branch. As on 0.18 this is main
by default. Previously the old git default was used.
--help | -h
Print out help and exit.
--version
Print out version and exit.
CAVEATS
Each commit belongs to the CPAN author who submitted the corresponding release, therefore git blame
may not be that useful for the imported portion of your new repository history.
The commits are ordered by date, so where there are interleaving of releases that belong to development and production branches this simple minded script will probably do the wrong thing.
Patches are welcome.
SEE ALSO
Here are some similar projects:
-
Comes with a
git cpan import
which does something similar. With this incantation I was able to get a repository for YAML (including history, but without authors and without the correct dates):% mkdir YAML % git init . % git cpan import --backpan YAML % git merge remotes/cpan/master
One advantage here over
cpangitify
is that you should then later be able to import/merge future CPAN releases into yours. Git::CPAN::Patch also has a bunch of other useful tools for creating and submitting patches and may be worth checking out.If you do an internet search for this sort of thing you may see references to
git-backpan-init
, but this does not appear to be part of the Git::CPAN::Patch anymore (I believegit-import
with the--backpan
option is the equivalent).In general
cpangitify
is a one trick poney (though good at that one thing), and Git::CPAN::Patch is a Batman's utility belt with documentation that (for me at least) is pretty impenetrable. -
Doesn't appear to have been updated in a number of years.
The reason I am not using the latter two is that they are designed to mirror the whole of CPAN/BackPAN, but I'm mostly just interested in one or two distributions here and there.
AUTHOR
Author: Graham Ollis <plicease@cpan.org>
Contributors:
Mohammad S Anwar (MANWAR)
COPYRIGHT AND LICENSE
This software is copyright (c) 2013-2022 by Graham Ollis.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.