我的文档和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"标签,我无法创建一个标签。)
答案 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);