如何在Perforce中快速查找/删除所有空的更改列表?

时间:2009-10-16 08:37:39

标签: perforce administration changelist

我想知道尝试删除已提交的更改列表有什么意义,因为提交的更改列表不应该为空。

但是后来我正在玩教程库,并在整个分支上使用obliterate命令,我可以看到有些情况你最终会得到空的已提交的更改列表(需要使用-f标志删除)。 / p>

但是,我不知道如何使用命令行找到它们,因为我不知道如何查找没有与之关联的文件的更改列表。

有一种简单的方法吗?

谢谢,

托马斯

4 个答案:

答案 0 :(得分:6)

啊!

在询问之前我应该​​浏览更多文档...

http://public.perforce.com/wiki/Perforce_Command_Line_Recipes

  

说明:删除所有空提交的更改列表   Shell命令:p4更改-s submitted | cut -d“” - f 2 | xargs -n1 p4改变-d -f
  Powershell:p4更改-s已提交| %{p4 change -d -f $ _.split()[1]}
  px:px -F%更改%更改-s提交| px -X-改变-d -f
  撰稿人:Sam Stafford,Philip Kania,Shawn Hladky

咄。

托马斯

答案 1 :(得分:1)

要简单地查找所有空提交的更改列表而不删除它们,您可以比较这两个命令的输出:

  • p4 changes -s submitted - 所有更改列表
  • p4 changes -s submitted //... - 包含相关文件的所有更改列表

例如,在Windows PowerShell中,运行

diff -ReferenceObject (p4 changes -s submitted) -DifferenceObject (p4 changes -s submitted //...)

答案 2 :(得分:0)

当我在Windows上时,我创建了一个小脚本在PERL中执行完全相同的操作,而不是Shell,powershell或px :):

#*******************************************************************************
# Module:  delete_empty_changelist.pl
# Purpose: A script to delete empty changelist
# 

@list = `p4 changes -s submitted`;

foreach $chg (@list)
{
 $chgnbr = (split /\s+/, $chg)[1];
 print `p4 change -d -f $chgnbr`;
 }     
exit 0;

请注意,实际上,在所有情况下,它都不是一个非常聪明的脚本:它会尝试绝对删除每个提交的更改列表,并且perforce会阻止这样做,因为如果文件与之关联,则会出现错误

我认为应该将脚本的结果发送到日志并进行解析,以便只突出显示相关的行。

运行脚本将产生类似于:

的输出
Change 857 has 1 files associated with it and can't be deleted.
Change 856 has 1 fixes associated with it and can't be deleted.
Change 855 has 1 fixes associated with it and can't be deleted.
Change 854 deleted.
Change 853 has 1 fixes associated with it and can't be deleted.
Change 852 has 8 files associated with it and can't be deleted.
Change 851 has 1 files associated with it and can't be deleted.
Change 850 has 2 files associated with it and can't be deleted.
Change 849 has 2 files associated with it and can't be deleted.
Change 846 deleted.
Change 845 has 2 files associated with it and can't be deleted.

干杯,

托马斯

答案 3 :(得分:0)

这是仅限DOS CMD的版本。只需替换%p4streamsUser%。

    for /f "tokens=* delims=" %%i in ('p4 changes -u %p4streamsUser% -s pending') do (
        for /f "tokens=1-7*" %%a in ("%%i") do (
            echo Deleting CL %%b %%h %%f
            p4 change -d -f %%b
        )
    )

我在Windows 7机器上。这将适用于其他几个版本的Windows / DOS。