Closed VPatrick closed 9 years ago
Hi, der Fehler sollte draußen sein. Kann das mal jemand testen?
Hi, sollte funktionieren. Dachte wir sollten Softlinks verwenden, aber wenn Hardlinks erlaubt sind spart uns das viel Arbeit.
Hi, habe die Verlinkung für Windows in softlinks geändert. Konnte es leider nicht testen, kann das jemand für mich übernehmen. Danke!
Hi,
kannst du in deiner Klasse Create
die Methode verbose(...)
aus der Klasse Verbosity
verwenden? Dadurch können wir verbose vereinheitlichen.
Danke!
Hey Michi,
beim deiner Klasse Create muss du noch bei der Vergabe des Namen das Format SOURCE_
Hi, ich sehe keinen Unterschied, was genau ist anders? Das mit den Spitzenklammern soll nur bedeuten das es ersetzt wird, mit dem was danach folgt.
Hi, also mir würde es seehr viel Arbeit ersparen wenn du diese spitzen Klammern hinzufügen und das Jahr in yyyy angeben würdest ^^ :D
Ok das mit dem Jahr stimmt. Bei der anderen Sache sollten wir auch die anderen Fragen. Für mich ist das kein Problem das noch einzufügen, aber für Delete und List spielt es auch eine große Rolle.
Jo warten wir noch die Antworten von den anderen ab. Eine Frage hab ich noch welche Parameter muss ich bei Create S angeben?
Du musst bei keiner Create Methode einen Parameter angeben. Beim Konstruktion kannst du "true" angeben wenn du eine Ausgabe haben willst. Und danach musst du addSource und addDestination aufrufen. Danach kannst du Create_XX aufrufen. Kannst auch einfach mal in meine Main schauen, oder das Klassendiagramm.
Hi,
ihr solltet die verbose(...)
-Methode der Klasse Verbosity
verwenden wenn ihr Ausgaben haben wollt. Aktiviert wird die Methode über den -v-Switch. Das wäre der ganz normale Vorgang und Use-Case. Bitte passt da eure Methoden und Klassen an.
Jetzt zu den spitzen Klammern: Mir ist das relativ egal wie ich das mach.
Ja die Verwendung der Methode kommt noch, nicht so schnell. Wie ist die Verwundung? Neues Objekt erzeugen mit level, was ist Level? Und Nachrichten erzeuge ich indem ich verbose mit der Nachricht aufrufe und was muss ich bei State angeben?
Schau dir mal die Beschreibung im Wiki zu Verbosity an. Da steht alles genau drin und es gibt ein Beispiel: https://github.com/VPatrick/PerlArchiver/wiki/Verbosity
Das Level ist ein Integer der angibt wie viel bei verbose(...)
ausgegeben wird. Im Moment wird nur 0 (aus) und 1 (ein) unterstützt aber es wäre denkbar diverse Verbose-Grade durch höhere Level anzugeben.
Erzeug dir einfach im Konstruktor deiner Klasse ein Verbosity-Objekt und initialisiere es mit 0. Aktiviert wird es durch den Switch -v.
State ist optional und gibt vor deiner Nachricht noch einen farbigen Text aus (OK in grün, WARNING in gelb bzw. ERROR in rot).
Create benutzt jetzt Verbosity zur Ausgabe
Create erzeugt jetzt den Ordner mit yyyy. Klammern sind noch nicht innen, warte noch auf Antworten.
Hi, ich denke der Archivordner sollte nicht SOURCE_ sondern den Namen der Source haben zb C_Users_Hein_Data_2014_12_19_10_29_55 damit ersichtlich ist wo er her kommt.
Habe noch Fehlermeldungen bei create: Zum einen "Insecure dependency in mkdir while running with -T switch" in Zeile 174 durch die Pfadangabe und in Zeile 167 "Can´t copy file" auch wegen der Pfadangabe von destination. Wenn ich das ganze an den Stellen durch meine absoluten Pfade ersetze funktioniert es, wenn nicht wird bei mir das Archiv angelegt, aber keine Ordner oder Dateien eingefügt.
Hi, das mit dem Source Namen hört sich logisch an :-). Wegen dem anderen Problem brauche ich noch ein paar Infos.Wie hast du den Pfad angegeben. Es liegt bestimmt daran das Windows mit \ arbeitet und nicht /, denn eigentlich benutze ich absolute Pfade. Könnte das das Problem sein? Was bedeutet der Fehler bei mkdir? Ich benutze keinen switch und habe bis jetzt auch nie einen Fehler bekommen.
Ich denke nicht, dass es an dem \ liegt denn ich benutze auch / und bei \ kommt eine andere Meldung. Der Fehler bei mkdir und copy ist beide male der gleiche vermute ich. Bei mir tritt er nicht auf, da ich nur einen kompletten String zum löschen habe. Denke das kommt durch daher, dass mehrere Variablen einen string bilden, aber genau erklären kann ich mir das auch nicht. Das hat nichts mit switch zu tun, sondern mit dem taint-Mode.
Wenn du den Pfad bei mkdir mit einfachen ' angibst funktioniert es bei mir. Also mkdir('self->{destination}/$destination$directory/$_');
das mit dem copy geht weiterhin nicht.
Ich hab etz mein Restore auch so verändert dass ich das Format SOURCE_ yyyy_mm_dd_hh_ii_ss bearbeitet. Damit wir es endlich einheitlich haben^^
@KasikciMu: Also sieht es jetzt bei dir z.B. so aus: C_Users_Hein_Data_2014_12_19_10_29_55 ?
@Ramunno Nein so: Data_2014_12_19_20_29_55
@mia8287 Ich habe den Namen für SOURCE angepasst. Bei mkdir und copy habe ich nichts geändert. Ich habe es jetzt bei mir auch unter Windows getestet und es funktioniert. Du musst erst ein neues Create Objekt erzeugen: use Create; $c = Create->new(1);
Dann die Verzeichnisse hinzufügen: $c->addSource('C:\Users\Home\Desktop\source\Test'); # Quellverzeichnis $c->addDestination('C:\Users\Home\Desktop\source\TestArchiv'); #Zielverzeichnis
Und dann die Create Methode aufrufen: $c->create_cs();
Hast du das create schon mit Patricks Main getestet? Bei mir geht da nur das create aber das -s geht nicht. Da kommt dann diese Fehlermeldung. Vielleicht liegt es ja nur wieder an meinem PC ;)
D:\Eigene Dateien\Documents\GitHub\PerlArchiver\source>perl my_perl_archive.pl - v -cs C:\Users\Michaela\workspace\PerlArchiver\Data C:\Users\Michaela\workspace\ PerlArchiver\Archiv [OK] New source added: -s [OK] New destination added: C:\Users\Michaela\workspace\PerlArchiver\Data Start create c:
[OK] Destroy Can't find directory -s: No such file or directory at Create.pm line 81. Start create s:
[OK] Destroy Can't find directory : No such file or directory at Create.pm line 119. Error in command line arguments
PS: das create mit copy und mkdir scheinen irgendwie auch bei mir jetzt zu funktionieren.
Die Fehlermeldung: Can't find directory : No such file or directory at Create.pm kam bei mir auch wenn ich ein Verzeichnis zum einlesen öffnen wollte und der Pfad mit / statt \ angegeben war. Vielleicht liegt es ja daran
Can't find directory -s: No such file or directory at Create.pm line 81.
Die Fehlermeldung könnte mein Verschulden sein. Da übergeb ich glaub ich den falschen Parameter an die Create-Methode. Muss da den Index im Fall von -s um eins erhöhen um den richtigen Wert aus dem Array zu lesen.
-s ist natürlich kein gültiges Verzeichnis, darum krachts. Werd mich heute Abend oder spätestens morgen dran machen!
Hi zusammen, ich habe die Create Klasse jetzt fertig (hoffentlich!!). Könnt ihr bitte überprüfen ob sie jetzt richtig funktioniert und mir Rückmeldung geben. Am besten die Aufrufen der create_X Methoden in unterschiedlicher Reihenfolge. Die Dateien sollten sich auch währenddessen mal ändern. Danke! Hoffe nur gutes zu hören :-)
@Ramunno Create_s funktioniert nicht! Wieso auch immer tut opendir nicht das was es machen soll. Ich hab es mir angeschaut was in der @folder drinnen ist und die ist leer. Falls es dir hilft
@Ramunno Also ich hab rausbekommen dass es an deiner @seperateFolder hängt. Die grep Funktion gibt nichts zurück. Aber da Create_cs die Create_s Methode verwendet verstehe ich nicht wieso Create_cs funktioniert aber Create_s nicht. Hoffentlich konnte ich dir helfen^^
@Ramunno Hat sich geklärt es funktioniert immernoch nicht
@Ramunno Wenn ich den Archivnamen ohne date_time eingebe dann funktioniert create_s. Aber woher soll es wissen welches von den Archiven ich jetzt verschlanken will?
Du musst es immer ohne datetime angeben. Du willst ja alle Archive verschlanken die zusammengehören und das erkennt man am SOURCE Namen. Sonst würdest du ja versuchen nur ein Archiv zu verschlanken, aber mit was? ;-)
Solange es tut was es machen soll ist mir des alles ehrlich gesagt egal :D
Aber dann geht es oder? Du hast es auch unter Windows getestet?
Ja teste grade alles unter Windows für die Profiling Ergebnisse.
@Ramunno Habe jetzt beim Testen ein Problem gefunden. Ich wollte einen Testfall erstellen bei dem die Hälfte der Daten Shortcuts sind und die andere Hälfte normale Text-Dateien. Ich hab jetzt deine Create_CS dafür benutzt. Dabei hat das Orginal doppelt soviele Datein wie die Kopie im Archiv. D.h. wenn ich Create_CS aufrufe sollte es doch ein Archiv erstellen mit Shortcuts zum älteren Archiv und den neunen Datein. Dein Create_CS macht folgendes:
Ich hoffe ich konnte es verständlich erklären. Falls ich irgendwas hier falsch verstanden habe wäre es nett wenn mich irgendwer aufklären könnte :D
Also wenn du create_cs aufrufst dann wird zuerst create_c aufgerufen, d.h. es wird ein neues Archiv erstellt und alle Daten werden von der Quelle in das Archiv kopiert. Danach wird create_s aufgerufen. Alle älteren Archive werden verschlankt, d.h. wenn die neue Datei gleich der alten ist, wird die alte Datei gelöscht und ein Shortcuts auf die neue Datei erstellt.
@KasikciMu Du musst bei create_s vorher addDestination("Pfad zum Archiv") und dann addArchiveName("Name des Archivs ohne DateTime") aufrufen. Beid create_c und create_cs musst du nur addSource("Pfad zum Quellverzeichnis") und addDestination("Pfad zum Archiv") vorher aufrufen. Dann sollte es funktionieren.
Ok hat sich jetzt alles geklärt Danke
gefixt: Can't find directory -s: No such file or directory at Create.pm line 81.
@Ramunno Folgendes Problem der Hash und das Verzeichnis werden ja von einem ":" getrennt. Bei einem Verzeichnis C:\Users\Hein\Data wird es Probleme mit dem splitten geben! Benutz ein Trennzeichen welches nicht in einem Pfad vorkommen kann.
Das ist eigentlich kein Problem. Man kann einen String in genau zwei Teile splitten:
my ($hash, $path) = split(/\:/, $string, 2);
print "$hash : $path\n";
Danke Patrick, außerdem hatten wir das damals in Issue #30 besprochen
Hallo, habe gesehen, dass du symlink verwendest. Soweit ich das verstehe funktioniert diese Methode unter Windows nicht. Bei mir kommt dann die Meldung "The symlink function is unimplemented".
http://perldoc.perl.org/perlport.html#symlink