2011-01-19 11 views
7

Ho riscontrato un comportamento che non mi aspettavo da Subversion e l'ho scoperto quasi per caso: un file modificato non viene contrassegnato come modificato.Perché Subversion non riesce a contrassegnare un file di foglio di calcolo Microsoft Excel modificato?

Ho un test unitario che coinvolge un foglio di calcolo di Microsoft Excel come file di input. Il test unitario calcola un checksum CRC; il mio test ha iniziato a fallire a causa del cambio di checksum.

Il file di test è memorizzato in SVN e ha tipo MIME "application/octet-stream" ed è quindi considerato binario da SVN.

Ho lo stesso comportamento di TortoiseSVN e del client della riga di comando SVN, in questo caso entrambi basati su SVN 1.6: quando il file viene aperto in Excel, il fatto che sia aperto deve essere codificato nel file stesso; SVN mostra che il file è stato modificato. Tuttavia, quando il file viene chiuso di nuovo (senza salvare), sembra tornare allo stato non modificato: ovvero, svn status non elenca il file Excel; svn diff non produce comunque alcun output a causa del fatto che i dati sono binari.

Il problema è che il file non effettua il confronto binario con il file archiviato nel repository. (Se una nuova copia viene esportata, non viene confrontata con la copia aperta e chiusa.) Il file è apparentemente invariato dal punto di vista dell'utente, quindi in senso semantico, la risposta SVN è ragionevole. Ma non sintatticamente; e SVN è essenzialmente sintattico.

La parte per la quale non riesco a trovare un motivo è perché SVN non contrassegna il file come modificato. Non riesco a immaginare che SVN abbia una gestione speciale per i file Excel (e in ogni caso il tipo MIME non è specificamente associato a MS Excel); non esiste una proprietà definita per la parola chiave SNV. Allo stesso modo, posso immaginare che Excel sappia qualcosa sui contenuti della sottodirectory nascosta di .svn in cui sono archiviate le informazioni di copia di lavoro SVN.

Avete qualche indizio su cosa sta succedendo qui?

Grazie, Rob.

risposta

3

Excel blocca sempre i file all'apertura, impostando il timestamp sulla data corrente. Quando chiudi senza salvare, Excel ripristinerà il timestamp. Ciò fa sì che SVN ignori il file.

Per quanto riguarda i contenuti modificati, non ne sono sicuro. Puoi riprodurre il problema?

+0

Grazie. Sì, il problema è riproducibile. Sembra una probabile spiegazione; Ho praticamente detto questo nel mio commento alla risposta di Wim, ma è bello averlo osservato in modo indipendente. Controllerò questo (al lavoro, domani). – Rhubbarb

+0

Solo per connettere: è esattamente quello che sta succedendo. Quando il file Excel viene aperto, il contenuto del file viene modificato (come si può vedere con ad esempio md5sum) e le modifiche all'ora modificate. Quando il file viene chiuso senza salvare, il contenuto del file non cambia, ma non torna allo stato originale; e il tempo modificato ritorna al valore prima dell'apertura. – Rhubbarb

+3

Appena trovato questo: http://spreadsheetpage.com/index.php/oddity/who_last_opened_that_file/ sembra che Excel salvi il nome dell'apertore (e forse di più), anche se non lo salvi. Strano. – Martin

1

E 'possibile che il file sia bloccato da Excel mentre è aperto e svn non può accedervi per vedere se è stato modificato o meno?

+0

Penso che le applicazioni MS in genere indicheranno il blocco in un file nascosto separato (qualcosa come '~ file.doc'), ma penso che Excel sia diverso. Il blocco è un indizio, ma non penso che sia tutta la storia, e non faccio in modo che l'accesso alle cose sia impedito. (Ho bisogno di sperimentare di più.) – Rhubbarb

4

Subversion presuppone che il timestamp "ultima modifica" non stia mentendo. Se il timestamp è invariato, il contenuto del file non viene controllato per le modifiche. Penso che tutto il sistema di controllo delle versioni lo faccia, controllando che le modifiche locali risultino insopportabilmente lente.

modifica: per i dettagli di come SVN funziona in questo senso, questions.c nell'origine della libreria di copia di lavoro SVN è un buon inizio.

+1

Proprio quello che stavo per suggerire - controlla il timestamp :-) Ho avuto alcuni problemi strani in cui non era impostato correttamente che erano notevolmente simili a questo. – berry120

+0

Ancora una volta, un buon suggerimento. Grazie. Pensavo di aver visto il timestamp aggiornato.Mi chiedo se Excel modifichi il timestamp all'apertura, ma lo cambi di nuovo su close-without-save. Controllerò di nuovo (più attentamente) più tardi. – Rhubbarb

+0

Grazie anche per il link nella tua modifica. – Rhubbarb

Problemi correlati