Как перечислить действия ClearCase в определенных потоках?

Мне интересно, есть ли способ указать, для каких потоков получить список активитов в одном вызове командной строки?

Прямо сейчас я создаю список действий на основе VOB или отдельного потока, используя либо:

ct lsact -invob vob_name

или же

ct lsact -in stream:stream_name

Однако сейчас я пытаюсь немного отфильтровать его, чтобы удалить действия из потоков, находящихся в заблокированных / устаревших проектах. У меня есть список потоков, которые уже есть в разблокированных проектах, но я не знаю, как передать это в "cleartool lsact".

Выполнение "ct lsact -invob", затем фильтрация вывода занимает слишком много времени (свыше 30 секунд, чтобы получить вывод из cleartool), поэтому я надеюсь, что есть какой-то способ передать потоки команде ct lsact или ct description, или что-то еще, чтобы выполнить фильтрацию в команде, а не после.

Есть идеи?

2 ответа

Разве не всегда кажется, что вы никогда не сможете заставить ClearCase сообщить вам то, что вы хотите знать в той форме, которую хотите?

Альтернативой может быть использование опции -fmt

ct lsact -fmt "%[stream]Xp %n\n" -inv /vobs/my_pvob

Затем вы можете передать через grep (-v) или другой инструмент фильтрации, чтобы исключить / получить интересующие вас проекты. Поскольку невозможно перечислить действия только для активных потоков, альтернативой может быть также блокировка ваших действий при блокировке проекта / потока, тогда устаревшие действия будут исключены (используйте -obsolete для вывода списка всех действий).

Или, основываясь на предложении VonC, обработайте активные потоки (без ключа -obs) - без необходимости сохранять список (unix):

for stream in $(ct lsstream "%Xn" -inv /vobs/my_pvob); do
   echo ::: ${stream}
   ct lsact -in ${stream}
done

Если вы говорите о скрипте bash, вы можете легко сохранить список потоков в переменной:

s=$(ct lsstream -s -invob /vobs/aPVob)

Затем вы можете перебирать каждую строку внутри$s:

while read -r line; do
    echo "... $line ..."
done <<< "$list"

В сценарии DOS я бы рекомендовал сначала записать эти потоки в файл, а затем обработать каждую строку.

cleartool lsstream -s -invob /vobs/aPVob > %TMP%\s.txt

for /F "tokens=*" %%A in (myfile.txt) do (
  cleartool lsact in stream:%%A@\aPVob
)
Другие вопросы по тегам