p4使用p4api.net方法恢复不使用-a选项的文件

时间:2015-03-14 14:35:45

标签: perforce p4v p4api.net

尝试使用p4api.net方法中的-a选项还原更改列表中的文件。它曾经为我工作,但现在我得到以下消息的例外。

另外p4编辑和p4恢复使用-c选项工作正常,但p4恢复使用-a选项会抛出异常。我不知道为什么在p4工作空间位置选择测试项目位置以下。

例外:

路径'd:\ cftt \ Dev \ source \ BRF \ BRF.Business.Test \ bin \ Debug \ 19402547'不在客户端根目录'D:\ p4'下。

// to open files for edit in a given changelist at certain loc with particular file format 
          public IList<FileSpec> EditChangeList(string clNumber, string fileFormat, string destinationPath)
    {
        try
        {
            var rep = Connect();
            var opts = new Options(ChangeCmdFlags.None, ChangeListType.None);
            opts["-c"] = clNumber;
            var fs = new FileSpec(new DepotPath(destinationPath + "/..." + fileFormat));
            IList<FileSpec> editedFileSpec = rep.Connection.Client.EditFiles(new List<FileSpec> {fs}, opts);
            return editedFileSpec;
        }
        catch (Exception exc)
        {
            Logger.LogError(exc.Message);
            throw;
        }
    }

    // to revert files in a changelist that are unchanged using -a option
           public IList<FileSpec> RevertChangeList(string clNumber, string destinationPath)
    {
        try
        {
            var rep = Connect();
            var opts = new Options(ChangeCmdFlags.None, ChangeListType.None);
            opts["-a"] = clNumber;
            var fs = new FileSpec(new DepotPath(destinationPath + "/..."));
            IList<FileSpec> revertedFiles = rep.Connection.Client.RevertFiles(new List<FileSpec> {fs}, opts);
            return revertedFiles;
        }
        catch (Exception exc)
        {
            Logger.LogError(exc.Message);
            throw;
        }
    }

1 个答案:

答案 0 :(得分:0)

revert命令采用几种不同类型的标志和参数:

  • 标志,如-a,-n和-w,它们没有任何价值,但只是旗帜
  • -c标志,它将更改列表号作为标志
  • 的值
  • 要还原的文件,在所有标志之后指定为参数(可以指定多个文件参数)

在您的命令中,您运行了:

p4 revert -a 19402547 d:\p4\sw\dev\gpu_drv\chips_a\diag\mods\sim\resources/...

由于-a标志没有取值,因此revert命令将其视为:

  • -a flag
  • 文件参数:19402547
  • 文件参数:d:\ p4 \ sw \ dev \ gpu_drv \ chips_a \ diag \ mods \ sim \ resources /...

由于文件参数19402547前面没有目录名,因此revert命令将其解释为相对于当前目录的相对文件名,并查找名为&#39; d:\ cftt的文件\开发\源\ BRF \ BRF.Business.Test \ BIN \调试\ 19402547&#39; ,确实不在您客户的根目录下,因此不是Perforce能够恢复的文件。

这里的正确方法是完全省略更改列表编号,或者将其指定为-c标志的值,具体取决于您是否要还原sim \ resources目录中的所有打开文件,或者是否仅希望还原该目录中那些在changelist 19402547中打开的打开文件。

即两者:

p4 revert -a d:\p4\sw\dev\gpu_drv\chips_a\diag\mods\sim\resources/...

p4 revert -a -c 19402547 d:\p4\sw\dev\gpu_drv\chips_a\diag\mods\sim\resources/...

是合理的命令,正确的选择取决于你想要的行为。