Terry Dooher wrote on Tue, May 03, 2016 at 11:07:25 +0000:
> From: Stefan Fuhrmann [mailto:stefan2@apache.org] 29 April 2016 08:29
> > The best way to detect an incomplete dump is to run 'svn log -v -q'
> > on the repository root. The output must be the same for the old and new repository.
>
> That's good to know. Tests so far show all dumps/loads to succeed,
> with no errors in my case. I'll compare the logs to be certain,
> though.
Another option: dump the new repository and diff the dump to a dump of
the old repository. This will catch far more problems than diffing 'log -v'
outputs.
There are a number of complications here:
- Deltas are compressed, so if you pass --deltas and the two producers
used different zlib versions, the dumpfiles might differ even for
the same repository instance.
- A dump without --deltas is quite large.
- There is no option to emit non-compressed deltas (svndiff0 rather than
svndiff1).
Furthermore, there used to be a few sources of non-determinism (e.g.,
node header order and APR hash order), but I think Philip eliminated
them. (I checked docs and history but couldn't determine which release
those changes first apepared in.)
So, in practice, I think one of these should work:
- cmp <(svnadmin1 dump --incremental old) <(svnadmin2 dump --incremental new)
[ adding --deltas might introduce false positives ]
- cmp <(svnrdump2 dump url://old) <(svnadmin2 dump --deltas --incremental new)
- Run incremental, non-deltas, single-revision dumps on both
repositories; checksum them; and compare the lists of (revnum, checksum).
The lists should be identical.
All three variants could false positive if one of the producers
(generally the older one) was non-deterministic.
Cheers,
Daniel
P.S. <(${command}) is a shell construct (supported by bash and zsh,
possibly in the process of being standardised?) that evalutes to
the filename of a readable fifo producing the output of ${command};
e.g., «cat <(echo hello world)».
|