매뉴얼

버그 추적 시스템/이슈 트래커 통합

소프트웨어 개발에서 변경 사항이 특정 버그 또는 이슈 ID와 관련되는 것은 매우 흔한 일입니다. 버그 추적 시스템(이슈 트래커) 사용자는 Subversion에서 변경한 내용을 이슈 트래커의 특정 ID와 연결하고 싶어합니다. 대부분의 이슈 트래커는 따라서 커밋과 관련된 버그 ID를 찾기 위해 로그 메시지를 파싱하는 pre-commit 훅 스크립트를 제공합니다. 이는 사용자가 pre-commit 훅 스크립트가 제대로 파싱할 수 있도록 로그 메시지를 올바르게 작성해야 하므로 다소 오류가 발생하기 쉽습니다.

TortoiseSVN은 두 가지 방식으로 사용자를 도울 수 있습니다

  1. 사용자가 로그 메시지를 입력할 때, 커밋과 연결된 이슈 번호를 포함하는 잘 정의된 줄이 자동으로 추가될 수 있습니다. 이는 사용자가 버그 추적 도구가 올바르게 파싱할 수 없는 방식으로 이슈 번호를 입력할 위험을 줄여줍니다.

    또는 TortoiseSVN은 이슈 트래커가 인식하는 입력된 로그 메시지의 일부를 강조 표시할 수 있습니다. 그렇게 하면 사용자는 로그 메시지가 올바르게 파싱될 수 있다는 것을 알 수 있습니다.

  2. 사용자가 로그 메시지를 탐색할 때, TortoiseSVN은 로그 메시지의 각 버그 ID로부터 링크를 생성하여 해당 이슈로 브라우저를 띄웁니다.

로그 메시지에 이슈 번호 추가하기

TortoiseSVN에 원하는 버그 추적 도구를 통합할 수 있습니다. 이를 위해 bugtraq:으로 시작하는 몇 가지 속성을 정의해야 합니다. 이 속성들은 폴더에 설정되어야 합니다: (“프로젝트 설정” 섹션)

그림 4.70. Bugtraq 속성 대화 상자

The Bugtraq Properties Dialog


bugtraq 속성 중 하나를 편집할 때, 적절한 값을 더 쉽게 설정할 수 있도록 특수 속성 편집기가 사용됩니다.

이슈 트래커와 TortoiseSVN을 통합하는 두 가지 방법이 있습니다. 하나는 단순 문자열 기반이고, 다른 하나는 정규 표현식 기반입니다. 두 가지 접근 방식에 사용되는 속성은 다음과 같습니다

bugtraq:url

이 속성을 버그 추적 도구의 URL로 설정합니다. 이 URL은 올바르게 URI 인코딩되어야 하며 %BUGID%를 포함해야 합니다. %BUGID%는 입력한 이슈 번호로 대체됩니다. 이렇게 하면 TortoiseSVN이 로그 대화 상자에 링크를 표시하여, 리비전 로그를 볼 때 버그 추적 도구로 바로 이동할 수 있습니다. 이 속성을 제공할 필요는 없지만, 그렇게 할 경우 TortoiseSVN은 이슈 번호만 표시하고 해당 링크는 표시하지 않습니다.

절대 URL 대신 상대 URL을 사용할 수도 있습니다. 이는 이슈 트래커가 소스 저장소와 동일한 도메인/서버에 있을 때 유용합니다. 도메인 이름이 변경되더라도 bugtraq:url 속성을 조정할 필요가 없습니다. 상대 URL을 지정하는 두 가지 방법이 있습니다

문자열 ^/로 시작하면 저장소 루트를 기준으로 한다고 가정합니다. 예를 들어, 저장소가 https://example.com/svn/trunk/에 있는 경우 ^/../?do=details&id=%BUGID%https://example.com/?do=details&id=%BUGID%로 해석됩니다.

문자열 /로 시작하는 URL은 서버의 호스트 이름을 기준으로 한다고 가정합니다. 예를 들어, 저장소가 https://example.com의 어디에든 있는 경우 /?do=details&id=%BUGID%https://example.com/?do=details&id=%BUGID%로 해석됩니다.

