What I'm trying to do:
I'm in the middle of mirroring our remote svn repo to my local Win7. Therefor I'm following some steps of this tutorial.
The problem:
Now the svnsync sync file:///c:/repository
(same step as in the tutorial) is stuck at revision 25824 of about 84000.
Committed revision 25823.
Copied properties for revision 25823.
svnsync: E160006: No such revision 25824
It should be just this one and only broken revision in the middle of the repo.
The question:
Is it possible to skip that revision, fake it or even just copy it broken?
It took a while until this revision so please no solutions where i have to start over from the beginning. Also i can't make changes to the remote svn repo.
Other stackoverflow threads like How to skip initial revisions in svnsync sync (to fix broken repository) didn't help me in that case.
Alot time pased and now i solved my problem.
I followed this tutorial: http://www.apharmony.com/software-sagacity/2014/07/recovering-from-a-missing-svn-revision/
The first dump has to be without the --incremental and --delta option. Load it to a new SVN server.
For the rest i wrote an VBS Skript.
call dumpRevs(0, 80000)
With dumpRevs i dump the old Repository to somewhere else (and log it). VBS started on old SVN Server.
call loadDump(newRepoPath, 0, 80000)
With loadDump i load the dumped revs on to the new repo. Broken revisions get replaced with dummy commits. VBS started on new SVN Server
At the end there can be missing files in the new repo. Therefor i match them against each other. To do this, i check both repos out and transfer the diff to the new repo and made a final commit (don't forget the make a dummy commit on the same revision on you old repo so new checkins can still be dumped and loaded).
call updateRepos(https:\\oldSVNServer\oldRepo\projektA, projektA)
I used updateRepos to check out my repos (big repository..).
My script should just be an idea of how to make that. Everything between [] must be set.
Function dumpRevs(revStart, revEnd)
Set oShell = CreateObject("WSCript.shell")
Dim rev, dumpCommand
rev = revStart
while rev <= revEnd
dumpCommand = "cmd.exe /C svnadmin dump [old Repo Folder] -r " & rev & " --incremental --deltas > [dump Folder]" & rev
oShell.run dumpCommand, 1, True
rev = rev + 1
wend
End Function
Function loadDump(repoPath, revStart, revEnd)
Set oShell = CreateObject("WSCript.shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim rev, dumpCommand, dumpFilesPath, logPath, dummyRev
dummyRev = "cmd.exe /C svnmucc propset dummy_prop 0 -m ""increases revision"" [new Repo URL] --username admin --password admin"
rev = revStart
while rev <= revEnd
dumpFilesPath = "[dumpFolder]" & rev
logPath = "[logFolder]" & rev & ".log"
loadCommand = "cmd.exe /C svnadmin load " & repoPath &" < " & dumpFilesPath & " > " & logPath & " 2>&1"
oShell.run loadCommand, 1, True
If fileContains(logPath, "Committed revision "& rev & "") = false Then
oShell.run dummyRev, 1, True
End If
rev = rev + 1
wend
End Function
Function updateRepos(repoPath, name)
Set oShell = CreateObject("WSCript.shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim logPath, uptodate, upCommand, cleanCommand, nr
uptodate = false
nr = 1
Do
logPath = "C:\Temp\up_" & name & nr & ".log"
upCommand = "cmd.exe /C svn up --username admin --password admin --non-interactive " & repoPath & " > " & logPath & " 2>&1"
cleanCommand = "cmd.exe /C svn cleanup --username admin --password admin --non-interactive " & repoPath & " > " & logPath & " 2>&1 & ECHO cleanup >>" & logPath
oShell.run upCommand, 1, True
If fileContains(logPath, "is already locked") =true Or fileIsEmpty(logPath) =true Then
oShell.run cleanCommand, 1, True
ElseIf (fileContains(logPath, "Request Entity Too Large") = true) Or (fileContains(logPath, "out of memory") = true) Or (fileContains(logPath, "Caught signal") = true) Or (fileContains(logPath, "At revision") = true) Or (fileContains(logPath, "The XML response contains invalid XML") = true) Then
Exit Function
End If
nr = nr + 1
Loop While fileContains(logPath, "Updated to revision") <> true
End Function
Function fileContains(filePath, str)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim tempStr
Set objInputFile = objFSO.OpenTextFile(filePath, 1, False)
Do until objInputFile.AtEndOfStream
tmpStr = objInputFile.ReadLine
If InStr(tmpStr, str) > 0 Then
fileContains = true
Exit Function
End If
Loop
fileContains = false
End Function
Function fileIsEmpty(filePath)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim size
Set ofile = objFSO.getfile(filePath)
size = ofile.size
If size < 30 Then
fileIsEmpty = true
Exit Function
End If
fileIsEmpty = false
End Function