SccGet 함수
이 함수는 편집용 아닌 보기 및 컴파일을 위해 하나 이상의 파일 복사본을 검색합니다. 대부분의 시스템에서 파일은 읽기 전용으로 태그가 지정됩니다.
구문
SCCRTN SccGet(
LPVOID pvContext,
HWND hWnd,
LONG nFiles,
LPCSTR* lpFileNames,
LONG fOptions,
LPCMDOPTS pvOptions
);
매개 변수
pvContext
[in] 소스 제어 플러그 인의 컨텍스트 구조입니다.
hWnd
[in] 소스 제어 플러그 인이 제공하는 대화 상자의 부모로 사용할 수 있는 IDE 창에 대한 핸들입니다.
nFiles
[in] lpFileNames
배열에 지정된 파일 수 입니다.
lpFileNames
[in] 검색할 파일의 정규화된 이름의 배열입니다.
fOptions
[in] 명령 플래그(SCC_GET_ALL
, SCC_GET_RECURSIVE
)입니다.
pvOptions
[in] 소스 제어 플러그 인 관련 옵션입니다.
반환 값
이 함수의 소스 제어 플러그 인 구현은 다음 값 중 하나를 반환해야 합니다.
값 | Description |
---|---|
SCC_OK | 가져오기 작업에 성공했습니다. |
SCC_E_FILENOTCONTROLLED | 파일이 소스 제어에서 사용되고 있지 않습니다. |
SCC_E_OPNOTSUPPORTED | 원본 제어 시스템이 이 작업을 지원하지 않습니다. |
SCC_E_FILEISCHECKEDOUT | 사용자가 현재 체크 아웃한 파일을 가져올 수 없습니다. |
SCC_E_ACCESSFAILURE | 네트워크 또는 경합 문제로 인해 소스 제어 시스템에 액세스하는 데 문제가 발생했습니다. 다시 시도하는 것이 좋습니다. |
SCC_E_NOSPECIFIEDVERSION | 잘못된 버전 또는 날짜/시간을 지정했습니다. |
SCC_E_NONSPECIFICERROR | 일반적인 오류, 파일이 동기화되지 않았습니다. |
SCC_I_OPERATIONCANCELED | 작업이 완료되기 전에 취소되었습니다. |
SCC_E_NOTAUTHORIZED | 사용자에게 이 작업을 수행할 권한이 없습니다. |
설명
이 함수는 검색할 파일 이름의 개수와 배열로 호출됩니다. IDE가 SCC_GET_ALL
플래그를 전달하면 이는 lpFileNames
의 항목이 파일이 아니라 디렉터리이며 지정된 디렉터리에서 소스 제어 상태인 모든 파일을 검색해야 함을 의미합니다.
SCC_GET_ALL
플래그를 SCC_GET_RECURSIVE
플래그와 결합하여 지정된 디렉터리와 모든 하위 디렉터리의 모든 파일도 검색할 수 있습니다.
참고 항목
SCC_GET_RECURSIVE
는 SCC_GET_ALL
없이 전달되어서는 안 됩니다. 또한 C:\A 및 C:\A\B 디렉터리가 모두 재귀 가져오기에서 전달되는 경우 C:\A\B 및 모든 하위 디렉터리는 실제로 두 번 검색됩니다. 이와 같은 복제본이 배열 외부에 유지되도록 하는 것은 소스 제어 플러그 인이 아니라 IDE의 책임입니다.
마지막으로 소스 제어 플러그 인이 초기화 시 SCC_CAP_GET_NOUI
플래그를 지정하여 Get 명령에 대한 사용자 인터페이스가 없음을 나타내는 경우에도 IDE에서 이 함수를 호출하여 파일을 검색할 수 있습니다. 플래그는 단순히 IDE가 Get 메뉴 항목을 표시하지 않으며 플러그 인이 UI를 제공할 것으로 예상되지 않음을 의미합니다.
파일 이름 바꾸기 및 SccGet
상황: 사용자가 파일(예: a.txt)을 체크 아웃하고 수정합니다. a.txt를 체크 인하기 전에 두 번째 사용자가 소스 제어 데이터베이스에서 a.txt의 이름을 b.txt로 바꾸고 b .txt, 파일을 일부 수정하고 파일을 체크 인합니다. 첫 번째 사용자는 두 번째 사용자가 변경한 내용을 원하므로 첫 번째 사용자는 로컬 버전의 a.txt 파일 이름을 b.txt로 바꾸고 파일에 대해 가져오기를 수행합니다. 그러나 버전 번호를 추적하는 로컬 캐시는 여전히 a.txt의 첫 번째 버전이 로컬에 저장되어 있다고 생각하므로 소스 제어가 차이점을 해결할 수 없습니다.
소스 제어 버전의 로컬 캐시가 소스 제어 데이터베이스와 동기화되지 않는 이 상황을 해결하는 두 가지 방법이 있습니다.
현재 체크 아웃된 소스 제어 데이터베이스의 파일 이름 바꾸기를 허용하지 않습니다.
"이전 항목 삭제" 다음에 "새 항목 추가"와 동일한 작업을 수행합니다. 다음 알고리즘은 이를 수행하는 한 가지 방법입니다.
SccQueryChanges 함수를 호출하여 소스 제어 데이터베이스에서 a.txt를 b.txt로 이름을 바꾸는 방법을 알아봅니다.
로컬 a.txt의 이름을 b.txt로 바꿉니다.
a.txt 및 b.txt 모두에 대해
SccGet
함수를 호출합니다.소스 제어 데이터베이스에 a.txt가 없기 때문에 로컬 버전 캐시에서 누락된 a.txt 버전 정보가 제거됩니다.
체크 아웃 중인 b.txt 파일은 로컬 b.txt 파일의 내용과 병합됩니다.
이제 업데이트된 b.txt 파일을 체크 인할 수 있습니다.