ChrisC
ChrisC

Reputation: 1171

How to list ClearCase activities in certain streams?

I'm wondering if there is a way to specify which streams to get a list of activitis for in one command line call?

Right now I'm building a list of activities based on either a vob or an individual stream, using either:

ct lsact -invob vob_name

or

ct lsact -in stream:stream_name

However, now I'm trying to filter it a little bit to remove activities from streams that are on locked/obsolete projects. I've got the list of streams that are on unlocked projects already, but I don't know of any way to pass this in to "cleartool lsact".

Running "ct lsact -invob", then filtering the output takes too long (upwards of 30 seconds to get output from cleartool), so I am hoping there is some way I can pass in the streams to a ct lsact or ct describe command, or something else, to do the filtering in the command instead of after.

Any ideas?

Upvotes: 1

Views: 2025

Answers (2)

Ian W
Ian W

Reputation: 4767

Doesn't it always seem you can never quite get ClearCase to tell you what you want to know in the form you want?

An alternative may be to use the -fmt option

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

You can then pipe through grep (-v) or other filter tool to exclude/get the projects of interest. Since it's not possible to list activities only for active streams, the alternative would be to also lock your activities when you lock the project/stream, then obsolete activities would be excluded (use -obsolete to list all activities).

Or, building on VonC suggestion, process the active streams (no -obs switch) - without the need to store the list (unix):

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

Upvotes: 1

VonC
VonC

Reputation: 1323463

If you are talking about bash script, you can easily store the list of streams in a variable:

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

You can then iterate on each line within $s:

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

In a DOS script, I would recommend writing those streams to a file first, and then process each line.

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

for /F "tokens=*" %%A in (myfile.txt) do (
  cleartool lsact in stream:%%A@\aPVob
)

Upvotes: 0

Related Questions