Superare l'ignorare o considerare binari di spazi bianchi: come devo confrontare i file per es. commettere la revisione?

4

Sono insoddisfatto degli strumenti di confronto dei file con cui ho lavorato finora. Mentre nessuno strumento sarebbe in grado di prevedere sempre le corrispondenze di linea che hanno senso, almeno gli strumenti attuali dovrebbero essere in grado di fare un lavoro migliore quando i cambiamenti consistono principalmente in rientri aggiunti e rimossi. Ma gli strumenti che ho usato finiscono per abbinare le parentesi in isolamento e separano il codice effettivamente correlato, e fanno altri errori apparentemente ovvi.

Un esempio parlerà dei volumi, prendiamo questo:

// We also have to add any specified prefix and (pre-period) suffix.

if (prefix) [spriteName insertString:prefix atIndex:0];

if (suffix)
{
   NSRange pos = [spriteName rangeOfString:@"."];
   if (pos.location == NSNotFound)
   {
      // No point, it's a base sprite, so just append.
      [spriteName appendString:suffix];
   }
   else
   {
      // Append where the period was found, just before it.
      [spriteName insertString:suffix atIndex:pos.location];
   }
}

e assumiamo che venga modificato in questo modo:

// We also have to add any specified prefix and (pre-period) suffix.

if (prefix) [spriteName insertString:prefix atIndex:0];

while (we_need_to_do_stuff)
{
   if (suffix)
   {
      NSRange pos = [spriteName rangeOfString:@"."];
      if (pos.location == NSNotFound)
      {
         // No point, it's a base sprite, so just append.
         [spriteName appendString:suffix];
      }
      else
      {
         // Append where the period was found, just before it.
         [spriteName insertString:suffix atIndex:pos.location];
      }
   }
}

Non voglio troppo namedtrop, ma cosa fa FileMerge (l'utilità di diff / merge grafico fornita con Xcode)? Questo:

... quanto premuroso, FileMerge, hai fatto in modo di abbinare le parentesi perché erano allo stesso livello di rientro e separato il codice correlato. Non avremmo potuto chiedere di più.

La soluzione usuale in questo caso è trovare l'opzione per considerare le modifiche nella quantità di spazio bianco come non significative e riprovare. Ma poi voglio essere sicuro di non aver rovinato il rientro, perché è qualcosa che ho intenzione di commettere, quindi torno alle opzioni, disabilita l'opzione, riprova. Ripeti per tutte le modifiche che voglio recensire.

Ci deve essere un modo migliore. Sono solo io che uso male i miei strumenti? È teoricamente possibile migliorare questo flusso di lavoro? E questo è un caso semplice, più complessi sono stati risolti in astratto? Come dovrei cercare strumenti migliori in questo dominio, dato che è difficile esprimere come una query del motore di ricerca?

    
posta Pierre Lebeaupin 17.04.2013 - 22:55
fonte

1 risposta

1

Ecco alcune opzioni che potresti prendere in considerazione.

  1. Alcuni strumenti diff hanno un'opzione per inserire espressioni regolari come parte del processo di confronto e alcuni, credo, hanno persone attive nei forum che modificano le espressioni per una determinata lingua.

  2. Scrivi il tuo strumento diff che confronta la sintassi e modifica il codice. Ho iniziato questo, ma passi più tempo a scrivere uno strumento rispetto al tempo che risparmia.

  3. Poiché si sta eseguendo il commit del codice, generare un albero di sintassi astratto e confrontare l'albero di sintassi astratto. Non conosco alcun strumento diff in grado di farlo, sono gratuito e open source, ma sono anni che non ne faccio una buona ricerca.

Il mio suggerimento sarebbe quello di prendere l'opzione uno in quanto il numero due impiega più tempo di quello che salva e il numero tre se si vuole veramente avviare una nuova società e guadagnare denaro. Inoltre, se ne scrivi uno, realizza che la GUI impiega più tempo rispetto alla parte diff, a meno che tu non voglia accontentarti di un output solo di testo.

    
risposta data 18.04.2013 - 03:01
fonte

Leggi altre domande sui tag