2017-03-01 1 views
0

Ich versuche, Code zu schreiben, um Unterordner mit bestimmten Namen in einen anderen Ordner zu verschieben. Ich habe die Befehle zum Ändern, Kopieren, Synchronisieren und Löschen verwendet, bin mir aber nicht sicher, was ich falsch mache.Mit Perforce-Befehlen können keine Dateien von einem Ordner in einen anderen verschoben werden

Wenn ich diesen Code ausführen, spuckt meine Perl Tk GUI "Freigegebene xxx", aber die Ordner wurden nicht tatsächlich verschoben. Zur gleichen Zeit, wenn ich diese Befehle ausführe, kann ich nicht einmal feststellen, dass die Datei in P4V existiert.

Hier ist das Code-Snippet, das sich mit dem Umzug beschäftigt.

my $changelistnumber 
    = qx{(p4 change -o | findstr /C:Description: /C:Change: /C:Client: /C:User: /C:Status: & echo Released $folder) | p4 change -i}; 

$changelistnumber =~ s/[^0-9]//g; 

my $printOutput 
    = qx{p4 copy -c $changelistnumber -v //syseng/Libraries/Concept/request_for_approval/$libfolderUnreleased/$folder/... //syseng/Libraries/Concept/released/$libfolder/$folder/...}; 

print "Hello!"; 

$printOutput 
    = qx{p4 sync -k //syseng/Libraries/Concept/request_for_approval/$libfolderUnreleased/$folder/...}; 

print "Hello1"; 

$printOutput 
    = qx{p4 delete -c $changelistnumber //syseng/Libraries/Concept/request_for_approval/$libfolderUnreleased/$folder/...}; 

print "Hello2"; 

$printOutput = qx{p4 submit -c $changelistnumber}; 

$d->Label(-text=> "Released $folder")->pack(); 
+0

Was ist der Zweck der drei Punkte '...' nach den Pfadnamen? –

+0

Das ist, wie dieser Befehl in der P4V-Dokumentation angegeben ist - https://www.perforce.com/perforce/r16.2/manuals/cmdref/p4_copy.html – Shashank

+2

@ Håkon Hægland, p4 Notation für "alle Dateien hier und in Nachfahren Unterverzeichnisse " – ikegami

Antwort

2

die Ausgabe der verschiedenen Befehle Sehen Sie wären hilfreich laufen - wenn Ihre Änderungsliste wird dort nicht vorgelegt bekommen würde eine Fehlermeldung dort irgendwo. Ich würde empfehlen, dieses Szenario von der Befehlszeile aus jeweils zu einem Zeitpunkt auszuprobieren, damit Sie eine gute Vorstellung davon haben, wie die Ausgabe der einzelnen Befehle aussieht, bevor Sie versuchen, sie zu skripten.

Ich würde den changelist Teil so etwas tun (aus der Spitze meines Kopfes, müssen Sie möglicherweise einige dieser Zeichen zu entkommen und/oder überprüfen Sie, dass% change% ist das richtige Feld von der p4 -Ztag change Ausgabe zu greifen):

$changenumber = `p4 --field "Description=I moved it!" change -o | p4 -Ztag -F %change% change -i`; 

ich auch move statt copy -v + delete verwenden würde vorschlagen, wenn Sie nur die Dateien verschieben wird eine redundante Synchronisation (die move Befehl zu tun, ohne dass eine lokale Kopie der Dateien haben wollen mandanten Seite, wenn sie bereits synchronisiert sind):

p4 sync //depot/oldpath/... 
p4 edit //depot/oldpath/... 
p4 move //depot/oldpath/... //depot/newpath/... 
p4 submit -d "I moved it!" 
+0

Findstr ist wie Grep für Windows Batch-Datei-Programmierung. Jede Zeile, die mit einem der Zeichen übereinstimmt, die mit einem/C: -Flag angegeben wurden, wird gedruckt. Er nutzt die Tatsache aus, dass Beschreibung: ist die letzte gedruckte, heftet sich an seine Beschreibung am Ende und füttert es auf p4 Client -i. –

+0

oh ich sehe, und anstatt die Zahl zu wählen, entfernt die Regex alles, was keine Zahl ist. Ich denke, das funktioniert? Die Verwendung von "-F" und "--field" ist jedoch viel einfacher. :) –

0

Funktioniert das überhaupt? Wird eine Änderungsliste erstellt, wenn Sie sie ausführen? Sie erfassen die Ausgabe jedes Befehls, drucken sie aus und sehen, was passiert. Eine Sache zu überprüfen ist, ob die Umgebung, in der das Skript läuft, die richtigen Werte für P4PORT, P4USER usw. hat. Ich würde auch mit dem übereinstimmen, was Sam sagte, ein Umzug macht mehr Sinn als ein Kopieren/Löschen. Obwohl Sie die Dateien löschen, sind sie immer noch auf dem Server vorhanden und benötigen Speicherplatz. Plus-Bewegung behält Geschichte, die Kopie nicht.

Verwandte Themen