Этот странный формат называется расширенным путем.
Как объяснено здесь, результат будет примерно таким:
\proj_vob\foo.c@@\main\bugfix\4
на самом деле называется путем с расширенной версией.
В твоем случае:
/vobs/vob_name/Dir_A/Dir_B@@/main/Branch_A/Dir_C/[...]/n3/Filename@@
- это расширенный путь vob.
Он ссылается на элементы (файл или каталог), которые больше не видны в представлении (поскольку они были названы rm, которые удаляются).
Вы можете получить доступ к любой версии элемента, используя его идентификатор версии, который указывает его точное расположение в дереве версий.
Это позволяет получить доступ к версиям, которые не видны в представлении (т.е. выбраны спецификацией конфигурации представления), в которых вы выполняете cleartool find
(поскольку для поиска необходим просмотр).
Попробуйте также вариант -nxname
:
ct find . -all -nvi -nxname -type f -ele "brtype(my_branch)" -print
(но это удалит только последний @@
)
fmt_ccase имеет способ отформатировать его, но вы также можете попробовать (как здесь ):
-exec "echo %CLEARCASE_PN%"
(Здесь это не работает, поскольку для найденной версии нет "имени пути": представление не выбирает его напрямую, поэтому эта версия не отображается, а для %CLEARCASE_PN%
установлено значение %CLEARCASE_XPN%
, расширенное имя пути ).
Также проверьте, что возвращает имя Leaf:
-exec "cleartool descr -fmt \"%Ln\" \"%CLEARCASE_XPN%\""
Но это возвращает только имя файла, а не его путь.
Если вам нужен простой путь (который не будет представлять «фактический» путь, потому что не все эти элементы видны в представлении), вам нужно будет обработать каждую строку, чтобы удалить /main/.../n1
, оставив только Dir_C\dir_D\element
.
Вот одна библиотека, которая должна это делать: Инструменты ClearCase
$explicitPath = '/vobTag/users/.@@/main/1/llf/main/12/install/main/1/README/main/2';
$canonPath = ClearCase::Vob::CanonPath->parse( $explicitPath );
$canonPath = $cpathObj->parse( $explicitPath );
Где $canonPath
в этом примере будет содержать следующую строку:
/vobTag/users/llf/install/README
Вы можете найти источники в этих rpm в usr/lib/perl5/vendor_perl/5.6.1/ClearCase/Vob/CanonPath.pm
.
Реализация нетривиальна, но выполнима: очень маленький отрывок:
push @branches, "main";
while (@leaves && !(($leaves[0] =~ "^[0-9]+\$") || ($leaves[0] =~ "^CHECKEDOUT\.[0-9]+\$"))) {
$leaf = shift(@leaves);
push @branches, $leaf if defined($leaf);
$self->dpr("dump(3) $leaf") if defined($leaf);
}
person
VonC
schedule
11.07.2013