ClearCase: список содержимого каталога (ls) с использованием CAL.

В ClearCase вы можете просмотреть содержимое каталога, используя «cleartool ls».

Мой вопрос в том, как я могу сделать то же самое, используя CAL (уровень автоматизации ClearCase). Причина, по которой я предпочитаю COM API, заключается в том, что мне не придется анализировать вывод «ls».

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

Мой код до сих пор:

IClearCase cc = new ApplicationClass();
CCVOB vob = cc.get_VOB("\\VOB-name");
CCView view = cc.get_View("ViewTag");

Спасибо за помощь.

Я написал ответ VonC на С# для тех, кто заинтересован.

string[] files = Directory.GetFiles("View path here", "*.*", SearchOption.AllDirectories);
foreach (string file in files)
{
    try
    {
            CCVersion ver = cc.get_Version(file);
            Console.WriteLine(ver.Path);
    }
    catch(Exception) {/*the file is not versioned*/}
}

person Community    schedule 17.06.2009    source источник
comment
Завершил мой ответ для части rmname.   -  person VonC    schedule 17.06.2009
comment
Завершил свои комментарии к вашему вопросу ICCElement.   -  person VonC    schedule 17.06.2009


Ответы (1)


Может быть, это хорошее начало:

Set CC = Wscript.CreateObject("ClearCase.Application") 
Set DirVer = CC.Version(".") 
Set FSO = CreateObject("Scripting.FileSystemObject") 
Set Folder = FSO.GetFolder(DirVer.Path) 
Wscript.Echo "Files under source control: " 
For Each File in Folder.Files 
     On Error Resume Next 
     Set Ver = CC.Version(File.Name) 
     If Err.Number = 0 Then 
           Wscript.Echo Ver.ExtendedPath 
     End If 
Next

Идея состоит в том, чтобы использовать методы ICCVersion, чтобы попытаться получить доступ к версии файла. Если он не возвращает ошибку, это действительно версионный файл.


Теперь я знаю, что файл версионный, как мне его удалить (rmname).

Не используйте RemoveVersion():
безвозвратно удаляет версию (эквивалентную cleartool rmver)
ВНИМАНИЕ! Это потенциально разрушительная операция. Поскольку CAL ни при каких обстоятельствах не запрашивает ввод данных пользователем, при вызове RemoveVersion шаг подтверждения не выполняется. Вызов RemoveVersion эквивалентен запуску cleartool rmver с параметром -force.

Вместо этого используйте RemoveName из интерфейса ICCElement.

person VonC    schedule 17.06.2009
comment
CC.Version(.) будет работать только в том случае, если вы установите текущий каталог на путь представления (через Environement.CurrentDirectory в C#). Если это так, не можете ли вы просто удалить вторую строку и сделать Set Folder = FSO.GetFolder (- ваш путь просмотра здесь --)? Другими словами, вторая строка нужна? Тай. - person ; 17.06.2009
comment
В случае, когда вы упомянули, эта вторая строка действительно была бы ненужной. Но я еще не тестировал полностью. - person VonC; 17.06.2009
comment
Хорошо, еще раз. Если я осмелюсь добавить еще один маленький вопрос. Теперь я знаю, что файл версионный, как мне его удалить (rmname). Есть RemoveVersion(...), но я не уверен, что это эквивалент rmname. - person ; 17.06.2009
comment
Предупреждение: в ClearCase есть две версии удаления: rmver является наиболее опасным, так как он окончательно удаляет версию из VOB. Rmname просто разыменовывает версию из списка файлов, на которые ссылается его родительский каталог. - person VonC; 17.06.2009
comment
Вместо этого используйте RemoveName из интерфейса ICCElement. - person VonC; 17.06.2009
comment
Спасибо за информацию. Итак, по сути, используя ICCElement, мы также можем проверить, является ли файл версионным? Я только что попробовал, и он выдает объект Not a VOB, если элемент не имеет версии. - person ; 17.06.2009
comment
Верный. Просто ICCElement предоставляет другие службы для версионного файла: службы, общие для любой версии (тогда как ICCVersion предоставляет доступ к текущей видимой версии элемента). - person VonC; 17.06.2009