svn tag 만들 때 svn:externals 리비젼 고정하기 (2)

얼마 전에 svn 에서 tagging 할 때, svn:externals 로 링크(?)된 저장소들의 리비젼을 고정하는 스크립트를 작성했다. pysvn 이 있고 python 이 깔려있으면, svn copy 후, svn:externals 를 하나씩 찾아서 리비젼을 고정시키는 스크립트다.

이 스크립트의 문제: SVN은 svn:externals 문법이 하나가 아니고, 저 스크립트에선 해당 문법을 전부 지원하는건 아니다. 일단 1.5+를 생각하면 (최신은 1.6.x) 두 가지 형태의 문법이 있다.

  • example_lib –r 100 svn://example.com/repos/subdir 처럼 local-directory [-r rev] svn-repository-uri 형태
  • file:///home/johndoe/repos/subdir johndoe_lib 처럼 [-r rev] svn-repository-uri local-directory 형태

일단 순서가 바뀐다. 이래서 맨 처음에 잘 해야;

그리고 두번째 형태는 _pegged-form_을 지원한다. 첫번째 형태는 pegged-form 을 지원하면 안된다.

svn-repoistory-uri@rev local-directory

같은 형태가 가능하고, –r rev 사이의 공백은 없어도 됨. 진짜 파싱하기 귀찮다. 그리고 마지막 변형으로, 두번째 형식에선 svn-repository-uri 를 상대 주소로 표현하는 문법이 들어갔다. ^/, ../, //, / 로 시작하면 각각 특정 저장소 주소의 상대 주소가 되는데,1 이 문법도 인식 해야함;

svn help propset에 나오는 svn:externals 설명에는 이전 문법에서도 상대 주소가 될 것 처럼 적어놨지만 (모호성 얘기도 그렇고), 내가 쓰는 svn 배포판(collab.net svn) 에선 오류를 내면서 처리 안된다. 혹시 다른 클라이언트 쓰고 있는 분은 테스트 좀(…).

여튼 이런 svn:externals 문법을 전부 인식하도록 스크립트 업데이트.

스크립트 링크: (파일이 소실되었다. 언젠가 복구해보겠다…)


  1. svn help propset을 볼 것. ↩︎