On 6/3/07, Herbert Gerngroß <Herbert.Gerngross@brz.gv.at> wrote:
> Hi,
>
> I am having problems converting one of my SVN repositories to SVN 1.4.
> I did a "svnadmin dump", created a new 1.4 repository with "svnadmin
> create" and tried to reload the dump with
> "svnadmin load mynewrepo < mydump".
I happen to know something about the history of this repository: I
created the dumpfile from which the SVN 1.3 repository was created.
A few months ago we migrated from our private SVN server to the
company-wide one. This repository was one of 3 resulting from
splitting up an existing repository on our private system.
The ancestral repository, which I'll call "A" ...
"A": /ERV/**
/home/**
/milestone-tags/**
/publication/**
/VJ/**
... was split into three parts:
"E": /ERV/**
/VJ/ERV/**
/home/**
"P": /publication/**
"N": /VJ/Nachhaltigkeit/**
1. An initial dumpfile containing all of A was created. (A.dump)
1a. All externals in A.dump were rewritten to refer to the new server
URL using revisionist.
2. From this dumpfilter was used to extract only /VJ/Nachhaltigkeit to
produce repository "N".
3. Another pass of dumpfilter over A was used to create a dumpfile and
then a repository containing everything except
/VJ/Nachhaltigkeit. We'll call this temporary repository "T".
4. Two copies (i.e. cp -R) of the temporary repository "T" were made
-> "E", "P"
5. "E" and "P" were modified through normal SVN commits in order to
remove unwanted bits from HEAD (they are still in history).
6. "E" and "P" were dumped -> E.dump, P.dump
The repository under discussion here resulted from svnadmin load <
P.dump using svn 1.3.x
>
> Svnadmin then gives me the following error:
>
> ...
> <<< Started new transaction, based on original revision 5307
> ...
> adding path :
> published/WEBERV_20070320_Edikte_Kundmachung/ERV/FB/XMLSchema/ErvFdbMetadaten.xsd
> ... done.
> adding path :
> published/WEBERV_20070320_Edikte_Kundmachung/ERV/FB/XMLSchema/ErvFdbPayload.xsd
> ... done.
> svnadmin: File not found: transaction '5306-1', path
> 'published/WEBERV_20070320_Edikte_Kundmachung/ERV/Services/ERVNachricht.xsd'
> <<<
> adding path :
> published/WEBERV_20070320_Edikte_Kundmachung/ERV/Services/ERVNachricht.xsd
>
> First I thougth the repository was corrupted so I tried a "svnadmin
> verify" which says everything OK with the repo.
>
> So I looked at the revision 5307 in the old repository with "svnlook
> changed -r 5307 myrepo | grep Services"
> which gives me the following output:
>
> A
> published/WEBERV_20070320_Edikte_Kundmachung/ERV/Services/ERVNachricht.xsd
> A
> published/WEBERV_20070320_Edikte_Kundmachung/ERV/Services/ERVService.wsdl
> ...
> A published/WEBERV_20070320_Edikte_Kundmachung/ERV/ServicesÜST/
> A published/WEBERV_20070320_Edikte_Kundmachung/ERV/ServicesÜST/ERV.xsd
> ...
> A published/WEBERV_20070320_Edikte_Kundmachung/ERV/Services/
>
> The directory ERV/Services is added AFTER the file
> ERV/Services/ERVNachricht.xsd (the file which gives the error) was
> added.
>
> I found a similar problem at
> http://svn.haxx.se/users/archive-2006-04/0401.shtml.
>
> I think I can solve my problem if I can manipulate the dumpfile (which
> is 900MB) so that the directory is added before the file.
>
> Is it possible to manipulate a svn-dumpfile by hand?
> I don't know the format of svn-dumps.
>
> Is it enough to just cut out the
>
> Node-path: published/WEBERV_20070320_Edikte_Kundmachung/ERV/Services
> Node-kind: dir
> Node-action: add
> Prop-content-length: 10
> Content-length: 10
>
> PROPS-END
>
> and place it before the
>
> Node-path:
> published/WEBERV_20070320_Edikte_Kundmachung/ERV/Services/ERVNachricht.xsd
> Node-kind: file
> Node-action: add
> Prop-content-length: 10
> Text-content-length: 6179
> Text-content-md5: 4b67d3918d3647d1e280efecfafe476d
> Content-length: 6189
>
> PROPS-END
> ?
Editing dump files by hand, particularly of that size, is tricky business.
> What does Prop-content-length: 10 and Content-length: 10 mean?
> Could I use svndumpfilter to do the job?
Prop-content-length: 10 means that there are 10 bytes of property data
following the last header.
In this case:
P R O P S - E N D [line-feed]
Content-length: 10 means that the total number of bytes of content
following the last header is 10 bytes. The content contists of the
properties followed by the file contents ("text") associated with the
node.
In this case, Prop-content-length == Content-length, implying that
Text-content-length == 0.
For more on the dumpfile format see also:
http://svn.collab.net/repos/svn/tags/1.4.3/notes/fs_dumprestore.txt
I haven't got an easy solution to your problem, but here are some
things I would in order to get more information:
1. You can use ``svnadmin dump --revision X:Y`` to dump only parts of
the history. Since the problem is in revision 5307 you could
create three dump files:
svnadmin dump --revision 0:5306 REPOS > A.dump
svnadmin dump --revision 5307:5307 REPOS > B.dump
svnadmin dump --revision 5308:HEAD REPOS > C.dump
Then try loading A, then B, then C.
If that doesn't work, try loading A, create that pesky Services
directory, then try to continue on with B, C.
2. You could try editing the dump file, now that you know the meanings
for Content-length and friends.
3. You could write use revisionist to do this edit for you, though
you'd have to write a generator of medium complexity in python. (I
could help you out here since I know my way around revisionist.)
// Ben Smith-Mannschott
Received on Mon Jun 11 10:39:25 2007