我们如何在Perforce中搜索变更列表描述的文本?

时间:2020-03-06 14:43:44  来源:igfitidea点击:

有时,我发现自己想在Perforce中搜索变更列表描述的文本。在P4V中似乎没有办法做到这一点。我可以通过将changes命令的输出重定向到文件来做到这一点。

p4 changes -l > p4changes.txt

...(-l开关告诉它转储变更列表描述的全文),然后搜索文件,但这很麻烦。有没有人找到更好的方法?

解决方案

我使用p4sql并在" changes"数据库上运行查询。这是perforce数据库架构

查询看起来像这样(未经测试)

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

编辑:添加了p4options以返回描述中超过31个字符。

实际上,使用p4sql是有效执行所需操作的唯一方法。我没有其他办法。当然,这样做的好处是我们可以使用select语句来限制更改列表值的范围(通过日期,用户等)。方法可以使用,但是随着我们生成更多变更列表,它会变得非常麻烦。我们可以限制changes命令的范围,但不会获得p4sql的灵活性。

如果我们仍然喜欢命令行,则可以编写一个小的perl脚本,该脚本可以:

  • 将记录分隔符$ /更改为双换行符" \ n \ n",以便将输入过滤为带有ztagged p4输出的完整记录。
  • 使用args中的正则表达式扫描'/ ^ ... desc /..//'部分。

用法类似于'p4 -ztag changes -l | yourperlfilter.pl searchterm1 searchterm2'

如果可以,则可以将其集成到p4win工具菜单中。

当提交的变更列表窗格具有焦点时,CTRL + F允许我们进行任意文本搜索,其中包括变更列表说明。

唯一的限制是,它仅搜索从服务器获取的那些更改列表,因此我们可能需要增加所检索的数量。这可以通过"更改列表的数量,作业,分支映射或者一次提取的标签"设置来完成,可以通过导航至"编辑"->"首选项"->"服务器数据"来找到。

游戏上的Eddie在http://www.eddiescholtz.com/blog/archives/130上发布了他的Perforce Changelist Search 0.1

但是,我喜欢将我最喜欢的文本编辑器与以下命令结合使用:
p4更改-s已提交// prog / stuff / main / ...> temp.txt

p4更改-L | grep -B 3 searchstring

-B 3表示在匹配的字符串之前显示3行,应该足以显示带有2行注释的更改ID,但是我们可以根据需要进行更改。

这是Paul的" grep"答案的Powershell版本。再次,它在变更描述中搜索指定的字符串,并返回其前面的3行,以包括变更ID:

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