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_ALLparametru . 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:

  1. Nie zezwalaj na zmianę nazwy pliku w bazie danych kontroli źródła, która jest obecnie wyewidencjonowana.

  2. Wykonaj odpowiednik "usuń stary", po którym następuje "dodaj nowy". Poniższy algorytm jest jednym ze sposobów osiągnięcia tego celu.

    1. 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.

    2. Zmień nazwę lokalnego pliku a.txt na b.txt.

    3. Wywołaj SccGet funkcję zarówno dla a.txt , jak i b.txt.

    4. 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 .

    5. Wyewidencjonowany plik b.txt jest scalany z zawartością lokalnego pliku b.txt .

    6. Zaktualizowany plik b.txt można teraz zaewidencjonować.

Zobacz też