Вот небольшой Perl скрипт, который делает это без использования регулярных выражений:
foreach(`p4 -F %domainName% branches`) {
chomp;
if (`p4 -F %code0% populate -fn -b $_ -s $ARGV[0]` != 554768862) { print $_."\n"; }
}
Пример вывода (где каждая ветвь отображает //depot/main
, но только foo
отображает //depot/foo
):
C:\Perforce\test>p4 branches
Branch bar 2020/03/16 'Created by Samwise. '
Branch foo 2020/03/16 'Created by Samwise. '
Branch spaces 2020/03/16 'Created by Samwise. '
C:\Perforce\test>perl get-branch.pl //depot/foo/bleh
foo
C:\Perforce\test>perl get-branch.pl //depot/main/bleh
bar
foo
spaces
Он работает, выполняя команду populate
для каждой ветви spe c с указанным путем к файлу и ища указанное c сообщение об ошибке no source file(s) in branch view
(которое является кодом ошибки 554768862; I получил это, играя с p4 -e populate ...
). Если он не получает это сообщение, он предполагает, что путь отображается в представлении ветви. Обратите внимание, что этот сценарий в том виде, в котором он написан, не является устойчивым к другим ошибкам (например, разрешениям).