Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

vcprompt를 이용해서 bash 프롬프트에 VCS 정보 표시하기

전에 bash 프롬프트에 Git와 Mercurial의 branch를 표시하기라는 포스팅을 올렸었습니다. 이 방법을 1년동안 잘 사용하고 있었고 프롬프트에 Git이나 Mercurial의 정보가 표시된다는 것은 꽤나 유용했습니다. 다만 이 방법은 직접 쉘에 스크립트를 짠 것이기 때문에 Git과 Mercurial만 사용할 수 있었고 untracked file에 대해서 정확히 추적되지 않는 소소한 문제가 있었습니다.

어저께 nephilim님의 프롬프트를 보다가 vcprompt의 존재를 알게 되었습니다. vcprompt는 프롬프트에서 VCS의 정보를 조회해 볼 수 있는 유틸리티입니다. vcprompt는 GitMercurial뿐만 아니라 Subversion, CVS, darcs, Fossil, Bazaar까지 알려진 VCS를 거의 모두 지원하고 있습니다. vcprompt는 여러가지 버전이 존재하는데 저는 djl의 vcprompt를 사용했습니다.



vcprompt 설치
vcprompt의 설치는 아주 간단합니다. 저장소에 올라와 있는 컴파일된 vcprompt파일을 다운받아서 사용하면 됩니다. vcprompt를 다운받아서 PATH에 있는 경로에 추가하면 쉘에서 vcprompt를 사용할 수 있습니다. (파이썬 2.4 이상이 설치되어 있어야 하고 2.5이상을 추천합니다.)

vcprompt 포맷 사용 결과

vcprompt의 사용방법은 위와 같습니다. 현재 디렉토리가 VCS로 관리되지 않는다면 아무 결과도 나오지 않지만 VCS로 관리되는 디렉토리라면 위 처럼 정보를 조회해 볼 수 있습니다.

  • %s : VCS의 약칭(git, svn, cvs 처럼 표시된다.)
  • %n : VCS의 약칭(git, svn, cvs 처럼 표시된다.)
  • %h : 현재 커밋의 해쉬를 보여준다. 해쉬가 없으면 리비전을 보여준다.
  • %r : 현재의 리비전을 보여준다. 리비전이 없으면 해시를 보여준다.
  • %b : 브랜치명을 보여준다.
  • %m : 수정된 파일이 있으면 +를 출력하고 없으면 아무것도 출력하지 않습니다.
  • %u : 추적되지 않는 파일이 있으면 ?를 출력하고 없으면 아무것도 출력하지 않습니다.




vcprompt를 이용한 프롬프트
이전에는 직접 스크립트를 짜서 스크립트가 복잡했지만 vcprompt로 더 자세한 정보를 얻어올 수 있게 되었으므로 프롬프트에 대한 환경 설정을 다시 했습니다.


c_cyan=`tput setaf 6`
c_dark=`tput setaf 0`
c_red=`tput setaf 1`
c_green=`tput setaf 2`
c_pink=`tput setaf 5`
c_blue=`tput setaf 4`
c_sgr0=`tput sgr0`

show_repository ()
{
  echo -e "$(VCPROMPT_FORMAT=($(tput setaf 3)%s$(tput sgr0):$(tput setaf 6)%h$(tput sgr0)@$(tput setaf 2)%b$(tput setaf 1)%m$(tput setaf 5)%u$(tput sgr0)) vcprompt)"
}

export PS1='\[${c_cyan}\]\u\[${c_sgr0}\]@\[${c_blue}\]\h\[${c_sgr0}\]:\w\[${c_sgr0}\] $(show_repository)\n\$ '

앞부분은 프롬프트에 색을 지정하기 위해서 단축명령어를 만들 것이고 show_repository함수가 vcprompt를 이용해서 저장소를 출력해 주는 부분입니다. 앞에서 살펴본 vcprompt의 포맷을 이용하면 다양하게 출력할 수 있는데 vcprompt는 VCPROMPT_FORMAT라는 환경변수에 설정된 포맷을 기본 포맷으로 사용합니다. 앞에서 vcprompt를 출력했을 때 나온 값은 기본 포맷이 %s:%b이기 때문에 VCS종류와 브랜치만 표시된 것입니다. 이 환경변수를 설정해 놓으면 자동으로 먹기는 하는데 저는 이상하게 환경변수를 타지 않아서 vcpromt를 실행할 때 환경변수를 전달해 주었습니다.

눈에 띄기 쉽게 정보마다 다른 색을 지정해 주었고 버전컨트롤 되지 않는 폴더에서는 정보가 출력되지 않으므로 아무것도 나오지 않습니다. 마지막에 PS1부분이 실제 프롬프트를 커스터마이징 한 부분인데 사용자 계정명과 호스트네임을 출력하고 경로를 출력해 준 뒤에 VCS 정보를 출력해 주도록 했습니다. 그리고 경로명이 길어지는 것 때문에 프롬프트가 우측으로 밀리는게 은근이 짜증나서 줄바꿈을 해서 두줄로 출력되도록 했습니다.

vcprompt를 프롬프트에 적용한 모습

이제 완성된 프롬프트는 위와 같은 형태가 됩니다. 의도적으로 좀 다채로운 칼라를 사용했습니다. VCS 종류와 함께 해쉬태그와 브랜치명이 함께 표시되고 수정된 파일이 있으면 +가 표시되고 추적되지 않는 파일이 있으면 ?가 출력됩니다. 몇시간 고생했지만 프롬프트가 완성되니 기분이 좋군요.(vcprompt를 사용해서 머큐리얼을 사용하는 폴더에서 약간 느린 것은 어쩔 수 없더군요.)

2012/01/30 23:18 2012/01/30 23:18