Funkcja SccGet
Ta funkcja pobiera kopię co najmniej jednego pliku do wyświetlania i kompilowania, ale nie do edycji. W większości systemów pliki są oznaczane jako tylko do odczytu.
Składnia
SCCRTN SccGet(
LPVOID pvContext,
HWND hWnd,
LONG nFiles,
LPCSTR* lpFileNames,
LONG fOptions,
LPCMDOPTS pvOptions
);
Parametry
pvContext
[in] Struktura kontekstowa wtyczki kontroli źródła.
Hwnd
[in] Dojście do okna środowiska IDE, którego wtyczka kontroli źródła może używać jako elementu nadrzędnego dla wszystkich okien dialogowych, które udostępnia.
nFiles
[in] Liczba plików określonych w tablicy lpFileNames
.
lpFileNames
[in] Tablica w pełni kwalifikowanych nazw plików do pobrania.
Foptions
[in] Flagi poleceń (SCC_GET_ALL
, SCC_GET_RECURSIVE
).
pvOptions
[in] Opcje specyficzne dla wtyczki kontroli źródła.
Wartość zwracana
Implementacja wtyczki kontroli źródła tej funkcji powinna zwrócić jedną z następujących wartości:
Wartość | Opis |
---|---|
SCC_OK | Powodzenie operacji pobierania. |
SCC_E_FILENOTCONTROLLED | Plik nie jest pod kontrolą źródła. |
SCC_E_OPNOTSUPPORTED | System kontroli źródła nie obsługuje tej operacji. |
SCC_E_FILEISCHECKEDOUT | Nie można pobrać pliku, który jest obecnie wyewidencjonowany przez użytkownika. |
SCC_E_ACCESSFAILURE | Wystąpił problem podczas uzyskiwania dostępu do systemu kontroli źródła, prawdopodobnie z powodu problemów z siecią lub rywalizacją. Zalecane jest ponowienie próby. |
SCC_E_NOSPECIFIEDVERSION | Określono nieprawidłową wersję lub datę/godzinę. |
SCC_E_NONSPECIFICERROR | Niepowodzeń nieokreślonych; plik nie został zsynchronizowany. |
SCC_I_OPERATIONCANCELED | Operacja anulowana przed zakończeniem. |
SCC_E_NOTAUTHORIZED | Użytkownik nie ma autoryzacji do wykonania tej operacji. |
Uwagi
Ta funkcja jest wywoływana z liczbą i tablicą nazw plików do pobrania. Jeśli środowisko IDE przekazuje flagę SCC_GET_ALL
, oznacza to, że elementy w lpFileNames
programie nie są plikami, ale katalogami i że wszystkie pliki pod kontrolą źródła w danych katalogach mają zostać pobrane.
Flagę SCC_GET_ALL
można połączyć z flagą SCC_GET_RECURSIVE
, aby pobrać wszystkie pliki w podanych katalogach i wszystkich podkatalogach.
Uwaga
SCC_GET_RECURSIVE
nigdy nie należy przekazywać bez SCC_GET_ALL
parametru . Należy również pamiętać, że jeśli katalogi C:\A i C:\A\B są przekazywane na rekursywne get, C:\A\B i wszystkie jego podkatalogi zostaną pobrane dwa razy. Jest to odpowiedzialność środowiska IDE — a nie wtyczka kontroli źródła — aby upewnić się, że duplikaty takie jak te są przechowywane poza tablicą.
Na koniec, nawet jeśli wtyczka kontroli źródła określiła flagę SCC_CAP_GET_NOUI
podczas inicjowania, wskazując, że nie ma interfejsu użytkownika dla polecenia Get, ta funkcja może być nadal wywoływana przez środowisko IDE w celu pobrania plików. Flaga oznacza po prostu, że środowisko IDE nie wyświetla elementu menu Pobierz i że wtyczka nie ma dostarczyć żadnego interfejsu użytkownika.
Zmienianie nazw plików i SccGet
Sytuacja: użytkownik wyewidencjonuje plik, na przykład a.txt i modyfikuje go. Zanim można zaewidencjonować plik a.txt, drugi użytkownik zmieni nazwę a.txt na b.txt w bazie danych kontroli źródła, wyewidencjonuje plik b.txt, wprowadza pewne modyfikacje w pliku i sprawdza plik. Pierwszy użytkownik chce, aby zmiany wprowadzone przez drugiego użytkownika, więc pierwszy użytkownik zmienił nazwę lokalnej wersji pliku a.txt na b.txt i wykonuje pobieranie do pliku. Jednak lokalna pamięć podręczna, która śledzi numery wersji, nadal uważa, że pierwsza wersja pliku a.txt jest przechowywana lokalnie i dlatego kontrola źródła nie może rozwiązać różnic.
Istnieją dwa sposoby rozwiązania tej sytuacji, gdy lokalna pamięć podręczna wersji kontroli źródła nie jest zsynchronizowana z bazą danych kontroli źródła:
Nie zezwalaj na zmianę nazwy pliku w bazie danych kontroli źródła, która jest obecnie wyewidencjonowana.
Wykonaj odpowiednik "usuń stary", po którym następuje "dodaj nowy". Poniższy algorytm jest jednym ze sposobów osiągnięcia tego celu.
Wywołaj funkcję SccQueryChanges , aby dowiedzieć się więcej o zmianie nazwy pliku a.txt na b.txt w bazie danych kontroli źródła.
Zmień nazwę lokalnego pliku a.txt na b.txt.
Wywołaj
SccGet
funkcję zarówno dla a.txt , jak i b.txt.Ponieważ plik a.txt nie istnieje w bazie danych kontroli źródła, lokalna pamięć podręczna wersji jest czyszczone z brakujących informacji o wersji a.txt .
Wyewidencjonowany plik b.txt jest scalany z zawartością lokalnego pliku b.txt .
Zaktualizowany plik b.txt można teraz zaewidencjonować.