Reputation: 2802
One administrator is leaving the project (he is NOT Vob owner)
In his name:
A new administrator is entering the project.
I wonder if a script exists that lets me chown
all existing objects and which replaces
the "lock" owner on streams.
That would save some hours manually writing down the excluded users on a stream, unlocking and locking again for the new administrator.
Upvotes: 1
Views: 767
Reputation: 1323593
That the real pain point with the lock mechanism: if you unlock (which you need to do if you want to perform a cleartool protect -chown
), you are loosing the list of users you excluded from a given lock.
A starting point to script that kind of operation is this IBM document "How to list locked VOBs":
for /F %v in ('cleartool lsvob -short') do cleartool lslock vob:%v
for i in
cleartool lsvob -short -host ; do cleartool lslock vob:$i; done
Leave me as a comment the Os on which you will perform those operations, and I will complete this answer with a script.
For instance, a quick DOS script chown_locked.cmd
would be:
@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
doskey ct=cleartool $*
set ucmObject=%1 & REM #project:aProject@\aPVob or stream:aStream@\aPVob
set anOldUser=%2 & REM #previous owner of the streams
set anOldUser=%anOldUser:~0,-1%
set lsstreamCmd=ct lsstream -in %ucmObject% -fmt "%%Xn %%[locked]p %%u\n"
for /F "tokens=1-3" %%a in ( ' %lsstreamCmd% ') do (
rem echo '%%a'
rem echo '%%b'
rem echo '%%c'
if "%%b" EQU "locked" (
if "%%c" EQU "%anOldUser%" (
call:chown %%a %USERNAME%
) else (
echo.ignore locked %%a because not owned by %anOldUser%, but by '%%c'
)
) else (
echo.ignore unlocked %%a
)
)
goto end
:chown ucmObject -- chown on a ucm object
:: if lock, will restore the nusers lock exception list
:: -- streamName [in] name of the UCM object
:: -- newOwner [in] name of new owner
SETLOCAL ENABLEDELAYEDEXPANSION
set ucmObject=%~1
set newOwner=%~2
set cmd=ct lslock %ucmObject%
for /F "tokens=4*" %%a in ( ' %cmd% ^| find "Locked except for users:" ') do set lslock=%%b
set lslock=%lslock:~0,-1%
rem echo lslock '%lslock%'
if "%lslock%" NEQ "~0,-1" goto lslock
echo.chown locked '%ucmObject%%' for '%newOwner%'
ct protect -chown %newOwner%2 %ucmObject% & goto endchown
:lslock
set lslock2=%lslock: =,%
rem echo lslock2 '%lslock2%'
echo.chown locked '%ucmObject%' for '%newOwner%' while retaining '%lslock2%'
ct unlock %ucmObject%
ct protect -chown %newOwner% %ucmObject%
ct lock -nusers %lslock2% %ucmObject%
:endchown
( ENDLOCAL
)
EXIT /b
:end
( ENDLOCAL
)
Call it on a project, or a stream (with sub-streams) within a project, like so:
chown_locked.cmd project:myProject@\aPVobName aPreviousOwner
chown_locked.cmd stream:aStream@\aPVobName aPreviousOwner
It will protect any sub-stream to the current user if said sub-streams are:
If a sub-stream is locked with a -nusers
list of excluded users (excluded from the lock), this list is saved before the unlock, and restore when locking the stream again.
Of course, it will only work if the current user is ClearCase administrator (i.e. is in the same group than the ClearCase_albd
user): only this king of user can do a chown on a ClearCase object.
Upvotes: 1