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 kontekstu wtyczki kontroli źródła.

Hwnd

[in] Dojście do okna IDE, które wtyczka kontroli źródła może używać jako elementu nadrzędnego dla wszystkich okien dialogowych, które zawiera.

nFiles

[in] Liczba plików określona w lpFileNames tablicy.

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

Oczekuje się, że implementacja wtyczki kontroli źródła dla tej funkcji zwróci jedną z następujących wartości:

Wartość Opis
SCC_OK Powodzenie operacji get.
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 użytkownik obecnie wyewidencjonował.
SCC_E_ACCESSFAILURE Występuje problem z dostępem do systemu kontroli źródła, prawdopodobnie z powodu problemów z siecią lub zdyskulacji. Zaleca się ponawianie próby.
SCC_E_NOSPECIFIEDVERSION Określono nieprawidłową wersję lub datę/godzina.
SCC_E_NONSPECIFICERROR Nieokreślony błąd; plik nie został zsynchronizowany.
SCC_I_OPERATIONCANCELED Operacja została anulowana przed zakończeniem.
SCC_E_NOTAUTHORIZED Użytkownik nie ma autoryzacji do wykonania tej operacji.

Uwagi

Ta funkcja jest wywoływana z licznikiem i tablicą nazw plików do pobrania. Jeśli ide przekazuje flagę , oznacza to, że elementy w pliku nie są plikami, ale katalogami, a wszystkie pliki w kontroli źródła w danych katalogach mają SCC_GET_ALL lpFileNames zostać pobrane.

Flagę można połączyć z flagą , aby pobrać wszystkie pliki w podanych katalogach i SCC_GET_ALL SCC_GET_RECURSIVE wszystkich podkatalogach.

Uwaga

SCC_GET_RECURSIVE Nigdy nie należy przechodzić bez SCC_GET_ALL . Należy również pamiętać, że jeśli katalogi C:\A i C:\A\B są przekazywane w cyklicznym pobieraniu, C:\A\B i wszystkie jego podkatalogi zostaną faktycznie pobrane dwukrotnie. To odpowiedzialność środowiska IDE — a nie wtyczki kontroli źródła — ma na celu zapewnienie, że takie duplikaty są przechowywane poza tablicą.

Na koniec, nawet jeśli wtyczka kontroli źródła podała flagę podczas inicjowania, wskazując, że nie ma interfejsu użytkownika dla polecenia Get, ta funkcja może być nadal wywoływana przez ideę w celu pobrania SCC_CAP_GET_NOUI plików. Flaga oznacza po prostu, że w ide nie jest wyświetlany element menu Pobierz i że wtyczka nie powinien dostarczać żadnego interfejsu użytkownika.

Zmienianie nazw plików i SccGet

Sytuacja: użytkownik sprawdza plik, na przykłada.txt , i modyfikuje go. Przed a.txt zaewidencjonowania drugi użytkownik zmienia nazwę pliku a.txt na b.txt w bazie danych kontroli źródła, wyewidencjonował program b.txt, wprowadza pewne modyfikacje do pliku i zaewidencjonował plik. Pierwszy użytkownik chce, aby zmiany wprowadzone przez drugiego użytkownika zmieniły nazwę jego lokalnej wersji pliku a.txt na b.txt i przejmują plik. Jednak lokalna pamięć podręczna, która śledzi numery wersji, nadal sądzi, że pierwsza wersja pakietu a.txt jest przechowywana lokalnie, więc kontrola źródła nie może rozwiązać różnic.

Istnieją dwa sposoby rozwiązania tej sytuacji, w której 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 oa.txt,b.txt w bazie danych kontroli źródła.

    2. Zmień nazwę lokalnegoa.txt na b.txt.

    3. Wywołaj SccGet funkcję zarówno dlaa.txt, jak ib.txt.

    4. Ponieważ a.txt nie istnieje w bazie danych kontroli źródła, lokalna pamięć podręczna wersji jest przeczyszczona z brakujących informacji oa.txt wersji.

    5. Wyewidencjonowany plikb.txtjest scalony z zawartością lokalnego b.txt plików.

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

Zobacz też