同步到某个 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);
我的文档和 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);