Philip Martin wrote on Thu, Nov 29, 2012 at 19:13:11 +0000: > Daniel Shahaf <d...@daniel.shahaf.name> writes: > > > Philip Martin wrote on Thu, Nov 29, 2012 at 18:26:04 +0000: > >> Daniel Shahaf <d...@daniel.shahaf.name> writes: > >> > >> > Les Mikesell wrote on Thu, Nov 29, 2012 at 09:59:47 -0600: > >> >> But, the copy built by svnsync doesn't necessarily > >> >> get stored the same way, does it? > >> > > >> > I think in 1.8/fsfs it will byte-for-byte identical. (except > >> > rep-cache.db, but you can remove that file without consequences) > >> > > >> > There was a dev@ thread by philipm about this not too long ago. > >> > >> No, an svnsync mirror is usually not identical to the master. It does > >> contain the same versioned data but the representation of that data is > >> different. For example, every failed commit on the master will bump the > >> fsfs sequence number and that will cause the node-revision-ids to be > >> different. > > > > Node-revision-id's in revisions don't embed transaction id's... > > > > For example the noderev header (yes, header, not just id) of > > /subversion/trunk/notes is identical between svn.us and svn.eu. > > OK. But the sequence number differences do show up in other places: > > Further, node-revision-ids can vary for other reasons. Representations > in the revision files are in whatever order the client sends > representations to the server. There are no defined orders for clients > to use so it is quite likely that commits to the master and the mirror > will use different orders:
> That affects the offsets in the text: lines, often changing the line > length, which in turn affects the position of the subsequent nodes, and > the position of the nodes affects the node-revision-ids. > Yes, that's exactly what your thread <87mx2hw607....@stat.home.lan> was about. I thought in the end that patch got committed? > svnadmin create repo > svn mkdir -mm file://`pwd`/repo/A # r1 > svn mkdir -mm file://`pwd`/repo/A # fail > svn mkdir -mm file://`pwd`/repo/A/B # r2 > svnadmin create repo2 > svnadmin dump repo | svnadmin load repo2 > diff repo/db/revs/0/2 repo2/db/revs/0/2 > 37c37 > < _1.0.t1-2 add-dir false false /A/B > --- > > _1.0.t1-1 add-dir false false /A/B > Well, that answers the question: revision files are not byte-for-byte identical. I wonder, though, if we should be rewriting these to use the revfile noderev id's? If not to avoid _* id's in revfiles, then to make the revfiles deterministic by using the ("stable") revfile noderev id's --- for the reasons given in your linked thread.