2008-09-25 90 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的一部分。