2017-03-01 102 views
0

我正在嘗試編寫一些代碼以將具有特定名稱的子文件夾移動到另一個文件夾。我使用了更改,複製,同步和刪除命令,但我不確定我做錯了什麼。無法使用Perforce命令將文件從一個文件夾移動到另一個文件夾

當我運行此代碼時,我的Perl Tk GUI吐出「Released xxx」,但這些文件夾實際上沒有移動。同時,當我運行這些命令時,即使文件存在於P4V中也無法識別。

這是處理移動的代碼片段。

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

路徑名後的三個點「...」的用途是什麼? –

+0

那就是如何在P4V文檔中指定該命令 - https://www.perforce.com/perforce/r16.2/manuals/cmdref/p4_copy.html – Shashank

+2

@HåkonHægland,p4表示「所有文件在這裏和後裔子目錄「 – ikegami

回答

2

查看您正在運行的各種命令的輸出將會很有幫助 - 如果您的更改列表未提交,那麼會在某處出現錯誤消息。我建議從命令行一次一個命令地嘗試這個場景,所以你有一個好主意,在嘗試編寫腳本之前,每個命令的輸出是什麼樣的。

我會做changelist部分,就像這樣(關閉我的頭頂,你可能需要逃避一些這些字符和/或仔細檢查%change%是從p4 -Ztag change輸出中抓取的正確字段):

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

我也想,如果你想擁有這些文件的本地副本,而不需要做冗餘同步(該move命令將只是移動文件客戶端 - 建議使用的copy -vmove代替+ delete如果他們已經同步):

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

findstr就像是用於Windows批處理文件編程的grep。與用/ C:標誌指定的某個字符串相匹配的每行都被打印出來。他利用了Description:是最後一個打印的事實,最後在他的描述中加上了它,並將其提供給p4 client -i。 –

+0

哦,我看到了,而不是挑出數字,正則表達式刪除所有不是數字的東西。我猜這是有效的?但是使用「-F」和「--field」要容易得多。 :) –

0

是否有這項工作?更改列表在運行時是否被創建?您正在捕獲每個命令的輸出,將其打印出來並查看發生了什麼。 需要檢查的一件事是腳本運行的環境是否具有P4PORT,P4USER等的正確值。 我也同意Sam的說法,此舉比複製/刪除更有意義。即使您要刪除這些文件,它們仍然存在於佔用空間的服務器上。 Plus移動會保留歷史記錄,而複製不會。

相關問題