P4V: автоматическая интеграция списка изменений по списку изменений с использованием отображения ветвей
Используя Perforce, я пытаюсь автоматизировать интеграцию из нашей ветви разработки в нашу основную ветку. У меня настроено отображение веток, и я знаю, что могу автоматически интегрировать изменения для всей ветви. Мне было интересно, если есть способ интегрировать через филиал, но делать это по одному списку изменений за раз, в последовательном порядке?
Например, сегодня у нас есть 3 разработчика, которые отправляют изменения в нашу ветку dev, используя Changelist # 1, 2 и 3. Есть ли способ сделать p4 integrate -b branchname, но сделать это отдельно для каждой changelis, начиная с 1? Таким образом, если есть проблема, я могу отказаться только от определенных списков изменений? Или, что еще лучше, если я могу сказать, чтобы он интегрировал только самый ранний список изменений, который нужно интегрировать, чтобы я мог интегрировать список изменений 1, протестировать сборку, затем интегрировать список изменений 2 и т. Д.
Один из моих коллег упомянул об использовании Jobs, но, насколько я понимаю, задания позволят мне только автоматизировать информацию об ошибках и тому подобном, но не позволят мне фактически выполнять интеграцию автоматически.
Извините, если ответ очевиден, я все еще относительно новичок в Perforce. Я посмотрел в Интернете, но ничего не смог найти.
3 ответа
Если вы хотите интегрировать список изменений по списку изменений, лучше всего использовать команду "p4 interchanges" (я думаю, она доступна только в командной строке). Вы можете использовать команду interchanges, чтобы выяснить, какие списки изменений необходимо интегрировать от источника к цели (см. Использование командной строки для различных методов, как вы могли бы сделать это).
Лучше всего заключить эту команду в некоторый сценарий (через python, perl или любой другой) и вызвать команду interchanges, а затем для каждого списка изменений, который возвращает interchanges, вы можете запустить объединение, запустить тест на дым, а затем повторить,
Обратите внимание, что команда interchanges по-прежнему не поддерживается (по состоянию на версию 2010.2). В зависимости от вашего использования, сложности филиалов и размера проектов, ваш пробег на использование может варьироваться, но для наших (больших) проектов это работает очень хорошо.
Надеюсь это поможет.
'p4 interchanges' будет официально поддерживаться с выпуском 2011.1.
Как указано в первом ответе, вы можете использовать "interchanges", чтобы получить список списков изменений, которые необходимо объединить. Затем вы можете интегрировать и разрешать каждый из них в отдельности, а затем подавать все сразу.
Вот скрипт perl, который помогает вам интегрировать список изменений из одной ветви в другую, просто обновите спецификацию ветви ниже. Передайте список изменений один за другим в качестве аргумента. Это будет делать то, что вам нужно.
#!/usr/local/bin/perl
my $chnum=$ARGV[0];
die("\nIntegration aborted to avoid including currently open files in the default change!\n")
if system ("p4 opened 2>&1 | findstr /c:\"default change\" > NUL: 2>&1") == 0 ;
print "integrating change $chnum\n";
open(FIL,"p4 change -o $chnum|");
while (<FIL>) {
$originator = $1 if /^User:\s*(\w*)/;
last if /^Description:/;
}
$originator = ' by ' . $originator if $originator;
while (<FIL>) {
$description .= $_;
}
print "Description:\n$description\n";
close(FIL);
system ("p4 integ -b <BranchSpec> \@$chnum,\@$chnum");
system ("p4 resolve -as");
system ("p4 resolve -am");
system ("p4 resolve");
open (FIL1,"p4 change -o|");
open (FIL2,"|p4 change -i");
while (<FIL1>) {
if (/<enter description here>/) {
print FIL2 " Integration: Change $chnum$originator <From Branch> to <To Branch>:\n";
print FIL2 $description;
} else {
print FIL2 $_;
}
}
close (FIL1);
close (FIL2);
print "Finished integrating change $chnum\n";