2012-06-19 11 views
6

Sto eseguendo un intero gruppo di conversioni di repository CVS e RCS in Subversion. Ogni tanto mi imbatto in un file v danneggiato. Ho capito come riparare questi manualmente, ma sta diventando noioso, e il mio ultimo progetto ha numerosi file danneggiati, più di quanto mi interessa riparare manualmente.Esiste uno strumento per la riparazione di file RCS/CVS, v?

Quindi mi piacerebbe avere uno strumento per analizzare i file RCS e ripararli. Ciò potrebbe significare che alcune vecchie versioni saranno incomplete. Ad esempio, ho visto casi in cui mancava la versione 1.1, quindi aggiungere una revisione vuota con un commento che indica che manca è il trucco.

Ho fatto molte ricerche cercando di trovare uno strumento del genere, ma non ho trovato nulla. Stavo per iniziare a scrivere il mio strumento, ma ho pensato che dovrei provare a chiedere qui, prima.

So che potrei ottenere solo istantanee di codice e importare quelli, e io ricorrere a che se devo (solo per scongiurare tali suggerimenti :)

++ grazie

+0

Qual è la natura del danno e come stai ripararlo ? –

+0

C'è una varietà di tipi di danni. La cosa peggiore che sto affrontando ora è che porzioni dei file v vengono sostituite con null (suppongo che un disco sia pieno o che abbia avuto un errore del disco in qualche punto nel lontano passato). Tutto quello che posso fare è sostituire le revisioni danneggiate (che sono sempre versioni molto vecchie) con revisioni vuote che indicano che erano danneggiati. Non è peggio di quello che hanno adesso. – trent

risposta

2

Io personalmente non consiglia la migrazione manuale poiché il processo richiede molto tempo e non è possibile uscirne con un set completo di dati/metadati nel repository risultante.

C'è uno strumento per migrare CVS in SVN ed è chiamato cvs2svn. È "uno strumento per migrare un repository CVS in Subversion, git o Bazaar". È possibile fare riferimento a this how-to per un consiglio di avvio rapido.

check out this:

CVS era solo un front-end per RCS, e le * .V file sono veramente RCS file. Basta dare un'occhiata. ad esempio, se si dispone di foo, v basta eseguire:

co foo 

e sarà checkout foo dalla, v file.

Inoltre v'è un RCS to SVN converter e si può provare anche quello.

+0

Sì, sto usando cvs2svn. La conversione non è il problema, il problema è che soffoca sui file v corrotti. Fissarli manualmente è un processo noioso e in qualche modo soggetto a errori e sembra che debba essere automatizzato in qualche modo. – trent

+0

Ho aggiornato la mia risposta, provalo. :) –

+0

Anche i comandi RCS bombardano questi file. Alcuni di essi sono danneggiati in modo tale che il log non riesce, ma il resto fallisce quando provo a controllare le revisioni in cui si trova il danno. Ho scritto uno script per scorrere tutti i file v in esecuzione su rlog e quindi su ogni revisione, che è il modo in cui so che il danno è molto diffuso. – trent

0

Ho scritto una libreria Python, editrcs, che analizza i file RCS in un albero che può essere modificato e quindi scritto come nuovo file RCS. Non è progettato per gestire file RCS non validi, ma potrebbe essere un punto di partenza ragionevole se il danneggiamento è presente solo nelle sezioni di dati o se si modifica la libreria per aggirare eventuali metadati corrotti.

anche rilevanti per la vostra domanda particolare:

  1. file RCS store l'ultima revisione del tronco e diff andando a ritroso sul tronco. Quindi, se la diff per una revisione storica è irrimediabilmente corrotta, allora qualsiasi cosa prima potrebbe essere inutilizzabile, o almeno errata, a meno che non si possa indovinare qual è il cambiamento o non sia in conflitto. (Rami sono memorizzate come avanti diff dalla loro branchpoint, rami così intere dal punto di corruzione potrebbe essere problematico.)

  2. Si può valida avere un gap nella numerazione di revisione, se una revisione ha stato removed dal file RCS utilizzando "rcs -o".Un gruppo di valori nulli Se hai un po 'di valori nulli in cui una revisione dovrebbe essere allora questo è per esempio:

    # Setup 
    echo 1 > test 
    echo "initial commit" | ci -l test 
    echo 2 >> test 
    echo "2" | ci -l test 
    echo 3 >> test 
    echo "3" | ci -l test 
    
    # RCS file contains revisions 1.1, 1.2, 1.3 
    rlog test 
    
    # Remove revision 1.2 
    rcs -o1.2 test 
    
    # RCS file now contains revisions 1.1, 1.3 
    rlog test 
    
Problemi correlati