Unison: Konflikt

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche

Versionskonflikte

Es kommt vor, dass gleichzeitig auf verschiedenen Rechnern verschiedene Änderungen an einem File vorgenommen werden. Der Cronjob ist so ausgelegt, dass er zuerst mit dem Batch-mode die "unstrittigen" Änderungen snyct, und danach das GUI öffnet, wo die Problemfälle, die dann noch übrig sind angezeigt werden:

TikiImage279.jpg

Hier zeigt sich jetzt ein Nachteil an der Sache- wie soll man sich die Unterschiede anschauen? Eines sei gleich verraten, der Diff-Knopf bringt´s nicht XD Encfs bringt auch hierfür einen Befehl mit um Filenamen zu decodieren: `encfsctl decode ~/home_klar <Filename>' fordert die Eingabe der Passphrase und gibt dann den Namen im Klartext aus. Der Einfachheit halber habe ich in meine .bashrc diesen Eintrag eingefügt:

alias decode='encfsctl decode ~/home_klar'

Jetzt muss ich im Terminal nur noch `decode ZGzugZGuGFZUFZVFfzuzuFU&/hfjHVHJFHJ' eingeben, passphrase und sehe dann welches File das Problem macht. Dann kann man über das gemountete Klartext-Verzeichnis des Servers ein Diff machen und die Unterschiede der Versionen bewerten. Unter Actions kann man Unison-gtk auch verschiedene Aktionen befehlen (z.B. löse alle Konflikte zugunsten des 1. Host)- dies ist natürlich mit Vorsicht zu geniessen! %)

Für die Zukunft könnte man sich vorstellen, die Ausgaben von unison in der Konsolenversion bei Konflikten zu parsen und irgendwie gleich eine Decodierung in Klartext zu verwursten, es gibt schon zwei Entwürfe:

1) Die Shell-Lösung von Didi:

grep '\\[CONFLICT\\] Skipping' sed 's/^.* Skipping //'| encfsctl decode ~/zahadum

2) Ein Python-Script von Jochen:

#!/usr/bin/python

import sys,os

encfsin,encfsout= os.popen2("encfsctl decode .one " ,"w")

while True:
    zeile = sys.stdin.readline()
    #print zeile
    if "changed  <-?-> changed    " in zeile:
        #print zeile[26:]
        encfsin.write(zeile[26:])
        encfsin.flush()
        #encfsin.close()
        decrypt=encfsout.readline()
        #encfsout.close()
        print "changed  <-?-> changed    " + zeile[26:].strip() +"="+ decrypt.strip()
    else:
        print zeile.strip()
    if zeile == "":
        break

Beide verwursten wie gesagt die Textausgaben von unison bei Konflikten- bei mir war der Leidensdruck bisher nicht groß genug das anzugehen, weil ich meist nur an einer Maschine arbeite und daher Konflikte recht selten sind. Wenn jemand das noch implementieren möchte, ist er herzlich eingeladen XD!

Jetzt sind wir eigentlich schon fast fertig, ich habe mir noch einige Gedanken zu Firefox-Profilen gemacht, die ich hier niedergeschrieben habe: Unison: Firefox