svn-arch-mirror - mirror/convert Subversion repositories to Arch

Common options:

  -A, --archive        Override `tla my-default-archive'
  -C, --cacherev-mod   Cacherev every <cachrev-mod> revisions (default: 0 / off)
  -d, --dir            Switch to target directory before executing
  -r, --revision       Tag from this Arch revision <init-branch only>

It has four operation modes:
  
  svn-arch-mirror init <category--branch--version>
  svn-arch-mirror sync
  svn-arch-mirror init-branch <FROM-category--branch> <TO-category--branch--version>
  svn-arch-mirror sync-all

Common usage:

  init <category--branch--version>

    Run from inside a designated tree-root, it will create and import a new
    <category--branch--version> from the beginning, preserving Subversion
    changes as Arch changesets.

    You may manually do a tla init-tree and change your tagging method before
    running this, and not specify a category--branch--revision.

  sync

    Run from inside a double-initialized svn/tla tree.  It will run svn up on
    all new revisions and tla commit for each one that hasn't been commited.


Advanced usage (useful for tracking large or multiple sub-projects):

  init-branch <FROM-category--branch> <TO-category--branch--version>
    
    Run from inside a designated tree-root, it will create and
    import a new <TO-category--branch--version> assuming
    <FROM-category--branch> is tracked using this tool.  Since
    Subversion lacks advanced merge-tracking, svn-arch-mirror is
    unable to track merges (merges are still recorded, but they're
    not managed in the history-sensitive manner tracked by Arch).

    Options: -r|--revision

  sync-all
    
    Same as sync, but it will recursively seek out trees, making it
    ideal for tracking an entire Subversion repository as opposed
    to one sub-project.

Features:

 - tla my-id info for each user that made the commit/import is automatically
   generated
 - Original SVN commit date is preserved, so it even looks right in abrowse
 - Intelligent branch Branches/tags are (usually) tagged to the revision of the
   trunk they first broke away from.
 - Multiple invocations supported (tempdirs are used)

Examples:

 - To start tracking a new repo:
  
    svn co <URL> directory
    cd directory
    svn-arch-mirror init <category>--<branch>--<version>
  
 - Then, to keep a tree up-to-date, run this inside a tree-root
   (you could make this a cronjob):
  
    svn-arch-mirror sync  
  
  That's it!

Requirements:

 - Perl 5 (or higher), http://www.perl.org
 - tla, Tom Lord's Arch, http://gnuarch.org
 - svn, Subversion command-line client, http://subversion.tigris.org
 - XML::Simple, Perl module for parsing XML, http://www.cpan.org
 - datefudge, fakes the system date so commit times match
   http://packages.debian.org/unstable/source/datefudge

Bugs / Limitations:

 - branch handling and new projects can only be added manually
 - autodetection of svn branching ancestry could be better

Todo:

 - improve autodetection of svn branch ancestry for people that tag revisions
   like Ticho :)
 - allow svn revision to be specified as -r (optimally, if I get autodetection
   done right, this won't be needed)

Copyright:

Copyright (C) 2004 Eric Wong <eric@petta-tech.com>

Licensed under the GNU General Public License; version 2.
See COPYING for details.

