同步到某个 Date/Time 范围内的所有 CL

Sync to all CLs within a certain Date/Time range

我的文档和 Google-fu 在这方面严重失败,所以:

如何使用 P4API 的 GetChangelist() 函数来同步一系列文件(即从@now 到@twoDaysAgo 的所有文件)?我可以像这样轻松构建命令行来执行此操作:

p4 changes -s submitted //...@2016/12/01,2016/12/06

但是 API 希望我通过

与服务器交互
GetChangelist(Options options, FileSpec[] files)

令我发疯的是,我必须构建 Options 和 Filespecs[] 的组合来发出请求,并且(AFAIK)不能只传递实际的命令行字符串。特别是因为所有文档似乎都不存在。

有人能告诉我我必须传递什么样的 filespec 参数吗? (我想我需要用它来指定我想在特定时间内获得所有 CL 的范围?)谢谢!

(顺便说一句:令我惊讶的是还没有 "P4API" 标签,而且我无法创建标签。)

好吧,经过几个小时的挖掘,我发现一种将实际命令行参数提供给命令的方法。您创建一个 DepotSpec,然后像这样的东西对我有用,可以限制从服务器检索 CL 的时间范围:

ChangesCmdOptions changeListOptions = new ChangesCmdOptions(ChangesCmdFlags.FullDescription|ChangesCmdFlags.IncludeTime, null, 0, ChangeListStatus.None, null);
FileSpec[] fileSpecs = new FileSpec[1] { new FileSpec(new DepotPath("//depot/...@2016/12/05 21:57:30,@now"), null, null, null) };                       
IList<Changelist> changes = m_Repository.GetChangelists(changeListOptions, fileSpecs);

对于使用 API 一段时间的人来说,所有这些可能都是 "indulgent smile" 旧闻。当像 post ("FileSpec object docs", "SyncFiles method docs") 中提到的两页这样的文档现在离线时,这对新手来说有点混乱:Perforce Api - How to command "get revision [changelist number]"

这是您真正想要使用的非命令行版本,来自 Perforce 文档(一旦您找到它:))

PathSpec path = new DepotPath("//depot/...");
DateTimeVersion lowerTimeStamp = new DateTimeVersion(new DateTime(2016,12,06));
DateTimeVersion upperTimeStamp = new DateTimeVersion(DateTime.Now);
VersionSpec version = new VersionRange(lowerTimeStamp, upperTimeStamp);
FileSpec[] fileSpecs = { new FileSpec(path, version) };

ChangesCmdOptions changeListOptions = new ChangesCmdOptions(ChangesCmdFlags.FullDescription | ChangesCmdFlags.IncludeTime, null, 0, ChangeListStatus.None, null);
IList<Changelist> changes = m_Repository.GetChangelists(changeListOptions, fileSpecs);