2011-06-03 11 views
5

Estoy intentando convertir un repositorio de SCCS existente en formato SVN y he estado usando el script python sccs2svn recomendado. Sin embargo, parece ser "aleatorio", la información de revisión de la siguiente manera:No coincide la información de revisión después de la conversión de sccs2svn

CCSC prt da:

 
revision 5, date 5, author 5, comment 5 
revision 4, date 4, author 4, comment 4 
revision 3, date 3, author 3, comment 3 
revision 2, date 2, author 2, comment 2 
revision 1, date 1, author 1, comment 1 

registro de SVN da:

 
revision 8, today's date, today's author, comment = 'Automated keyword replacement' 
revision 7, date 5, today's author, comment = 'Automated property set' 
revision 6, today's date, author 5, comment 5 
revision 5, date 5, author 4, comment 4 
revision 4, date 4, author 3, comment 3 
revision 3, date 3, author 2, comment 2 
revision 2, date 2, author 1, comment 1 
revision 1, date 1, author 1, comment 1 

Antes de empezar a cavar un poco detallada en sccs2svn. py, ¿alguien ha encontrado este problema antes?

+1

Se parece a un desajuste de una en el comentario y campos de autor ¿Hay algo especial sobre el autor 2 y/o el comentario 2 que haría que no se usen? – Pete

Respuesta

1

SonyaH ha publicado esto en la pregunta, aquí es como una respuesta limpiado:

Hay un error off-by-one en run(). Este código:

mergedVersions = [[versions[0]]] 
i = 0 
while i < len(versions): 
    if versions[i].match(mergedVersions[-1][-1]): 
     mergedVersions[-1].append(versions[i]) 
    else: 
     mergedVersions.append([versions[i]]) 
    i += 1 

funciona mejor si está sustituido con

mergedVersions = [[versions[0]]] 
for v in versions([1:]): 
    if v.match(mergedVersions[-1][-1]): 
     mergedVersions[-1].append(v) 
    else: 
     mergedVersions.append([v]) 

Además, el método _commit en la clase SVNInterface tenía un problema. Cambia la fecha en el último número de revisión (como lo conoce sccs2svn) y luego confirma esa revisión. Desafortunadamente sccs2svn cuenta sus números de revisión de cero, mientras que Subversion cuenta a partir de 1. Por lo tanto, si se invierte el orden de las llamadas de función de la siguiente manera todo lo que ahora coincide:

def _commit(self, rev, date, txn, subpool): 
    svn_rev = repos.svn_repos_fs_commit_txn(self.repos_ptr, txn, subpool) 
    fs.change_rev_prop(self.fsob, svn_rev, core.SVN_PROP_REVISION_DATE, 
         date, subpool) 
    return svn_rev 
Cuestiones relacionadas