在ClearCase VOB/可能的脚本中传输到所有流的新所有者?

在ClearCase VOB/可能的脚本中传输到所有流的新所有者?,clearcase,Clearcase,一名管理员将离开项目(他不是Vob所有者) 以他的名义: 他是许多项目、流和其他对象的所有者 他是流的“锁”所有者,每次都有不同的人被排除在外 新管理员正在输入项目 我想知道是否存在一个脚本,它允许我chown所有现有对象,并替换 流上的“锁”所有者 这将节省数小时在流上手动记录被排除的用户,为新管理员再次解锁和锁定。锁定机制的真正痛点是:如果您解锁(如果您想执行cleartool保护-chown),则需要执行此操作,您正在失去从给定锁中排除的用户列表 编写此类操作脚本的起点是IBM文档“”

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

以他的名义:

  • 他是许多项目、流和其他对象的所有者
  • 他是流的“锁”所有者,每次都有不同的人被排除在外
新管理员正在输入项目

我想知道是否存在一个脚本,它允许我
chown
所有现有对象,并替换 流上的“锁”所有者


这将节省数小时在流上手动记录被排除的用户,为新管理员再次解锁和锁定。

锁定机制的真正痛点是:如果您解锁(如果您想执行
cleartool保护-chown
),则需要执行此操作,您正在失去从给定锁中排除的用户列表

编写此类操作脚本的起点是IBM文档“”:

  • Windows:
    对于('cleartool lsvob-short')中的/F%v执行cleartool lslock vob:%v
  • Unix:
    中i的
    cleartool lsvob-short-host
    ;do cleartool lslock vob:$i;完成
请留下我作为您将在其上执行这些操作的操作系统的注释,我将用脚本完成此回答


例如,一个快速DOS脚本
chown\u 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\u albd
用户在同一组中)时,它才会起作用:只有这个用户才能对ClearCase对象进行检查。

锁定机制的真正痛点是:如果你解锁(如果要执行
cleartool protect-chown
,则需要执行此操作),您将失去从给定锁中排除的用户列表

编写此类操作脚本的起点是IBM文档“”:

  • Windows:
    对于('cleartool lsvob-short')中的/F%v执行cleartool lslock vob:%v
  • Unix:
    中的i
    cleartool lsvob-short-host
    ;do cleartool lslock vob:$i;done
请留下我作为您将在其上执行这些操作的操作系统的注释,我将用脚本完成此回答


例如,一个快速DOS脚本
chown\u 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\u albd用户在同一组中)时,它才会起作用:只有这个用户才能对ClearCase对象执行chown操作。

刚刚添加了一个DOS脚本来说明如何执行它必须添加一个DOS脚本来说明如何执行