Как перечислить действия 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
)