P4V: автоматическая интеграция списка изменений по списку изменений с использованием отображения ветвей - PullRequest
3 голосов
/ 26 сентября 2011

Используя Perforce, я пытаюсь автоматизировать интеграцию из нашей ветки разработки в нашу основную ветку.У меня настроено отображение ветвей, и я знаю, что могу автоматически интегрировать изменения для всей ветви.Мне было интересно, есть ли способ интегрировать через ветку, но делать это по одному списку изменений за раз, в последовательном порядке?

Например, сегодня у нас есть 3 разработчика, которые отправляют изменения в нашу ветку разработки с Changelist #1, 2 и 3. Есть ли способ сделать p4 встроить -b фирменное имя, но нужно ли ему отдельно интегрировать для каждого changelis, начиная с 1?Таким образом, если есть проблема, я могу отказаться только от определенных списков изменений?Или, что еще лучше, если я могу сказать, чтобы он интегрировал только самый ранний список изменений, который нужно интегрировать, чтобы я мог интегрировать список изменений 1, протестировать сборку, затем интегрировать список изменений 2 и т. Д.

Один из моихколлеги упоминали об использовании Джобса, но, насколько я понимаю, вакансии позволят мне только автоматизировать информацию об ошибках и тому подобном, но не позволят мне автоматически выполнять интеграцию.

Извините, если ответ очевиден, яЯ все еще относительно новичок в Perforce.Я посмотрел в Интернете, но ничего не смог найти.

Ответы [ 3 ]

0 голосов
/ 27 сентября 2011

'p4 interchanges' будет официально поддерживаться в выпуске 2011.1.

Как указано в первом ответе, вы можете использовать 'interchanges', чтобы получить список списков изменений, которые необходимо объединить.Затем вы можете интегрировать и разрешать каждую из них в отдельности, а также отправлять все сразу в конце.

0 голосов
/ 17 февраля 2012

Вот скрипт 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";
0 голосов
/ 27 сентября 2011

Если вы хотите интегрировать список изменений по списку изменений, лучше всего использовать команду «p4 interchanges» (я думаю, она доступна только в командной строке).Вы можете использовать команду interchanges, чтобы выяснить, какие списки изменений необходимо интегрировать из источника в цель (см. Использование командной строки для различных способов, как вы могли бы сделать это).

Лучше всего, чтобы обернуть этовведите команду в каком-либо скрипте (через python, perl или что-то еще) и вызовите команду interchanges, а затем для каждого списка изменений, который возвращает interchanges, вы можете запустить объединение, запустить тест на дым и затем повторить.

Обратите внимание, что команда interchanges по-прежнему не поддерживается (по состоянию на версию 2010.2).В зависимости от вашего использования, сложности веток и размера проектов ваш пробег на использование может варьироваться, но для наших (больших) проектов это работает очень хорошо.

Надеюсь, это поможет.

...