= repotool(1) =
:doctype: manpage

== NAME ==
repotool - operate on aany supporteed repository type in a uniform way

== SYNOPSIS ==

*repotool* 'command' [-d | -q | -v] [args...]

[[description]]
== DESCRIPTION ==

repotool is a wrapper around repository operations that differ by
version-control system.  It is little use by itself, existing mainly
to generate and simplify a conversion makefile usable with
reposurgeon(1).

Not all actions are supported on all systems.  You will get an
error message and a return value of 1 when attempting an unsupported
action.

With the -v option, report the commands executed just before
they are run. With the -q option, only fatal errors are printed
instead of non-fatal gripes. The -q and -v options also disable each
other and only the last one will take effect.

With the -d option, change to a specified directory before performing
whatever operation was selected. If the directory doesn't exist or
can't be searched into, that's a fatal error.

The following subcommands are available:

include::toolcommands.inc[]

There is one special checkout option:

-o::
	Pass the following option through to the underlying
	checkout command. Can be used, for example, to pass
	in Subversion's --ignore-externals option.

The compare operation accepts the following options:

-n::
	Subversion-only. Passed to the individual checkout commands which means that
	in cases where it makes sense the complete repository will be checked
	out as a flat one, treating branch and tag namespaces as simple
	directories.

-a::
	Subversion-only. Use an empty directory
	as the checkout if the asked branch or tag cannot be found, instead of
	erroring out without any comparison. This is useful when if the other
	repository uses empty content for deleted refs.

-u::
	Emit unified diff (default).

-c::
	Emit context diff.

-q::
	Suppress nonfatal errors and progress spinners. The progress
	sinner is also suppressed when output is redirected to a
	file or pipe.

-s::
	List matching files.

-i::
	Perform comparison of normally ignored dot directories

[[environment]]
== ENVIRONMENT VARIABLES ==

This program uses the $TMPDIR environment variable, defaulting
to '/tmp' if it is not set, to set where checkouts for repository
comparisons are done.

[[return-values]]
== RETURN VALUES ==

1 on invalid arguments or if a command called by the script failed, 0
otherwise.  A return value of 0 on a compare operation does *not*
necessarily indicate a clean comparison; only empty output does that.

[[bugs]]
== BUGS ==

CVS repositories have an unnamed default branch.  This is not
listed by "repotool branches"; if there are no named branches the
output is empty.

When a Subversion file is part of a mismatch, the displayed
filename is missing its trunk/tag/branch location, which
must be inferred from the way the comparison is invoked.

Tag comparisons with git will not cope well with a branch
name containing the string "detached".

Due to extreme slowness of the Subversion checkout operation,
the compare head, tag, and branch modes assume that if one of the
directories is a Subversion checkout you have done a full checkout of
HEAD before calling this tool; thus no svn update operation is
required unless you give an -r option.  Spurious errors will be
reported if the directory is not a full checkout of HEAD.  To avoid
this optimization and force updating, do "-r HEAD".

There is no support for RCS or SCCS collections.

[[requirements]]
== REQUIREMENTS ==

The export action is a wrapper around either native export facilities
or the following engines: cvs-fast-export(1) (for CVS), svnadmin(1)
(for SVN), reposurgeon itself (for hg).  You must have the
appropriate engine in your $PATH for whatever kind of repository you
are streaming.

 [[see_also]]
== SEE ALSO ==

reposurgeon(1).

[[author]]
== AUTHOR ==

Eric S. Raymond <esr@thyrsus.com>. This tool is distributed with
reposurgeon; see the http://www.catb.org/~esr/reposurgeon[project
page].

// end
