The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

apc2svn - Import APC into subversion with resume-where-it-left-off

SYNOPSIS

 apc2svn --h # describes all options

DESCRIPTION

Apply Rafael's perlpatch2svn to all diffs in APC skipping already applied patches. An initial run of this script took on my 1 GHz Athlon about 12 hours. Update 2003-09: 17 hours with my Athlon 2800. Yes, subversion is getting slower.

We assume, our current directory can be used as a working directory with only one subdirectory: APC. This is a mirror of

  rsync://ftp.linux.activestate.com/all-of-the-APC-for-mirrors-only/

We further assume that the --url parameter is either an empty Subversion repository or one left over from a previous session. It should provide space for several GB of data. Note that after svnadmin create you need to tweak the db/DB_CONFIG file: increase the values of the three lock variables to 8000. Run an svnadmin recover afterwards. The latter may be redundant, but better safe than sorry.

The partition holding the svn repository should either have about 12 GB or you must remove BerkeleyDB log files while the script is running. See db_archive how to do that. If the log files are removed, subversion needs hardly more space than the pure compressed patches.

The current directory is assumed to be a working directory for our own work. This script will create the subdirectory perl-wc/ (configurable via the --wc option), and we'll untar all historic perl distributions within the current directory, so we will create temporary directories like perl5.004_52 etc.

Note http URLs: performance was catastrophic for me via http/DAV. Note file URLs: User must be same group as owner, umask should be 002. File URLs did not work for me for unknown reasons with subversion before 0.17.1. They worked fine with 0.17.1 and BerkeleyDB 4.0.14

REPOSITORY LAYOUT

The following file system layout is realized in the repository:

  trunk/
  branches/
           perl/
                5.004_50/
                ...
                5.6.0/
                ...
                5.8.0/
                ...
                5.9.0/                  not before there is a perl-5.9.0.tar.gz
           maint-5.004/
                       mbranch/
                       rel/
                           5.004_00/
                           5.004_01/
                           5.004_02/
                           5.004_03/
                           5.004_04/
                           5.004_05/
           maint-5.005/
                       mbranch/
                       rel/
                           5.005_01/
                           5.005_02/
                           5.005_03/
                           5.005_04/    not before there is a perl-5.005_04.tar.gz
           maint-5.6/
                     mbranch/
                     rel/
                         5.6.1/
                         5.6.2/         not before there is a perl-5.6.2.tar.gz
           maint-5.8/
                     mbranch/
                     rel/
                         5.8.1/         not before there is a perl-5.8.1.tar.gz
  tags/
       branchpoints/
                    5.004_00/
                    5.004_01/
                    ...
                    5.004_50/
                    ...
       releases/
                perl5.004.tar.gz/
                perl5.004_01.tar.gz/
                perl5.004_02.tar.gz/
                perl5.004_03.tar.gz/
                perl5.004_04.tar.gz/
                perl5.004_05.tar.gz/
                perl5.004_50.tar.gz/
                perl5.004_51.tar.gz/
                perl5.004_52.tar.gz/
                perl5.004_53.tar.gz/
                ...

The final layout is still subject to change and will be discussed on the Perl5-porters mailing list.

The directory branches/perl/ contains perl releases made from the trunk. There is already integrated the diff between the branchpoint and the final release. One can find the branchpoint in tags/branchpoints/, too, and the final release in tags/releases/.

Apc2svn sets a property "perl:release" as soon as a release is integrated. From that point in time they should be regarded as read-only.

All branches/maint-*/mbranch/ directories contain the respective maintainance branches themselves. If new patches for any of them turn up, they are integrated there.

branches/maint-*/rel/ contains releases from the corresponding maintainance track. As with the trunk we find the branchpoints in tags/branchpoints/ too and the final releases are duplicated in tags/releases/.

All that implies that only the trunk/ directory and the branches/maint-*/mbranch/ directories should be regarded read-write.

BUGS

Error checking of the many calls to external programs need some more work. Currently many failures of external programs are tolerated.

PREREQUISITES

Same prerequisites as mentioned in patchaperlup. Additionally makepatch and applypatch by Johan Vromans (CPAN author JV), svn, zcat, tar.

AUTHOR

andreas.koenig@anima.de and Rafael Garcia-Suarez