[PowerShell] SVN Log Pretty 포맷 만들기

728x90
반응형

 

업무의 자동화를 위해서, 각 개발자들이 commit 한 내용에 대해서, 알림 형태로 전달해주는 기능을 만들어 보려고 했습니다.

이를 달성하기 위해서는 SVN에서 사용하는 히스토리를 CI 툴을 이용해서 지속적으로 체크를 했어야 했습니다.

이 과정에서 주요핵심은 SVN에서 제공하는 로그를 이용해서 전달 가능한 형태로 가공하는 것이 주요 과제 였습니다. 

 

수차례에 걸쳐서 구글링도 해봤고, SVN에 옵션이 있는지 체크도 했었지만, 마음에 드는 형태를 발견하지는 못했습니다.

필자가 원하는 로그의 형태는 아래와 같았습니다.

두개 중에서 가독성이 좋은 방식을 선택하려고 했습니다. 

1. 계정 - 커밋 메시지 [리비전번호]

2. 계정 [리비전번호] - 커밋메시지

 

과정

첫번째로는 svn 에서 제공하는 것이 있는지 확인했습니다만, 존재 하지 않았습니다. git과는 다르더군요.

두번째로는 텍스트 가공에 이점이 많다는 perl을 이용해봤습니다. 구글링 과정에서도 몇가지 발견을 했지만..

결론적으로는 " | " 이 문구를 파싱하지 못했습니다. 아직 원인을 발견하지 못했는데요. 이유를 아시는 분은 댓글로라도 남겨주시면 감사하겠습니다. 

 

세번째로 선택한 방법이 파워쉘이였습니다. 

svn 에서는 xml 형태로 로그 포멧을 변경해주는 기능이 존재해서 이를 이용해서 가공하였습니다. 

PS> svn log -r BASE:HEAD --xml

 

 

코드

[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$env:LC_ALL='C.UTF-8'

[xml]$XMLDATA = svn log -r BASE:HEAD --xml

$node= $XMLDATA.selectnodes("//logentry")
for ($i=1;$i -lt $node.count; $i++){
    $text += $XMLDATA.log.logentry.author[$i] + " [" +$XMLDATA.log.logentry.revision[$i] + "]" + " - " + $XMLDATA.log.logentry.msg[$i] + "`n"
}

$text

앞에 [xml] 이라는 형태로 지정을 해주고, 

코드에 나와있는 형태로 xml dom 구조에 바로 접근해서 데이터를 가져올 수 있습니다. 

저의 경우는 logentry 의 개수를 가져오기 위해서 별도로 $node 변수에 노드를 담아 두었고요.

$node.count 를 이용하시면, 몇개의 node가 있는지 확인 할 수 있어서, 반복문을 돌릴때도 유용합니다.

 

결과물은 아래와 같으며, 주요한 내용은 가림처리 하였습니다.

두번째 안이 보기에 나은거 같아서 이와같치 포맷을 맞췄습니다. 

 

 

이렇게 생성된 Log 텍스트 포맷은, 팀원들에게 공유차원에서 어떠한 커밋이 발생했는지를 지속적으로 알려주고, 

공유해주는 역활로 사용중입니다.

 

 

 


 

728x90