同步到特定日期/时间范围内的所有CL

时间:2016-12-06 02:05:29

标签: c# perforce

我的文档和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的范围?)谢谢!

(顺便说一下:我很惊讶,还没有#34; P4API"标签,我无法创建一个标签。)

2 个答案:

答案 0 :(得分:0)

好的,经过几个小时的挖掘后,我发现 是一种将实际命令行参数提供给命令的方法。您创建了一个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);

所有这些可能是&#34;放纵的微笑&#34;给那些使用API​​一段时间的人们发布的新闻。当这篇文章中提到的两个页面(&#34; FileSpec对象文档&#34;,&#34; SyncFiles方法文档&#34;)现在处于脱机状态时,对新手来说只是有点混乱:{ {3}}

答案 1 :(得分:0)

这里是您真正想要使用的非命令行版本,来自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);