The
SVNRepositoryReplicator class provides an ability to
make a copy of an existing repository. The replicator does not
create a repository for itself, so, both repositories, source and
target, must already exist.
There's two general strategies for a replicator:
- Copying a range of revisions.
- Incremental copying (like the first one, but copies a special range of
revisions).
If the range of revisions being copied is
[start, end],
then the target repository's last revision must be
start - 1.
For example, when copying from the very beginning of a source
repository, you pass
start = 1, what means that the target
repository's latest revision must be 0.
An incremental copying means copying from a source repository a revisions
range starting at the revision equal to the target repository's latest
revision + 1 (including) and up to the source repository's latest revision (also
including). This allows to fill up missing revisions from the source repository in
the target one, when you, say, once replicated the source repository and got some extra
new revisions in it since then.
On condition that a user has got read permissions on the entire source repository and
write permissions on the destination one, replicating guarantees that for each N th
revision copied from the source repository the user'll have in the N th revision of the
destination repository the same changes in both versioned and unversioned (revision
properties) data except locks as in the source repository.
fireReplicatedEvent
protected void fireReplicatedEvent(SVNCommitInfo commitInfo)
throws SVNException Fires a replicating iteration finished event to the registered
handler.
commitInfo - commit info about the copied revision (includes revision
number, date, author)
fireReplicatingEvent
protected void fireReplicatingEvent(SVNLogEntry revision)
throws SVNException Fires a replicating iteration started event to the registered
handler.
revision - log information about the revision to
be copied
replicateRepository
public long replicateRepository(SVNRepository src,
SVNRepository dst,
boolean incremental)
throws SVNException Replicates a repository either incrementally or totally.
If
incremental is
true then
copies a range of revisions from the source repository starting at the
revision equal to
dst.getLatestRevision() + 1 (including) and
expandig to
src.getLatestRevision().
If
incremental is
false then
the revision range to copy is
[1, src.getLatestRevision()].
Both
src and
dst must be created for the root locations
of the repositories.
src - a source repository to copy fromdst - a destination repository to copy intoincremental - controls the way of copying
- the number of copied revisions
replicateRepository
public long replicateRepository(SVNRepository src,
SVNRepository dst,
long fromRevision,
long toRevision)
throws SVNException Replicates a range of repository revisions.
Starts copying from
fromRevision (including) and expands to
toRevision. If
fromRevision <= 0 then it defaults
to revision 1. If
toRevision doesn't lie in
(0, src.getLatestRevision()],
it defaults to
src.getLatestRevision(). The latest revision of the
destination repository must be equal to
fromRevision - 1, where
fromRevision is
already a valid revision.
The replicator uses a log operation to investigate the changed paths in every
revision to be copied. So, for each revision being replicated an appropriate
event with log information for that revision is
fired
to the registered
handler (if any). Also during each copy
iteration the replicator tests the handler's
checkCancelled()
method to check if the replication operation is cancelled. At the end of the copy operation
the replicator
fires yet one event with commit information about the replicated revision.
Both
src and
dst must be created for the root locations
of the repositories.
src - a source repository to copy fromdst - a destination repository to copy intofromRevision - a start revisiontoRevision - a final revision
- the number of revisions copied from the source repository
setReplicationHandler
public void setReplicationHandler(ISVNReplicationHandler handler)
Registers a replication handler to this replicator. This handler
will be notified of every revision to be copied and provided with
corresponding log information (taken from the source repository)
concerning that revision. Also the handler is notified as a next
source repository revision is already replicated, this time the
handler is dispatched commit information on the revision. In
addition, during each replicating iteration the handler is used
to check whether the operation is cancelled.
handler - a replication handler