Reference

svn-arch-mirror(1)

one-way mirror from a Subversion tree to Arch

NAME

svn-arch-mirror - one-way mirror from a Subversion tree to Arch

SYNOPSIS

svn-arch-mirror [options] <command> [arguments]

DESCRIPTION

svn-arch-mirror makes it possible to track upstream Subversion repositories and replicate full project history from Subversion to Arch. This was designed for Arch users who want to track active projects which use Subversion, and for repository maintainers who wish to migrate from Subversion to Arch.

COMMON OPTIONS

The following options are common to all commands:

-h, --help

Show this help message

-c, --arch-client

Specify an Arch client, either 'tla' (default) or 'baz'

-A, --archive

Override `tla my-default-archive'

-d, --dir

Switch to target directory before executing

-l, --revision-limit

Stop tracking at this SVN revision number. This can also be specified with the -r option as -r<revision>:<revision-limit>

--no-datefudge

Don't use the datefudge command to mirror and preserve changeset dates. Use this if you don't have datefudge installed on your machine.

--no-my-id-switch

Disable switching the user id. The Creator: field of a commit log will use the normal output of my-id, and not reflect the original svn committer's name.

--no-tmp-home

Disable using a temporary $HOME directory. A temporary $HOME directory is used by svn-arch-mirror to prevent the user's main tla/baz my-id from being clobbered. Use this to enable svn-arch-mirror to work with signed archives.

--no-lint

Don't run tla tree-lint or baz lint between commits. This is needed in cases where the tree you are tracking has symlinks pointing to non-existent files.

--sign

An alias for --no-my-id-switch --no-tmp-home

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).

-r, --revision

Start tracking a Subversion tree at this revision. Takes a Subversion revision number.

--import-only

Don't automatically run 'sync' after the initial import when a tree is initialized

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.

get (categoryΩ-branch(--version(--revision)))

Constructs a project tree for a given category--branch(--version(--revision))

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).

-r, --revision

Override auto-detection of branch ancestor and tag from this Arch revision instead. Takes an Arch category--branch--version.

find-nested

Like sync-nested, but only shows you the location of the nested-trees and does not update them.

--config

Print an Arch multi-tree config of the current directory structure to stdout.

sync-nested

Same as sync, but it will recursively seek out nested trees, making it ideal for tracking an entire Subversion repository as opposed to one sub-project. This will not update the current tree if you are in one.

-1, --one-repo

If sync-nested is being run in a directory that contains working trees from only one repository, and itself is a Subversion working copy (usually the top-level root of the repository), then avoid extra network traffic if no changes are detected.

EXAMPLES

To start tracking a new working directory inside a 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

To mirror a directory that has been renamed (copied and deleted in SVN) at revision 400:

  svn co <OLD_URL> directory1 -r399
  cd directory1
  svn-arch-mirror init -l 399 <cat>--<b>--<version1>
  cd ..
  svn co <NEW_URL> directory2 -r400
  cd directory2
  svn-arch-mirror init -r 400 --ids-from ../directory1 <cat>--<b>--<version2>

* In the future, I hope to automate this process

SEE ALSO

svn help, tla help, baz help

BUGS AND LIMITATIONS

Autodetection of branch handling is imperfect due to fundamental differences in the repository models.

Subversion repositories that deviate from the structure recommended by the Subversion authors may be difficult to track.

Tracking of merges and merge history is limited because Subversion has limited support for this.

Files and directories copied within a project tree don't get history tracked. This is because Arch treats copied files as new files, whereas Subversion has no distinction between branching and copying.

The design is tended towards keeping individual working trees (trunks/tags/branches) mirrored in Arch, keeping an entire repository in Arch is possible (what sync-nested is for, but the individual working trees must be manually initialized.)

AUTHOR

Copyright (C) 2004-2005 Eric Wong <[email protected]>

This is free software; see the GNU General Public Licence version 2 (or later) for copying conditions. There is NO warranty.

History

--arch-client since Debian 4.0 (Etch); --no-datefudge since Debian 4.0 (Etch); --no-lint since Debian 4.0 (Etch); --no-my-id-switch since Debian 4.0 (Etch); --no-tmp-home since Debian 4.0 (Etch); --revision-limit since Debian 4.0 (Etch); --sign since Debian 4.0 (Etch); -c since Debian 4.0 (Etch); -l since Debian 4.0 (Etch).

--cacherev-mod until Debian 3.1 (Sarge); -C until Debian 3.1 (Sarge).