[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: 1.9.4 fix

From: Daniel Shahaf <d.s_at_daniel.shahaf.name>
Date: Wed, 04 May 2016 20:55:18 +0000

Terry Dooher wrote on Tue, May 03, 2016 at 11:07:25 +0000:
> From: Stefan Fuhrmann [mailto:stefan2_at_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)».
Received on 2016-05-04 22:55:20 CEST

This is an archived mail posted to the Subversion Users mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.