bugtraq:warnifnoissue

이슈 번호 텍스트 필드가 비어 있을 때 TortoiseSVN이 경고하도록 하려면 이 값을 true로 설정합니다. 유효한 값은 true/false입니다. 정의되지 않은 경우 false로 간주됩니다.

텍스트 상자의 이슈 번호

단순한 접근 방식에서 TortoiseSVN은 사용자에게 버그 ID를 입력할 수 있는 별도의 입력 필드를 보여줍니다. 그러면 사용자가 입력한 로그 메시지에 별도의 줄이 추가/선행 추가됩니다.

bugtraq:message

이 속성은 버그 추적 시스템을 입력 필드 모드로 활성화합니다. 이 속성이 설정되면 TortoiseSVN은 변경 사항을 커밋할 때 이슈 번호를 입력하라는 메시지를 표시합니다. 로그 메시지 끝에 줄을 추가하는 데 사용됩니다. 이것은 %BUGID%를 포함해야 하며, 이는 커밋 시 이슈 번호로 대체됩니다. 이렇게 하면 커밋 로그에 이슈 번호에 대한 참조가 항상 일관된 형식으로 포함되어, 버그 추적 도구가 이슈 번호를 특정 커밋과 연결하기 위해 파싱할 수 있게 됩니다. 예를 들어 Issue : %BUGID%를 사용할 수 있지만, 이는 사용하는 도구에 따라 다릅니다.

bugtraq:label

이 텍스트는 TortoiseSVN 커밋 대화 상자에서 이슈 번호를 입력하는 편집 상자의 레이블로 표시됩니다. 설정되지 않은 경우 Bug-ID / Issue-Nr:가 표시됩니다. 하지만 이 레이블에 맞게 창 크기가 조정되지 않으므로 레이블의 길이를 20~25자 미만으로 유지하십시오.

bugtraq:number

이 값을 true로 설정하면 이슈 번호 텍스트 필드에 숫자만 허용됩니다. 쉼표는 예외이므로 여러 숫자를 쉼표로 구분할 수 있습니다. 유효한 값은 true/false입니다. 정의되지 않은 경우 true로 간주됩니다.

bugtraq:append

이 속성은 버그 ID가 로그 메시지 끝에 추가(true)될지, 아니면 로그 메시지 시작 부분에 삽입(false)될지를 정의합니다. 유효한 값은 true/false입니다. 정의되지 않은 경우 기존 프로젝트가 손상되지 않도록 true로 간주됩니다.

정규 표현식을 사용한 이슈 번호

정규 표현식을 사용하는 접근 방식에서는 TortoiseSVN이 별도의 입력 필드를 표시하지 않고, 사용자가 입력하는 로그 메시지 중 이슈 트래커가 인식하는 부분을 표시합니다. 이는 사용자가 로그 메시지를 작성하는 동안 이루어집니다. 이는 또한 버그 ID가 로그 메시지 내 어디에든 있을 수 있다는 것을 의미합니다! 이 방법은 훨씬 더 유연하며, TortoiseSVN 프로젝트 자체에서 사용되는 방법입니다.

bugtraq:logregex

이 속성은 버그 추적 시스템을 정규식 모드로 활성화합니다. 단일 정규 표현식을 포함하거나, 새 줄로 구분된 두 개의 정규 표현식을 포함할 수 있습니다.

두 개의 표현식이 설정된 경우, 첫 번째 표현식은 버그 ID를 포함하는 표현식을 찾는 사전 필터로 사용됩니다. 두 번째 표현식은 첫 번째 정규식의 결과에서 순수한 버그 ID를 추출합니다. 이렇게 하면 원할 경우 버그 ID 목록과 자연어 표현식을 사용할 수 있습니다. 예를 들어, 여러 버그를 수정하고 다음과 같은 문자열을 포함할 수 있습니다: 이 변경 사항은 이슈 #23, #24, #25를 해결합니다.

