如何显示由Perforce的API进行文件操作的输出?(How to show output for

2019-11-03 14:44发布

我会通过Perforce的API同步Perforce的文件。 我希望每个文件的操作输出。 像我们看到的从P4 CMD输出:

  • //depot/file.txt#1 - 更新 X:\ file.txt的
  • //depot/file.txt#2 - 删除为 X:\ file.txt的

这里是我的Perforce API代码,同步文件:

var repository = new P4.Repository(new P4.Server(new P4.ServerAddress("server:111111")));
repository.Connection.UserName = "me";
repository.Connection.Connect(new P4.Options());
repository.Connection.Login("password");
repository.Connection.Client = repository.GetClient("client");
var syncFlags = new P4.Options(P4.SyncFilesCmdFlags.Force, 100);
var clientPath = new P4.ClientPath(@"X:\File.txt");

IList<P4.FileSpec> results = repository.Connection.Client.SyncFiles(syncFlags, new[] { new P4.FileSpec(clientPath, new P4.Revision(1)) });
P4.VersionSpec downloadedVersion = results.First().Version; // This is #1 as expected

results = repository.Connection.Client.SyncFiles(syncFlags, new[] { new P4.FileSpec(clientPath, new P4.Revision(2)) });
downloadedVersion = results.First().Version; // This is #2 as expected

results = repository.Connection.Client.SyncFiles(syncFlags, new[] { new P4.FileSpec(clientPath, new P4.Revision(0)) });
downloadedVersion = results.First().Version; // File is really deleted and I hoped for #0, but it's #2!

我怎样才能获得的信息,该文件被删除? 我试图用SyncFiles输出如此,但信息不删除的文件正确。 有没有其他办法?

Answer 1:

这是解决方案,我发现:

repository.Connection.TaggedOutputReceived += Connection_TaggedOutputReceived;


static void Connection_TaggedOutputReceived(uint cmdId, int ObjId, P4.TaggedObject t)
{
    string action, oldAction, haveRevStr, depotFile;

    t.TryGetValue("action", out action);
    t.TryGetValue("oldAction", out oldAction);
    t.TryGetValue("haveRev", out haveRevStr);
    t.TryGetValue("depotFile", out depotFile);

    if (haveRevStr == null || haveRevStr == "none")
        haveRevStr = string.Empty;
    else
        haveRevStr = "#" + haveRevStr;

    if (string.IsNullOrEmpty(oldAction))
        oldAction = string.Empty;
    else
        oldAction = oldAction + " ";

    if (depotFile != null && action != null)
        Console.Out.WriteLine("{0}{1} - {2}{3}", depotFile, haveRevStr, oldAction, action);
}

...的repository.Connection还包含其他有趣的代表挂钩:.CommandEcho,.Errorreceived,.InfoResultReceived,.TextResultsReceived



Answer 2:

该Client.SyncFiles功能为您提供了一个整洁的列表,它的文件受到影响,但不是同步命令的输出的其余部分。 如果你只是想弄清楚文件是否被删除或不,statting的的clientFile在本地机器上应该做的伎俩。

如果你想全力输出,使用P4Server接口是一个更好的选择:

https://www.perforce.com/manuals/p4api.net/p4api.net_reference/html/M_Perforce_P4_P4Server_RunCommand.htm

如果调用RunCommand()的“标记”设置为true,它应该给你所有你想从“P4 -Ztag(命令)”获得的数据,对结果通过GetTaggedOutput访问()。 运行它没有“标记”选项会给你格式化的消息,你会看到作为最终用户,可以访问通过GetInfoMessages()。



文章来源: How to show output for file operations performed by Perforce API?