【问题标题】:List opened files grouped by pending changelist in p4列出按 p4 中的挂起更改列表分组的打开文件
【发布时间】:2013-06-07 15:56:58
【问题描述】:

在 Cygwin bash 中,如何列出在当前工作区中打开的所有文件,按待处理的更改列表分组(忽略空的或搁置的更改列表)?

例如,如果我在以下更改列表中打开了以下文件,我希望以这种(或类似的)格式显示它:

1234: Changelist 1234's description
//path1/file1 1 add  text
//path2/file2 2 edit text

5678: Changelist 5678's description
//path2/file3 3 edit xbinary

p4 opened|sed "s/\([-#()]\|change\)/ /g"|column -t|sort -k 4 按变更列表编号对它们进行分组:

//path1/file1 1 add  1234 text
//path2/file2 2 edit 1234 text
//path2/file3 3 edit 5678 xbinary

但我希望将每个更改列表编号和描述视为标题。

【问题讨论】:

  • 为什么不使用真正的脚本语言呢?选择您最喜欢的(Perl、Python、Ruby 等)并为您的脚本语言使用 Perforce 绑定,让事情变得简单。

标签: bash cygwin perforce changelist


【解决方案1】:

最简单的方法是这样的:

p4 changes -s pending -c $P4CLIENT | awk '{print $2}' | p4 -x - describe -s

这会列出您当前客户端(也称为工作区)的所有待处理更改并调用p4 describe -s

【讨论】:

  • 谢谢!这几乎是我所需要的,除了它列出了没有任何打开文件的待处理更改列表。有没有办法只列出打开文件的更改列表?
  • 嗯。我想不出任何简单的解决方案。也许通过 sed 管道并过滤掉以“Change”开头的行,然后是另一行以“Change”开头的行。
  • 怎么样:p4 -Ztag -F %change% opened | uniq | p4 -x - describe -s
【解决方案2】:

这是我在 .bashrc 中创建 p4pending 别名以实现类似目标的一段代码。我使用“p4 changes”为每个更改列表生成标题,并使用“p4 opens -c”列出更改列表中打开的文件。这给了我与 P4V 中几乎相同的结果。

__desc_chg()
{
   echo "$1"
   num=`echo $1 | awk '{print $2}'`
   p4 opened -c $num 2>&1 | awk '{print "        "$1,$2,$3,$6}'
   echo 
}

__p4pending()
{
   __desc_chg "Change default by $P4USER@$P4CLIENT *pending*" 
   p4 changes -u $P4USER -c $P4CLIENT -s pending | sort -k2 -n | while read -r l; do __desc_chg "$l"; done
}

alias p4pending='__p4pending'  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多