转移到ClearCase VOB /可能脚本中所有流的新所有者?

时间:2010-12-09 12:00:38

标签: clearcase

一名管理员离开项目(他不是Vob所有者)

以他的名义:

  • 他是许多项目,流和其他对象的拥有者
  • 他是溪流的“锁定”拥有者,每次不同的人被排除在外。

新管理员正在进入该项目。

我想知道是否存在允许我chown所有现有对象并替换的脚本 溪流上的“锁定”拥有者。

这样可以节省几个小时手动写下流中被排除的用户,再次为新管理员解锁和锁定。

1 个答案:

答案 0 :(得分:1)

使用锁定机制的真正痛点:如果您解锁(如果要执行cleartool protect -chown则需要执行此操作),则会丢失从给定锁定中排除的用户列表。< / p>

脚本这种操作的起点是这个IBM文档“How to list locked VOBs”:

  • Windows:for /F %v in ('cleartool lsvob -short') do cleartool lslock vob:%v
  • Unix:for i in cleartool lsvob -short -host ; do cleartool lslock vob:$i; done

请留下我作为评论你将执行这些操作的Os,我将用脚本完成这个答案。


例如,快速DOS脚本 chown_locked.cmd 将是:

@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
)

在项目中调用它,或者在项目中调用流(包含子流),如下所示:

chown_locked.cmd project:myProject@\aPVobName aPreviousOwner
chown_locked.cmd stream:aStream@\aPVobName aPreviousOwner

如果所述子流是:

,它将保护当前用户的任何子流
  • 锁定
  • 与权利所有者(前一位已经离开的人)锁定

如果子流被-nusers排除用户列表锁定(从锁定中排除),则此列表在解锁前保存,并在再次锁定流时恢复。

当然,只有当前用户是ClearCase管理员(即与ClearCase_albd用户属于同一组)时才会起作用:只有这位用户才能在ClearCase对象上做一个chown。