this is a very simple document that outlines some of the important
details about the mod_perl svn repository.


LAYOUT

the mod_perl project at the Apache Software Foundation lives here

  http://svn.apache.org/repos/asf/perl/

and uses the following structure

  modperl/trunk           # equivalent to cvs HEAD - currently
                          # the mod_perl 2.0 development branch

  modperl/tags            # every official mod_perl release

  modperl/docs/trunk      # the mod_perl documentation project

modperl/trunk includes the following svn:externals properties:

  % cd modperl
  % svn propedit svn:externals .
  [vi pops up]
  docs        https://svn.apache.org/repos/asf/perl/modperl/docs/trunk/src/docs/2.0
  Apache-Test https://svn.apache.org/repos/asf/httpd/test/trunk/perl-framework/Apache-Test


DEVELOPER ACCESS

assuming you have already been granted commit access to the repository,
you should follow the following steps to checkout mod_perl

  $ ssh svn.apache.org svnpasswd
  $ svn checkout https://svn.apache.org/repos/asf/perl/modperl/trunk/ mod_perl-2.0

if you want to test that your commit access is working, this file is
an acceptable place to take a test drive.


FURTHER READING

for more details, see

  http://perl.apache.org/docs/2.0/user/install/install.html

for information on getting httpd and mod_perl from svn, as well as

  http://svnbook.red-bean.com/

for svn information in general. 

svn for cvs users (including migration tools):

  http://svnbook.red-bean.com/en/1.0/apa.html



OTHER NOTES:

--------

To rescue changed files under apr/httpd cvs checkouts (i.e. to get
'cvs diff' working), one needs to switch to anoncvs:

 % cd httpd-2.0
 % find . | grep Root | xargs perl -pi -e \
's|\w+\@cvs.apache.org:/home/cvs|:pserver:anoncvs\@cvs.apache.org:/home/cvspublic|'

--------


