svn recovery – restauración de revisiones individuales

Independientemente de cómo llegué aquí, estoy en la position de restaurar un repository SVN a partir de la copy de security. Lamentablemente, la copy de security se corrompió ligeramente y de las más de 19,000 revisiones, aproximadamente 80 se perdieron. La copy de security era un file bzip2 y pude usar bzip2recover para recuperar aproximadamente el 99% de los bloques. Estos son 'conocidos bien' ya que se descomprimieron con éxito.

Por lo tanto, pude crear una list de confirmaciones bien conocidas y perdidas.

El repository original también se corrompió, pero muchos de los files sobrevivieron. Lamentablemente, el repository en su set está roto.

Así que tengo la suerte de tener los files de los directorys originales db / revs y db / revprops para estas revisiones faltantes. Las probabilidades son que la corrupción del file bz2 de copy de security no se alinee con la corrupción de los files db / revs.

He reconstruido todo hasta r13892, pero sé que r13893 está dañado, así que no tengo un volcado para r13893. Tengo los files db / revs / 13893 y db / revprops / 13893 del repository original.

Creé y reconstruí el repository con svn-1.4, pero actualicé a svn-1.6 para poder usar el command selectivo svnadmin verify (en un único o range de confirmaciones).

Pensé que quizás podría include estos dos files en el nuevo repository, actualizar db / current [1] y luego continuar. Sin embargo, cuando bash verificar, obtengo este error:

$ svnadmin verify new-svn * Verified revision 1. ... * Verified revision 13889. * Verified revision 13890. * Verified revision 13891. * Verified revision 13892. svnadmin: Can't read file 'svn/db/revs/13214': End of file found 

Entonces esto obviamente no funcionó. No estoy seguro de qué tiene que ver 13214 con nada aquí.

Bajé de categoría a svn-1.4.6 por si ocurría algo extraño con 1.6. Lamentablemente, obtengo el mismo resultado: la revisión 13893 no está verificando:

 ... * Verified revision 13891. * Verified revision 13892. svnadmin: Can't read file 'svn/db/revs/13214': End of file found 

Así que esto es lo que sé:

  • Sé que las revisiones 1 a 13892 son 100% correctas (a less que exista una posibilidad extremadamente improbable de que un bloque bz2 se haya descomprimido incorrectamente pero haya pasado la sum de comprobación).
  • No sé si los files r13893 del repository SVN original son correctos, pueden estar corruptos, pero la cantidad de daños fue tan pequeña que es poco probable (pero posible).

¿Alguien tiene alguna idea de cómo podría llenar este agujero? Tenga en count que tengo un r13894 100% seguro en mi poder, así que si puedo conectar r13893 puedo continuar con el rest de la restauración.

[1] Actualicé db / current con este script: http://svn.haxx.se/users/archive-2005-12/att-0630/make-current-fix.py

¡Probé esto en algunos otros repositorys SVN (después de deshabilitar la escritura a db / current!) Para verificar que estaba produciendo el mismo valor que el que ya estaba allí. Lo hace.

Con respecto a este:

 svnadmin: Can't read file 'svn/db/revs/13214': End of file found 

Sospecho que rev 13893 hace reference a algo de rev 13214 (como una copy de file, un salto de información, o algo así).

Al hacer la carga svn, ¿las nuevas revisiones coincidían con las revisiones originales? Recuerdo que me encontré con un caso en el que mi volcado hacía reference a un rev 0, y se cargaba como rev 1. Si algo así sucede aquí, la reference a rev 13214 se desactivará en uno.

Puede intentar usar los files del repo db para crear el rev perdido en el formatting de volcado. Lamentablemente, no conozco una herramienta que lo haga. Pero recomendaría mirar SvnDumpTool ; es capaz de manipular svn dumps de muchas maneras útiles.

Divulgación: he contribuido a svndumptool en el pasado