rsvndump(1)
===========
:doctype:       manpage
:man source:    rsvndump
:man version:   {version}
:man manual:    User commands


NAME
----
rsvndump - Dumps a remote Subversion repository


SYNOPSIS
--------
*rsvndump* ['options'] 'url'


DESCRIPTION
-----------
*rsvndump* dumps a Subversion repository without having actual access to the
repository data, as required by the "*svnadmin*(1) dump" command.

If invoked with valid options, *rsvndump* will print a dump file to 'stdout'
and optional progress to 'stderr'.

Since *rsvndump* is also able to dump sub-directories of a repository, the revision
numbers in the dump don't necessarily reflect the original revision numbers.
For more information on this, please refer to the *REVISION NUMBERS* section.

There are also some additional differences to a "normal" dump generated
by *svnadmin*(1), which are listed in *DIFFERENCES TO SVNADMIN DUMP*.


OPTIONS
-------
Most of the options can also be found in *svnadmin*(1) and *svn*(1) and should
be semantically equivalent, unless not stated otherwise.


*-h*::
*--help*::
Print a nice help screen

*-q*::
*--quiet*::
Don't print any progress

*-v*::
*--verbose*::
Print detailed progress, similar to "*svnadmin*(1) load". Can be specified
multiple times.

*-u*::
*--username* 'username'::
User name for repository authentication.

*-p*::
*--password* 'password'::
Password for repository authentication.

*-r*::
*--revision* 'X' or 'X:Y'::
Specify the revision (or revision range) that should be dumped. 'X'
and 'Y' can either be a number or "HEAD".
The default revision range is "0:HEAD", i.e. the complete revision
history.
+
In contrast to *svnadmin*(1), dumps that were generated using this option
can always be loaded into a new repository, (unless *--incremental* is given,
of course). However, the resulting dump may not exactly represent the original
history. Please take a look at *DIFFERENCES TO SVNADMIN DUMP* for further
information.

*--deltas*::
Use text deltas instead of full texts in dump output

*--incremental*::
Create incremental output, suitable for concatenation. This results 
in a dump that does not contain a dumpfile header and no full base
revision if the revision range does not start at 0.

*--no-auth-cache*::
Don't cache the authentication tokens provided by the user, e.g. user
name and password, or manual SSL certificate validation. This is equal
to the corresponding option in *svn*(1).

*--non-interactive*::
Instead of prompting, the program will exit with an error. This is equal
to the corresponding option in *svn*(1).

*--config-dir* 'dir'::
Use the given Subversion configuration directory when opening a session
to the repository. This is equal to the corresponding option in *svn*(1).

*--prefix* 'prefix'::
Prepend a given prefix to every node which is dumped. The first
revision dumped will also contain the paths necessary to create the
prefix.
+
Please note that is assumed that prefix is really just a prefix
string, with directories separated by "/". Therefore you need to
append a "/" at the end of the string to make it a directory.
For example, a prefix of *myrepo/old_* might result in the following
layout:
----
myrepo 
 |- old_branches
 |- old_tags
 |- old_trunk
----

*--keep-revnums*::
Keep the revision numbers in the output in sync with the repository.
This is done by inserting empty revisions for padding if necessary.

*--no-incremental-header*::
Don't print the dumpfile header if --incremental is given and the
revision range is not "0:X". This is useful if you really want
to append an incremental dumps to an existing file.

*-n*::
*--dry-run*::
Don't fetch text deltas, resulting in a dump without file contents.
This is mainly used for debugging purposes, as the program operates
normally but runs much faster.

*--obfuscate*::
Replaces all file and directory names with random strings. This is
useful for bug reports in combination with *--dry-run*.


REVISION NUMBERS
----------------
The revision numbers in the dump output depend on the options and the path that
are given to *rsvndump*. If you are dumping the root of a repository, you
don't need to worry about revision numbers out of sync, of course. If you
are dumping a sub-directory, only the revisions that changed this sub-directory
will occur in the dump output. The revision numbers in the dump are strictly
sequential, so they will differ from the original ones.

If you need the keep the revision numbers from the original repository (e.g,
if a bug tracker depends on them), you can use the *--keep-revnums* flag. It 
pads revisions that did not change the sub-directory with empty revisions.
They don't have an author or date property, but contain the log message
"This is an empty revision for padding.".


DIFFERENCES TO SVNADMIN DUMP
----------------------------
The output generated by *rsvndump* may differ from the one generated by
*svnadmin*(1) because *rsvndump* may handle file or directory copies
different than *svnadmin*(1). The latter does not support dumping of
sub-directories within a repository out of the box. Instead, the
*svndumpfilter*(1) tool will do this job. However, sometimes sub-directories
cannot be filtered exclusively with *svndumpfilter*(1) because they have been
copied from another place.

Since *rsvndump* has been designed to allow dumps of sub-directories even if your
repository access is limited to this sub-directory, it will not access
sub-directories other than the one you want to dump. Example given, dumping a
branch will most likely not result in the full history of the branch as it might
have been copied from trunk at some point in time.

Thus, *rsvndump* will generally replace a copy action by a simple add
operation if both of the following conditions are true:

 * The source of the copy is outside the directory tree which is being dumped

 * The source of the copy is not included in the dump because the revision
   range has been limited using the *--revision* flag

The second condition is without effect if the *--incremental* flag is given,
so that incremental dumps yield the same result as normal dumps.

The dump will only contain the repository's UUID if the following conditions are
true:

 * The root of the repository is being dumped
 
 * There is no user prefix


ENVIRONMENT VARIABLES
---------------------
*TMPDIR*::
If *TMPDIR* is set, it specifies the directory to use for temporary files.
Otherwise, */tmp* is used.



EXIT STATUS
-----------
0 on success, 1 on failure. Any error messages will be printed to 'stderr'.


SEE ALSO
--------
*svn*(1), *svnadmin*(1), *svndumpfilter*(1)


AUTHOR
------
Written by Jonas Gehring, <\jonas@jgehring.net>


COPYRIGHT
---------
Copyright (C) 2008-present Jonas Gehring <\jonas@jgehring.net>.
Released under the GNU General Public License.
