1 분 소요

퍼포스 서버를 관리하다보면 대량의 바이너리 파일들로 인해 서버 디스크의 용량이 점점 가득차게 된다. 적절하게 관리해주지 않으면 퍼포스 서버가 위태로워질 수 있으니 주기적으로 상태를 봐가며 관리해줘야한다. 특히 사용되지 않고 있는 오래된 리비전의 파일은 삭제하면 디스크 공간 확보에 많은 도움이 된다.

퍼포스에는 이 기능을 하도록 Obliterate Files 라는 기능이 있는데, 문제는 이 기능이 다 수동으로 작동되어야 한다는 것이다. 특정 리비전에서 특정 리비전까지 삭제는 가능하지만 이것을 각 파일마다 일일히 하나씩 다 처리해줘야한다.

처음에는 이것을 파일 하나씩 수동으로 정성스럽게 했었지만 관리해야할 파일이 너무 많아짐에 따라 손이 너무 많이 가서 자동으로 처리하도록 배치파일로 만들었다.

files_program.txt 파일에 정리할 파일들의 목록을 넣어놓으면 된다. 가장 최근 5개 리비전만 남기게 된다.

퍼포스 쓰는 사람들은 잘 알겠지만 Obliterate 명령은 한번 실행되면 절대 되돌릴 수 없으므로 아래 배치파일을 실행하기 전에 충분히 코드를 파악하고 테스트 파일에 테스트를 해보고 실행해보길 바란다.

@echo off
setlocal enabledelayedexpansion

rem 파일 목록이 저장된 파일 경로 설정
set FILE_LIST=files_program.txt

rem files.txt 파일을 한 줄씩 읽어서 처리한다.
for /f "delims=" %%a in (%FILE_LIST%) do (
	set "TARGET_FILE=%%a"
	
	rem echo !TARGET_FILE!
	
    rem 가장 마지막 리비전 번호를 구한다.
    for /f "tokens=3" %%b in ('p4 fstat -T headRev !TARGET_FILE! 2^>nul ^| find "headRev"') do set LATEST_REVISION=%%b

    rem echo !LATEST_REVISION!
	
	rem 마지막 5개 리비전이 5 초과일 때만 처리한다.
	if !LATEST_REVISION! gtr 5 (
        
	    set /a LATEST_REVISION -= 5
	    
	    rem echo !LATEST_REVISION!
	    
		rem obliterate 명령 실행
	    rem echo "p4 obliterate -T !TARGET_FILE!#1,#!LATEST_REVISION!"
	    
	    p4 obliterate -y -T !TARGET_FILE!#1,#!LATEST_REVISION!
    )
)

endlocal

files_program.txt 파일은 아래와 같이 작성한다.

//depot/Project/Server/TestServer1.pdb
//depot/Project/Server/TestServer2.pdb

//depot/Project/Server/TestServer3.pdb
//depot/Project/Server/TestServer4.pdb