로그 메시지 내에서 위 표현식에 사용된 버그 ID를 잡으려면 TortoiseSVN 프로젝트에서 사용하는 다음 정규식 문자열을 사용할 수 있습니다: [Ii]ssues?:?(\s*(,|and)?\s*#\d+)+(\d+).

첫 번째 표현식은 주변 로그 메시지에서 issues #23, #24 and #25를 추출합니다. 두 번째 정규식은 첫 번째 정규식의 출력에서 순수한 십진수를 추출하므로, 23, 24, 25를 버그 ID로 반환합니다.

첫 번째 정규식을 좀 더 자세히 살펴보면, issue라는 단어로 시작해야 하며, 대문자로 시작할 수도 있습니다. 이 뒤에는 선택적으로 s(둘 이상의 이슈)와 선택적으로 콜론이 올 수 있습니다. 그 뒤에는 하나 이상의 그룹이 오는데, 각 그룹은 0개 이상의 선행 공백, 선택적인 쉼표 또는 and, 그리고 더 많은 선택적인 공백을 가집니다. 마지막으로 필수적인 #와 필수적인 십진수가 있습니다.

하나의 표현식만 설정된 경우, 순수한 버그 ID는 정규식 문자열의 그룹에서 일치해야 합니다. 예시: [Ii]ssue(?:s)? #?(\d+) 이 방법은 trac과 같은 몇몇 이슈 트래커에서 필요하지만, 정규식을 구성하기가 더 어렵습니다. 이슈 트래커 문서에서 이 방법을 사용하라고 명시하는 경우에만 이 방법을 사용할 것을 권장합니다.

정규 표현식에 익숙하지 않다면 https://en.wikipedia.org/wiki/Regular_expression 에서 소개 자료를, 그리고 https://www.regular-expressions.info/ 에서 온라인 문서 및 튜토리얼을 살펴보십시오.

정규식을 올바르게 작성하는 것이 항상 쉽지는 않으므로, 이를 돕기 위해 bugtraq 속성 대화 상자에 테스트 대화 상자가 내장되어 있습니다. 편집 상자 오른쪽에 있는 버튼을 클릭하여 대화 상자를 엽니다. 여기서 테스트 텍스트를 입력하고 각 정규식을 변경하여 결과를 볼 수 있습니다. 정규식이 유효하지 않으면 편집 상자 배경이 빨간색으로 바뀝니다.

bugtraq:messagebugtraq:logregex 속성이 모두 설정된 경우, logregex가 우선합니다.

로그 메시지를 파싱하는 pre-commit 훅이 있는 이슈 트래커가 없더라도, 이 기능을 사용하여 로그 메시지에 언급된 이슈를 링크로 만들 수 있습니다!

링크가 필요 없더라도, 이슈 번호는 로그 대화 상자에 별도의 열로 표시되어 특정 이슈와 관련된 변경 사항을 더 쉽게 찾을 수 있도록 합니다.

일부 tsvn: 속성은 true/false 값을 요구합니다. TortoiseSVN은 또한 yestrue의 동의어로, nofalse의 동의어로 인식합니다.

폴더에 속성 설정하기

시스템이 작동하려면 이 속성들을 폴더에 설정해야 합니다. 파일이나 폴더를 커밋할 때 속성은 해당 폴더에서 읽어옵니다. 속성이 거기서 발견되지 않으면 TortoiseSVN은 버전 관리되지 않은 폴더 또는 트리 루트(예: C:\)를 찾을 때까지 폴더 트리를 위로 검색합니다. 각 사용자가 예를 들어 trunk/에서만 체크아웃하고 하위 폴더에서는 체크아웃하지 않는다고 확신할 수 있다면, trunk/에 속성을 설정하는 것으로 충분합니다. 확신할 수 없다면 각 하위 폴더에 속성을 재귀적으로 설정해야 합니다. 프로젝트 계층 구조에서 더 깊은 곳에 있는 속성 설정은 더 높은 수준( trunk/에 더 가까운)의 설정을 재정의합니다.

버전 1.8부터 TortoiseSVN과 Subversion은 상속 속성이라고 불리는 것을 사용하는데, 이는 폴더에 설정된 속성이 모든 하위 폴더에도 자동으로 암시적으로 설정됨을 의미합니다. 따라서 더 이상 모든 폴더에 속성을 설정할 필요 없이 루트 폴더에만 설정하면 됩니다.

프로젝트 속성(즉, tsvn:, bugtraq:webviewer:)에 한하여, 계층 구조의 모든 하위 폴더에 속성을 설정하되 모든 파일에는 설정하지 않으려면 재귀적 체크박스를 사용할 수 있습니다.

TortoiseSVN을 사용하여 작업 사본에 새 하위 폴더를 추가할 때, 부모 폴더에 있는 모든 프로젝트 속성은 새 자식 폴더에도 자동으로 추가됩니다.

저장소 브라우저에서 이슈 트래커 정보 없음

이슈 트래커 통합은 Subversion 속성 접근에 의존하므로, 체크아웃된 작업 사본을 사용할 때만 결과를 볼 수 있습니다. 속성을 원격으로 가져오는 것은 느린 작업이므로, 작업 사본에서 저장소 브라우저를 시작하지 않는 한 이 기능을 저장소 브라우저에서 볼 수 없습니다. 저장소 URL을 입력하여 저장소 브라우저를 시작했다면 이 기능을 볼 수 없습니다.

같은 이유로, 저장소 브라우저를 사용하여 자식 폴더가 추가될 때 프로젝트 속성은 자동으로 전파되지 않습니다.

이 이슈 트래커 통합은 TortoiseSVN에 국한되지 않으며, 모든 Subversion 클라이언트와 함께 사용할 수 있습니다. 자세한 내용은 TortoiseSVN 소스 저장소에 있는 전체 이슈 트래커 통합 사양 을 읽어보십시오. (“라이선스” 섹션에서 저장소 접근 방법을 설명합니다.)

이슈 트래커에서 정보 가져오기

이전 섹션에서는 로그 메시지에 이슈 정보를 추가하는 방법을 다루었습니다. 하지만 이슈 트래커에서 정보를 가져와야 한다면 어떨까요? 커밋 대화 상자에는 트래커와 통신할 수 있는 외부 프로그램을 통합할 수 있는 COM 인터페이스가 있습니다. 일반적으로 트래커를 쿼리하여 자신에게 할당된 열린 이슈 목록을 가져와서 이 커밋에서 처리되는 이슈를 선택하고 싶을 수 있습니다.

그러한 인터페이스는 물론 사용하는 이슈 트래커 시스템에 매우 특화되어 있으므로, 이 부분을 저희가 제공할 수는 없으며, 그러한 프로그램을 만드는 방법은 이 매뉴얼의 범위를 벗어납니다. 인터페이스 정의와 C# 및 C++/ATL로 된 샘플 플러그인은 TortoiseSVN 저장소 contrib 폴더에서 얻을 수 있습니다. (“라이선스” 섹션에서 저장소 접근 방법을 설명합니다.) API 요약은 제7장, IBugtraqProvider 인터페이스에도 나와 있습니다. C#으로 된 또 다른 (작동하는) 예제 플러그인은 Gurtle 이며, 이는 Google Code 이슈 트래커와 상호 작용하는 데 필요한 COM 인터페이스를 구현합니다. Google Code 자체는 2016년에 서비스가 종료되었지만, 해당 플러그인은 여전히 예제 구현으로 사용 가능합니다.

예시를 위해, 시스템 관리자가 이슈 트래커 플러그인을 제공하여 설치했고, TortoiseSVN 설정 대화 상자에서 일부 작업 사본이 해당 플러그인을 사용하도록 설정했다고 가정해 봅시다. 플러그인이 할당된 작업 사본에서 커밋 대화 상자를 열면 대화 상자 상단에 새 버튼이 표시됩니다.

그림 4.71. 이슈 트래커 쿼리 대화 상자 예시

Example issue tracker query dialog


이 예시에서는 하나 이상의 열린 이슈를 선택할 수 있습니다. 그러면 플러그인은 특별히 형식화된 텍스트를 생성하여 로그 메시지에 추가할 수 있습니다.

TortoiseSVN 홈페이지

한국어 中文