Added an option to reuse text files of the cache for the first steps.

It allows one to avoid expensive scanning of the VSS database files
during multiple attempts at converting. This option also preserves
extracted versions in vssdata for the same purpose.
Added visual progress indication.

Allows one to estimate time, necessary for completion of the current step.
Reimplemented LoadVssNames to use XML::Parser directly.
Otherwise, it consumes too much memory on huge repositories.
Use arrays for table data storage, in order to avoid overusing memory in MergeParentData.
Use a sliding window limited by timestamp range to conserve memory in MergeUnpinPinData.
Do not fetch the table into memory in BuildComments.

Also fixed a bug, that improperly removed newlines, thus
merging multiple comments on one line.
Added options to prune orphaned files and labels from the dump.

In case when the repository is prepared for conversion by
destroying unnecessary branches, they tend to end up as orphans,
as VSS 8 seems to be reluctant in actually deleting data
files. It may take many runs of Analyze to get rid of them.
Thus, it is useful to be able to prune them during conversion.

Yet, sometimes orphans are moved into non-orphaned space, for
instance when they are produced by recovering from an archive.
This patch runs an additional pass of action processing to collect
data about moves.

Note also that a very large number of orphans causes SVN to
consume about 200K per revision, as it seems to store a complete
list of files in one folder, if even just one of them changes,
(and all orphans are put into the /orphaned folder).
Fixed a problem in chain share handling
i.e. when A -> B, then B -> C etc
Fixed a bug in handling restore with labels.
Recover files with corrupted history at branch points.
Support rolling back during branching.
Support building ssphys from a git-svn repository.

Git-SVN is a command that allows using the Git DVCS
as a client for Subversion. A git-svn checkout is
structured differently from a native svn working
directory, so standard svnwcrev.sh does not work.

This commit adds a version that supports git-svn.
Make ssphys buildable on 64-bit Linux.

The 'long' type is 32-bit in MSVC++, and 64-bit on Linux,
so nobody should use it without good reason.
Database performance patch.

The database is temporary anyway, so one might want
to disable syncing for speed reasons.

Also allow specifying a separate directory for use
of the db, e.g. --nosync --dbdir=/mnt/ramdisk
Fix RESTORE support.

1) Don't overwrite the physical entry if it already exists.
2) If it is not orphaned, move it from the previous location.
3) Fix handling of rename in restore.
Use dbdir instead of tempdir for transient objects.

dbdir is supposed to be pointed to a ramdisk, so use it
for small temporary items.
Implement consistency checking for the CRLF conversion.

Currently vss2svn supports files with svn:eol-style=native,
which requires doing CRLF->LF conversion during dumpfile
generation. However, the user is required to specify
files that are to be converted, and no feedback is
available on whether the conversion is reversible.

This commit adds tests to detect lossy conversion by either
comparing file sizes, or computing MD5 checksums.
Print messages to stderr during dumpfile generation.

It allows the user to detect major problems early, and
restart the processing without waiting hours for it to
finish.

For example, it is useful for figuring out the proper
CRLF conversion settings by trial and error.
Allow specifying auto-props relative to a default set.

Add a vss2svn-only extension to support specifying global
default property values. It is useful for CRLF conversion,
where one can specify that by default all files are text,
and then add exceptions for actual binary objects detected
by the lossy conversion check.
Bug: need to clear seen_paths when we start a new revision.