Come evitare la conversione delimitatore di riga (con conseguente numeri di riga sbagliata) in Subversion pre-commit hook?

StackOverflow https://stackoverflow.com/questions/2537845

  •  22-09-2019
  •  | 
  •  

Domanda

abbiamo il seguente ambiente: un Windows 2008 Server con Apache 2.2.14 e 1.6.6 SVN attraverso WebDAV. Più sviluppatori commettono codice Java da piattaforme Windows diverse.

Ora vogliamo implementare un pre-commit hook al nostro repository che corre Checkstyle sul codice impegnato. Usiamo SVNChecker ( http://svnchecker.tigris.org/ ) per questo, che funziona abbastanza bene. Purtroppo, quando Checkstyle segnala gli errori, i numeri di riga nei rapporti sono i valori doppi dei numeri di riga attuali.

Quando si impegnano qualcosa in SVN, crea una directory temporanea con i nuovi file. Poi, il pre-commit hook viene eseguito e in caso di successo, i nuovi file sono effettivamente impegnati al repository. Ho analizzato questi file temporanei in un editor esadecimale e ho scoperto che tutti i ritorni a capo (\ n) sono stati sostituiti da un ritorno a capo e un ritorno a capo (\ r \ n). Come usiamo line-breaks di Windows (\ r \ n) nei nostri archivi, ciò ha determinato \ r \ r \ n, che è considerato come due nuove righe di Checkstyle e diversi editor di testo. La cosa strage è che la linea-break sono corretti al momento del check out dal nostro repository, in modo che siano in qualche modo riconvertiti da qualche parte.

ho potuto risolvere questo problema impostando la proprietà svn: eol-style (vedi http://svnbook.red-bean.com/en/1.1/ch07s02.html#svn-ch-7-sect-2.3.5 ) a nativo. Tutto ha funzionato come dovrebbe allora. Purtroppo, per noi questo significherebbe che avremmo dovuto aggiungere questa proprietà per ogni file nel nostro repository. Per quanto ne so, non c'è un ambiente nel client SVN che fa questo automaticamente ogni volta che si aggiunge un nuovo file, ma purtroppo non siamo in grado di dire a tutti i nostri sviluppatori di aggiungere questa impostazione per il loro client SVN.

La descrizione della proprietà eol-style dice "di default, Subversion non presta alcuna attenzione al tipo di end-of-line marcatori (EOL) usati nei file". A me, sembra un bug nel SVN che i ritorni a capo vengono convertiti comunque.

Qualcuno ha idea di come risolvere questo comportamento senza usare brutte soluzioni alternative come la conversione manualmente le nuove righe di nuovo nella fase di pre-commit hook?

Grazie per il vostro aiuto, Memminger

È stato utile?

Soluzione

La mia ipotesi che SVN ha creato una directory temporanea per-commit pre ganci era sbagliato. Invece, un pre-commit hook può accedere ai file di origine utilizzando svnlook e un numero di transazione. SVNChecker è colui che salva i file in una directory temporanea.

Che cosa causa i delimitatori di linea sbagliata è una funzione Python che converte automaticamente interruzioni di linea in modo che tutte le applicazioni Python possono utilizzare delimitatori di linea Unix internamente. Tuttavia, solo alcune funzioni convertono interruzioni di linea da fonti esterne al pitone-interni interruzioni di linea di default. SVNChecker non prende cura di questo, che è già stato segnalato come un bug su http :?. //svnchecker.tigris.org/issues/show_bug.cgi id = 33

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top