2008-09-25 39 views
60

有時,我發現自己希望搜索Perforce中變更列表描述的文本。在P4V中似乎沒有辦法做到這一點。我可以通過更改命令的輸出重定向到一個文件做...如何搜索Perforce中變更列表描述的文本?

p4 changes -l > p4changes.txt 

...(-l開關告訴它傾倒變更列表說明的全文),然後搜索文件,但這很麻煩。有沒有人找到更好的方法?

+0

真正的解決方案是讓p4d在更改列表描述(以及源文件本身....)上有一個全文索引。還有一些奇怪的東西尚未進入產品中。 – Jonesome 2016-08-19 17:53:55

回答

55

當提交的更改列表窗格具有焦點時,CTRL + F允許您執行任意文本搜索,其中包含更改列表說明。

唯一的限制是它只搜索已從服務器獲取的更改列表,因此您可能需要提取檢索的數字。這可以通過導航到編輯 - >首選項 - >服務器數據找到的「更改列表,作業,分支映射或標籤一次獲取」的設置完成。

17

我使用p4sql並對「更改」數據庫運行查詢。下面是perforce database schema

查詢看起來是這樣的(未經測試)

select change from changes where description like '%text%' and p4options = 'longdesc' 

編輯:添加p4options在說明書中返回超過31個字符。

+0

這沒有奏效。出於某種原因,「like」的行爲如同「=」。假設描述是「foo bar」。像'富'失敗,但像'富酒吧'成功。更重要的是,他們不會使整個描述文本可用,只有前30個字符。 – raven 2008-09-25 17:52:54

+0

@raven - %字符對於SQL很重要,並且可以使查詢工作。我也不認爲你在描述中是正確的 - 你應該能夠完全瞭解它。你能發佈你的查詢嗎? – 2008-09-25 19:01:22

+0

@Greg Whitfield:你說得對,我沒有使用%字符。查詢正在工作,但沒有多大用處。我證實它只是查詢和顯示描述的前31個字符。 – raven 2008-09-26 18:47:11

1

使用p4sql真的是有效地做你想要的唯一方法。我不知道有任何其他方式。當然好處是您可以使用select語句來限制更改列表值的範圍(通過日期,用戶等)。你的方法會起作用,但是當你生成更多的變更表時,它會很快變得麻煩。您可以限制更改命令的範圍,但不會獲得p4sql的靈活性。

0

如果你還愛你的命令行,你可以寫一個小的Perl腳本:

  • 更改記錄分隔符$ /到 雙換行符「\ n \ n」,所以它過濾 的投入完整記錄的 ztagged p4輸出。
  • 掃描 '/^... desc /..//'部分與 正則表達式來自參數。

用法可能類似於'p4 -ztag changes -l | yourperlfilter.pl searchterm1 searchterm2'

如果工作正常,你可以integrate it into the p4win tools menu

17

p4 changes -L | grep -B 3 searchstring

-B 3方式顯示匹配的字符串前3行,應該足以顯示2個註釋的改變ID,但您可以根據需要改變它。

6

這是Paul的「grep」答案的Powershell版本。再次,它搜索的變化說明中指定的字符串,並返回之前的3條線路,包括改變ID:

p4 changes -L | select-string "search string" -Context (3,0) 
3

爲什麼重定向到一個文件時,你可以管通過less輸出,並使用less「搜索?

p4 changes -l | less 

然後按/提示輸入搜索字符串。之後,n將跳轉到下一個匹配,並且轉換 + n將跳轉到上一個。

對於Windows的less的實現可作爲UnxUtils的一部分。