Terry Dooher wrote on Tue, May 03, 2016 at 11:07:25 +0000:
> From: Stefan Fuhrmann [mailto:stef...@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)».

Reply via email to