소스 제어 플러그 인 구현 모범 사례
다음 기술 세부 정보는 Visual Studio에서 소스 제어 플러그 인을 안정적으로 구현하는 데 도움이 될 수 있습니다.
메모리 관리 문제
대부분의 경우 호출자인 IDE(통합 개발 환경)는 메모리를 해제하고 할당합니다. 소스 제어 플러그 인은 호출자 할당 버퍼의 문자열 및 기타 항목을 반환합니다. 예외는 발생하는 특정 함수에 대한 설명에 나와 있습니다.
파일 이름의 배열
파일 배열이 전달될 때 파일 이름의 연속 배열로 전달되지 않습니다. 파일 이름에 대한 포인터 배열로 전달됩니다. 예를 들어, SccGet에서 파일 이름은 lpFileNames
매개 변수에 의해 전달됩니다. 여기서 lpFileNames
는 실제로 char **
에 대한 포인터입니다. lpFileNames
[0]은 첫 번째 이름에 대한 포인터이고, lpFileNames
[1]은 두 번째 이름에 대한 포인터입니다.
대형 모델
모든 포인터는 16비트 운영 체제에서도 32비트입니다.
정규화된 경로
파일 이름 또는 디렉터리가 인수로 지정된 경우, 끝 백슬래시가 없는 정규화된 경로 또는 UNC 경로여야 합니다. 이것을 상대 경로로 변환하는 것이 기본 소스 제어 시스템의 요구 사항인 경우 이 작업은 소스 제어 플러그 인의 책임입니다.
등록된 DLL에 대한 정규화된 경로 지정
IDE는 더 이상 상대 경로(예: .\NewProvider.dll)에서 DLL을 로드하지 않습니다. DLL의 전체 경로를 지정해야 합니다(예: C:\Providers\NewProvider.dll). 이 요구 사항은 권한이 없거나 가장된 소스 제어 DLL의 로드를 방지하여 IDE의 보안을 강화합니다.
소스 제어 플러그 인을 설치할 때 기존 VSSCI 플러그 인 확인
소스 제어 플러그 인을 설치하려는 사용자는 컴퓨터에 기존 소스 제어 플러그 인이 이미 설치되어 있을 수 있습니다. 만든 플러그 인에 대한 설치(설정) 프로그램은 관련 레지스트리 키에 대한 기존 값이 있는지 여부를 판별해야 합니다. 이러한 키가 이미 설정된 경우 설치 프로그램은 플러그 인을 기본 소스 제어 플러그 인으로 등록하고 이미 설치된 플러그 인을 대체할지 여부를 사용자에게 물어봐야 합니다.
오류 결과 코드 및 보고
소스 제어 함수에 대한 SCC_OK
반환 코드는 모든 파일에 대해 작업이 성공했음을 나타냅니다. 작업이 실패하면 마지막으로 발생한 오류 코드를 반환해야 합니다.
보고 규칙은 IDE에서 오류가 발생하면 이를 보고할 책임은 IDE에 있습니다. 소스 제어 시스템에서 오류가 발생하면 이를 보고할 책임은 소스 제어 플러그 인에 있습니다. 예를 들어 현재 선택된 파일이 없습니다는 IDE에서 보고하는 반면 이 파일은 이미 체크 아웃되었습니다는 플러그 인에서 보고합니다.
컨텍스트 구조
SccInitialize를 호출하는 동안 호출자는 void에 대한 초기화되지 않은 핸들인 ppvContext
매개 변수를 전달합니다. 소스 제어 플러그 인은 이 매개 변수를 무시하거나 원하는 종류의 구조를 할당하고 해당 구조체에 대한 포인터를 전달된 포인터에 넣을 수 있습니다. IDE는 이 구조를 이해하지 못하지만 이 구조에 대한 포인터를 플러그 인의 다른 모든 호출에 전달합니다. 이렇게 하면 전역 변수를 사용하지 않고 함수 호출 간에 지속되는 전역 상태 정보를 유지하는 데 사용할 수 있는 중요한 컨텍스트 캐시 정보가 플러그 인에 제공됩니다. 플러그 인은 SccUninitialize 호출 시 구조를 해제하는 역할을 합니다.
플러그 인이 SccInitialize(특히, lpSccCaps
매개 변수)에서 SCC_CAP_REENTRANT
비트를 설정하면 열려 있는 모든 프로젝트를 추적하는 데 여러 컨텍스트 구조가 사용됩니다.
비트 플래그 및 기타 명령 옵션
SccGet과 같은 각 명령에 대해 IDE는 명령의 동작을 변경하는 여러 옵션을 지정할 수 있습니다.
API는 fOptions
매개 변수를 통해 IDE에서 특정 옵션 설정을 지원합니다. 이러한 옵션은 특정 명령에서 사용하는 비트 플래그에 영향을 미치는 명령과 함께 설명되어 있습니다. 일반적으로 이러한 옵션은 사용자에게 메시지가 표시되지 않는 옵션입니다.
사용자가 구성할 수 있는 대부분의 설정 옵션은 소스 제어 플러그 인에 따라 크게 다르기 때문에 이러한 방식으로 정의되지 않습니다. 따라서 권장되는 메커니즘은 고급 단추입니다. 예를 들어, Get 대화 상자에서 IDE는 이해할 수 있는 정보만 표시하지만 플러그 인에 이 명령에 대한 옵션이 있는 경우 고급 단추도 표시합니다. 사용자가 고급 단추를 클릭하면 IDE는 SccGetCommandOptions를 호출하여 소스 제어 플러그 인이 사용자에게 비트 플래그 또는 날짜/시간과 같은 정보를 요청할 수 있도록 합니다. 플러그 인은 SccGet
명령 중에 다시 전달되는 구조로 이 정보를 반환합니다.