2016-12-06 3 views
1

Моей документация и Google-фу серьезно не удается мне на этом, так:синхронизации всех CLs в пределах определенного диапазона дат,/Time

как я использую GetChangelist P4API в() для синхронизации диапазона файлов (т.е. все файлы из @now на @twoDaysAgo)? Я могу легко построить командную строку, чтобы сделать это как так:

p4 changes -s submitted //[email protected]/12/01,2016/12/06 

но API хочет, чтобы взаимодействовать с сервером через

GetChangelist(Options options, FileSpec[] files) 

Это сводит меня с ума, что я должен построить комбо Options и Filespecs [], чтобы сделать запрос вместо этого, и (AFAIK) не может просто передать фактическую строку командной строки. Тем более, что вся документация не существует.

Может кто-нибудь просветить меня о том, какие параметры параметров файла мне нужно пройти? (Я думаю, что это то, что мне нужно использовать, чтобы указать, что я хочу получить диапазон всех CL за определенное время?) Спасибо!

(Кстати: я был удивлен, что не является «P4API» тег еще, и я не могу создать.)

ответ

0

Хорошо, после того, как еще пару часов копания, я обнаружил, что там - это способ подачи фактических параметров командной строки в команду. Вы создаете DepotSpec, а затем что-то вроде это работает для меня, чтобы ограничить диапазон времени для CLs, полученных с сервера:

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

Все это могло бы быть «снисходительный улыбка» старые новости для людей, которые уже работали с API на некоторое время. Это просто немного запутывает новичков, когда документация, подобная двум страницам, упомянутым в этом сообщении («FileSpec object docs», «SyncFiles method docs»), теперь отключена: Perforce Api - How to command "get revision [changelist number]"

+0

Не собираюсь отмечать это как правильный ответ. Хотелось бы полюбить некоторый вклад от людей, которые действительно знают API. – Drakestar

+0

Этот метод работает лучше всего, потому что у вас нет ошибок с диапазоном времени. Используйте другой метод, если вы хотите использовать более чистый подход и не заботитесь о метке времени (только для диапазона дат). – Drakestar

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); 
+0

Это официально правильный путь, НО - я не мог заставить его работать на отметки времени. Возвращенный список содержит все CL в указанном диапазоне * date *, но отметки времени игнорируются. – Drakestar

Смежные вопросы