Introduction
============

This CGI script mirrors a source directory to a target directory using
a Subversion repository as an intermediary.  It's written as a CGI
script so that remote users making changes to a WebDAV folder can tell
the server to mirror the WebDAV folder contents to another directory
on the system.  See the example usage story below.

This script could be easily changed to run as a normal script.

Why do this?
============

1) You get versioning, diff emails, etc for the modifications to the
   source directory.
2) All changes to the source directory are backed by Subversion's
   database.
3) You have a directory remotely accessible by WebDAV and you want to
   see what changes are made to the directory, plus the ability to get
   older versions of the directory.

Sample Usage
============

This script is used in this little story.

A client has a staging and production web server.  The client wants to
remotely update the content on the staging server and then push that
content to the production server when the updated content is checked
out and ready.  I didn't want to use FTP for security reasons.
Additionally, I wanted to add the ability to track changes to the
content and send out commit emails.  Also, I wanted to use WebDAV over
HTTPS to allow the client's Microsoft Windows OS and FrontPage to
modify the content.

Since Subversion isn't a full WebDAV server that operates with
Microsoft, I hacked together this solution.

I set up a DAV directory using Apache 2's mod_dav that the clients
connect to over HTTPS.  This directory is the DocumentRoot for an
Apache 1 server (under a different username).  Any changes to this
WebDAV directory are shown immediately in the staging server.  When
everything looks fine, they use the attached CGI script which calls
svn_load_dirs.pl to mirror the staging directory exactly into the
Subversion repository.  The CGI script uses the REMOTE_USER as the
name to perform the 'svn commit' as for tracking purposes.  The
post-commit hooks then send out the diff email.  After the commit
succeeds, the CGI script then checks out the repository into the
production web server directory.

How to use it
=============

1) Get a copy of svn_load_dirs.pl, revision 3787 or later.  You can
   find it in:

      http://svn.apache.org/repos/asf/subversion/trunk/tools/client-side/

2) Edit the configuration variables in mirror_dirs_through_svn.cgi so
   it knows the location of svn, the location of svn_load_dirs.pl, the
   source directory, the target directory, and the URL to the
   directory in the Subversion repository where the source directory
   will be mirrored.

   I don't recommend using the top URL of the Subversion repository,
   because you can't create tags of the source directory.  For
   example, you may want to use a URL like

      http://svn.myserver.com/repos/trunk/mirror_this_dir

   This way you can create a tag of the source directory at special
   times.

      http://svn.myserver.com/repos/tags/mirror_this_dir/something_special

3) Set up CGI on your server and install this script.
