Perforce: источник интеграции в перформанс - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь найти источник интеграции из одного из моих открытых файлов на моем клиенте Perforce.

Моя команда: -

/grid/common/pkgs/perforce/v2018.1/bin/p4 -p 10.202.176.19:1641 -Ztag -F %clientFile% opened -c default -C cheruvu_client | /grid/common/pkgs/perforce/v2018.1/bin/p4 -p 10.202.176.19:1641 -F %fromFile% -x - resolved

Команда работает должным образом, когда я запускаю ее явно.

Но когда я пытаюсь запустить свой скрипт, он не работает, как ожидалось.

Мой сценарий: -

use strict;
use warnings;
my $Client = $ARGV[0];
my $ChangeNum = $ARGV[1];
my $Port = $ARGV[2];
my $p4 = "/grid/common/pkgs/perforce/v2018.1/bin/p4 -p $Port";
my @files = `$p4 -Ztag -F %clientFile% opened -c $ChangeNum -C $Client | $p4 -F %fromFile% -x - resolved`;
if (@files){
 foreach my $file(@files){
 chomp($file);
 if ($file =~ /\/\/depot\/vip\/src\/branches\/private_branch\/.*/i){
   print "Integrations from private_branch-> main is not allowed.\n\n";
  exit(1);
 }
 }
 }

@ значение массива файлов пустое. Хотя я открыл файл для интеграции.

Цель моего скрипта - настроить триггер, чтобы избежать интеграции из private_branch в основную ветку. Не уверен, что что-то не так в моей команде, указанной в скрипте.

Аргументы времени выполнения скрипту передаются при отправке файла. Нет проблем в разборе аргументов во время выполнения.

Пожалуйста, помогите.

1 Ответ

2 голосов
/ 10 июля 2019

Команды, которые вы запускаете, получают где-то сообщение об ошибке, а переданные вами -F аргументы удаляют его:

my @files = `$p4 -Ztag -F %clientFile% opened -c $ChangeNum -C $Client | $p4 -F %fromFile% -x - resolved`;

Заменить это на:

open(STDERR, ">&STDOUT");
my @files = `$p4 -Ztag -F %clientFile% opened -c $ChangeNum -C $Client | $p4 -x - resolved`;
print @files;

чтобы узнать, какое сообщение об ошибке вы получаете.

Если там тоже пусто, вернитесь на шаг:

open(STDERR, ">&STDOUT");
my @files = `$p4 -Ztag opened -c $ChangeNum -C $Client`;
print @files;

Как только вы увидите сообщение об ошибке, оно скажет вам, что не так с тем, как вы вызываете команду.

My hunch заключается в том, что ваша команда resolved не использует тот же клиент, на котором открываются файлы. Если это так, ошибка будет выглядеть примерно так: no file(s) resolved; Вы можете подтвердить, передав имя файла в p4 opened (без указания -C client), чтобы увидеть, открыто ли оно на текущем клиенте.

...