2016-02-26 69 views
1

我知道一些ChangeList的朋友。我想將此CL號傳遞給Bash腳本,該腳本將生成patch程序的讀取diff文件(這將重新創建git repo中的更改)。Perforce命令行統一比較了一個擱置的ChangeList

到目前爲止,我有這樣的:

function p4_shelved_cl_to_diff() 
{ 
    p4 describe -S -du $1 > p4_diff.patch 
} 

它產生的差異,但頭是在P4格式:

==== //p4_repo/dir_in_repo/dir/file.cpp#123 (text) === 

,而他們應該在

--- dir/file.cpp 
+++ dir/file.cpp 

那麼什麼我期待的是一個特殊的p4語法(廣泛搜索,檢查p4手冊–小希望)或者而不是一個sed/awk/whatever腳本,它會爲我做出更改

任何想法,或者可能有人已經寫過?

+0

嘗試在這個答案轉換這些文件標題的建議:http://stackoverflow.com/a/8289560/193453 –

+0

而且這個相似的答案:http://stackoverflow.com/a/13609062/193453 –

+0

謝謝。第二個更接近我正在尋找的東西,但是sed表達式不起作用。似乎本傑明W有工作版本。 – Koshmaar

回答

1

這種替代方式更適合您例如:

$ sed 's|^====.*/\([^/]*/[^#]*\).*===$|--- \1\n+++ \1|' infile 
--- dir/file.cpp 
+++ dir/file.cpp 

它可以在開始與====(與===實際上沒有結束結束行,但我相信這只是問題的一個錯字,而且還要爭取以====結尾的行)。

它捕獲倒數第二個和最後一個/#之間的所有內容,然後在單獨的行上添加---+++

請注意,我沒有查看p4 diff標頭的一般格式,因此在其他情況下可能會中斷–更好的整體解決方案是修復生成錯誤標頭的問題。

+0

謝謝!我不是sed嚮導,但看起來不錯,我會在兩週後嘗試它在工作:)「倒數第二/」和一般格式 - 在我得到的真正差異中,dir/file.cpp實際上是有點像dir1/dir2/dir3/file.cpp。我認爲腳本應該獲取參數 - repo上的最後一個dir的名稱,或者/刪除的數目,以使其工作在更一般的意義上。是的,最好的辦法是讓p4生成正常的統一差異。我想現在這是不可能的,我將不得不在他們的論壇上大聲抱怨,然後等待幾個星期/月的修復。 – Koshmaar