2010-01-15 4 views
20

Ho bisogno di sapere se le due patch sono effettivamente le stesse.diff'ing diff con diff?

Ho un vecchio file di patch e un nuovo file di patch creato con il comando diff unix. La semplice differenza delle patch riporta le differenze dovute al timestamp al momento della creazione della patch.

C'è un modo (con diff?) Che può dirmi in modo affidabile se le due patch sono effettivamente le stesse?

+9

abbiamo messo un diff nel tuo diff in modo da poter diffare mentre differisci –

+3

yo, imma ti permette di diff, ma beyonce ha le migliori diff di tutti i tempi. sempre! – GManNickG

+2

C'è un badge per domande ricorsive? Ci dovrebbe essere. –

risposta

28

Utilizzare interdiff da patchutils.

+0

Grazie effimero. Questo è solo il biglietto. – srking

+0

Purtroppo, dopo essermi intromessa, l'interdiff mi ha fallito. Innanzitutto non esiste un codice di ritorno come diff e in secondo luogo genera in modo errato tonnellate di differenze tra due patch grandi ma altrimenti identiche. – srking

+0

Hmm. Il codice di ritorno è zero in entrambi i casi, ma se le due differenze sono identiche, non dovrebbe esserci alcun output. I nomi dei file sono cambiati tra i due diff? Ho testato 'interdiff' proprio ora su alcuni file di testo da 80kB con circa 20kB di modifiche, e ha funzionato bene nel riconoscere differenze differenti. – ephemient

5

È possibile applicare entrambe le patch a copie dello stesso file sorgente e quindi utilizzare diff normalmente per verificare le differenze nei risultati.

Le patch rappresentano le modifiche ai file di input, quindi due patch sono uguali se hanno lo stesso effetto sui file di input. Le differenze nelle patch si riflettono direttamente nelle differenze dei risultati di tali patch.

Eventuali differenze tra due patch che non determinano una differenza nel risultato di tali patch sono irrilevanti.

+0

Ma come si "verificare le differenze nei risultati"? Se ho due copie dello stesso codice sorgente (diciamo la stessa verifica SVN su due macchine diverse) e applico una patch su una macchina e l'altra patch sull'altra macchina, eseguo 'svn diff' e sono a sinistra, di nuovo, con due diff da controllare. Il punto su "due patch sono le stesse se hanno lo stesso effetto sui file di input" è ben preso, ma la domanda è: come la determiniamo? – dimo414

0

Si potrebbe provare Beyond Compare.

Può essere configurato per sostituire stringhe in uno o entrambi i file con qualcos'altro, che quindi fa sotto le copertine. I file sullo schermo sembrano ancora presenti sul disco, ma le differenze dipendono dai file elaborati.

Con ciò è possibile configurarlo per modificare tutto il testo che ha un formato simile a un timestamp a qualcosa di comune in entrambi i file e quindi si confronta solo tutto il resto.

Nel client Windows, per modificare queste impostazioni, nella barra degli strumenti c'è un pulsante con un piccolo simbolo simile a un uomo, un tronco e una testa, e nella finestra di dialogo che si apre, c'è una scheda per Sostituzioni.

+0

Grazie, ma ho bisogno di uno strumento open source poiché un numero sconosciuto di utenti eseguirà il confronto delle patch. – srking

+0

Ok, ma se tutto quello che devi sapere è se sono uguali, ad eccezione dei timestamp, forse dovresti semplicemente fare un AWK o SED o simili sul file per trasformarlo, in modo che i timestamp siano uguali, e quindi puoi eseguire qualsiasi tipo di diff desiderato sui file. –

+0

Oppure il processo di patch è più simile a "dato il file originale, patch con uno dei file, quindi patch lo stesso file originale con l'altro file, quindi confronta i risultati delle due operazioni di patch", in modo che le patch effettive potrebbero contengono dati diversi, ma finiscono con lo stesso risultato? –