Come distinguere se un file viene salvato o cancellato? ("Salva" in MS Word cancella quindi ricrea)

7

Gestisco uno strumento che sincronizza i file tra un computer client e un server di gestione documenti (utilizzando CMIS protocollo). La cronologia delle versioni (sul server CMIS) è importante.

Quando si salva un documento localmente, MS Word :

  1. Scrive in un file temporale ~wrdxxxx.tmp
  2. Elimina il file originale Example.doc
  3. Rinomina ~wrdxxxx.tmp in Example.doc

PROBLEMA: Al passaggio 2, il mio strumento di sincronizzazione cancella il file sul server, perdendo la cronologia di tutte le versioni.

DOMANDA: Dal punto di vista del mio strumento di sincronizzazione, c'è un modo per sapere se il file è stato veramente cancellato o se è appena stato salvato?

Note:

  • L'attesa probabilmente non è una buona soluzione, in quanto non posso essere sicuro di quanto tempo impiegano i passaggi 2 e 3.
  • Il fatto di ricevere la presenza di file ~wrdxxxx.tmp non funziona quando si modificano più documenti contemporaneamente nella stessa cartella.
  • Lo strumento funziona come Dropbox: gli utenti non devono modificare "commit", i file vengono sincronizzati automaticamente il prima possibile.
posta Nicolas Raoul 30.04.2015 - 10:57
fonte

2 risposte

7

Questo non è specifico per "Parola", lo stesso problema potrebbe verificarsi quando qualcuno lo fa manualmente (fare un backup del file, rinominare o eliminare quello originale, ripristinare un backup, ecc.) Lo strumento di sincronizzazione non può sapere quale di questi le operazioni sono creazioni di nuovi documenti, o semplicemente continuazioni di quelle esistenti, e non può gestire facilmente la cronologia delle versioni correttamente, poiché ciò significherebbe che ha dovuto "interpretare" ciò che l'autore / editor prende come documento "uno".

Pertanto, tutti gli strumenti VCS software che conosco prevedono che l'utente crei esplicitamente una nuova revisione, cancelli o rinomina i file esplicitamente nel repository. Se stai cercando una soluzione user-friendly, guarda come strumenti come TortoiseSVN o TortoiseGIT hanno risolto il problema.

At step 2, my sync tool deletes the file on the server, loosing all versions history.

Se vuoi ancora provare un approccio "automatico", ignorando ciò che ho scritto sopra: quando un file sul client viene cancellato, perché è davvero importante eliminare la cronologia sul server? Non puoi semplicemente contrassegnarlo come "cancellato" come stato speciale, ma mantenere comunque la cronologia? Quando il file "riappare" nel prossimo ciclo di sincronizzazione nello stesso punto sul client, devi "far rivivere" il file, annullare lo stato "eliminato" e continuare la cronologia.

    
risposta data 30.04.2015 - 12:49
fonte
3

Hai due cose contro di te:

Il primo è una condizione di razza , in cui il risultato dell'operazione di sincronizzazione dipende dai tempi di Word e da quelli del tuo processo di sincronizzazione. (Se stai usando qualcosa basato sugli eventi, la tempistica è un po 'più prevedibile, ma significa semplicemente che cancellerai la tua cronologia tutto il tempo invece che a volte come faresti se stai votando.) Come hai osservato, non c'è modo di sapere quanto tempo trascorrerà tra i passaggi 2 e 3, quindi in attesa di vedere se il file restituito creerebbe un'altra condizione di competizione.

Secondo è l'incertezza sul fatto che un file che vedi come eliminato riapparirà perché il sistema operativo non può prevedere cosa farà un'applicazione in futuro. Inoltre, non è in grado di dirti quale applicazione ha cancellato un file, che potresti essere in grado di utilizzare per trarre una conclusione ragionevole che il file potrebbe riapparire.

Se Word salva effettivamente i file nel modo descritto da Microsoft, questo è un difetto nell'implementazione. Windows ha chiamate API per eseguire nomi atomici che renderebbero il processo simile a questo:

  1. Crea file temporaneo ~wrdxxxx.tmp
  2. Rinomina atomicamente ~wrdxxxx.tmp in Example.doc

Poiché il passaggio 2 è atomico, il tuo programma di sincronizzazione non vedrebbe mai che Example.doc sia scomparso, solo che i relativi attributi o contenuti sono stati modificati.

Il comportamento di Word non è qualcosa che puoi cambiare, quindi aspettare è davvero l'unica opzione.

Se l'obiettivo non è quello di perdere la cronologia delle versioni, è meglio effettuare delle eliminazioni provvisorie e attendere un tempo abbastanza lungo (diciamo, 30 secondi) per renderle permanenti. Ciò impedirà la maggior parte - ma non tutti - dei problemi causati dal non sapere per quanto tempo un salvataggio richiede. Ovviamente, è possibile che un salvataggio duri così a lungo, ma è probabilmente raro. Il più grande trabocchetto è che un periodo provvisorio abbastanza lungo tratterà una sequenza di eliminazione / creazione eseguita da un essere umano in quel momento come un cambio di versione piuttosto che in realtà. Questo non riflette la realtà di quello che è successo, ma preserverà la cronologia delle versioni.

La domanda a cui solo tu puoi rispondere è se avere una realtà distorta come quella in occasioni relativamente rare è accettabile in viso per non avere il sincronizzatore che soffi via la cronologia.

    
risposta data 30.04.2015 - 13:28
fonte

Leggi altre domande sui tag