2010-12-09 55 views
1

一個管理員離開這個項目(他不是VOB所有者)轉移到ClearCase VOB /可能腳本中所有流的新所有者?

在他的名字:

  • 他是一個很大的項目,溪流和其他對象的所有者
  • 他是「鎖「每個不同的人都被排除在外的流所有者。

新管理員正在進入該項目。

我想知道是否存在一個腳本讓我chown所有現有的對象,並取代 「鎖」擁有者的流。

這樣可以節省一些時間手動記下流上的排除用戶,解鎖並再次鎖定新管理員。

+0

剛剛添加了一個DOS腳本來說明如何完成 – VonC 2010-12-09 16:47:46

回答

1

帶鎖機制的真正痛點:如果您解鎖(如果您想執行cleartool protect -chown,則需要執行此操作),那麼您將失去從給定鎖中排除的用戶列表。

起點,腳本類型的操作是這樣的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

離開我作爲評論您將在其上執行這些操作的操作系統,並且我將用腳本完成此答案。


例如,一個快速的DOS腳本chown_locked.cmd將是:

@ECHO off 
SETLOCAL ENABLEDELAYEDEXPANSION 
doskey ct=cleartool $* 

set ucmObject=%1 & REM #project:[email protected]\aPVob or stream:[email protected]\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:[email protected]\aPVobName aPreviousOwner 
chown_locked.cmd stream:[email protected]\aPVobName aPreviousOwner 

如果說子流AR它會保護任何子流的當前用戶 E:

  • 鎖定
  • 鎖定與權利人(前一個誰離開)

如果子流被鎖定,排除用戶的-nusers列表(排除鎖),此列表在解鎖之前保存,並在再次鎖定流時恢復。

當然,只有當前用戶是ClearCase管理員(即與ClearCase_albd用戶在同一個組中)時才能工作:只有這個用戶的王可以在ClearCase對象上執行一個chown。

+0

謝謝Vonc!這將有所幫助。 – edelwater 2010-12-11 14:03:53