Subversion에는 커밋을 하면 커밋 로그와 변경사항을 메일로 보내주는 기능이 있습니다. subversion 안에 있는 mailer.py 스크립트는 일반 메일서버로는 메일이 잘 보내지지만 Gmail SMTP는 사용이 잘 되지 않습니다. mailer.py를 약간 수정하면 Gmail SMTP로도 커밋 로그 메일을 잘 보낼 수 있습니다(리눅스의 경우 자체 sendmail을 통해 보내는 것은 수정 없이도 가능합니다).

mailer.py 스크립트는 Subversion 소스 안에 tools/hook-scripts/mailer에 있습니다.

일단 이 스크립트를 사용하려면 저장소의 hooks 디렉토리안에 post-commit.tmpl 파일을 post-commit으로 이름을 바꿉니다(Windows의 경우 post-commit.bat으로). 그리고 post-commit 파일의 맨 아래에 다음을 추가합니다.

Linux, BSD 등.

/repos/mailer.py commit "$REPOS" "$REV" /repos/mailer.conf

Windows

C:\repos\mailer.py commit %REPOS% %REV% C:\repos\mailer.conf

그리고 mailer.conf.example를 mailer.conf로 이름을 바꾸고 내용 Gmail에 맞게 설정을 합니다.

# This option specifies the hostname for delivery via SMTP. 
smtp_hostname = smtp.gmail.com:587

# Username and password for SMTP servers requiring authorisation. 
smtp_username = example@gmail.com
smtp_password = (이메일 암호)

다른 설정은 자신의 환경에 맞게 설정합니다.

mailer.py의 SMTPOutput 클래스 finish 함수를 아래와 같이 수정합니다.

def finish(self): 
  server = smtplib.SMTP(self.cfg.general.smtp_hostname) 
  if self.cfg.is_set('general.smtp_username'): 
    server.ehlo()         # 추가된 부분
    server.starttls()     # 추가된 부분
    server.ehlo()         # 추가된 부분
    server.login(self.cfg.general.smtp_username, 
                 self.cfg.general.smtp_password) 
  server.sendmail(self.from_addr, self.to_addrs, self.buffer.getvalue()) 
  server.close()          # server.quit()를 server.close()로 수정.

이렇게 하면 Gmail SMTP 서버를 통해서 커밋 로그 메일을 보낼 수 있습니다. Gmail은 TLS 인증을 사용하기 때문에 starttls()함수를 호출해 줘야 로그인이 됩니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

19 March 2007