Udostępnij przez


Najlepsze rozwiązania dotyczące implementowania wtyczki kontroli źródła

Poniższe szczegóły techniczne mogą pomóc w niezawodnym zaimplementowaniu wtyczki kontroli źródła w programie Visual Studio.

Problemy z zarządzaniem pamięcią

W większości przypadków zintegrowane środowisko projektowe (IDE), które jest obiektem wywołującym, zwalnia i przydziela pamięć. Wtyczka kontroli wersji zwraca ciągi i inne elementy w buforach przydzielonych przez wywołującego. Wyjątki są zanotowane w opisach określonych funkcji, w których występują.

Tablice nazw plików

Gdy przekazuje się tablicę plików, nie jest ona przekazywana jako ciągła przestrzeń nazw plików. Przekazywana jest jako tablica wskaźników do nazw plików. Na przykład w SccGet nazwy plików są przekazywane przez lpFileNames ten parametr, gdzie lpFileNames jest w rzeczywistości wskaźnikiem do char **. lpFileNames[0] jest wskaźnikiem do imienia, lpFileNames[1] jest wskaźnikiem do drugiej nazwy itd.

Duży model

Wszystkie wskaźniki to 32 bity, nawet w 16-bitowych systemach operacyjnych.

W pełni kwalifikowane ścieżki

Jeśli nazwy plików lub katalogi są określane jako argumenty, muszą być w pełni kwalifikowane ścieżki lub ścieżki UNC bez końcowych ukośników odwrotnych. Obowiązkiem wtyczki kontroli źródła jest przetłumaczenie ich na ścieżki względne, jeśli jest to wymaganie podstawowego systemu kontroli źródła.

Określ w pełni kwalifikowaną ścieżkę dla zarejestrowanej biblioteki DLL

Środowisko IDE nie ładuje już bibliotek DLL ze ścieżek względnych (na przykład .\NewProvider.dll). Należy określić pełną ścieżkę biblioteki DLL (na przykład C:\Providers\NewProvider.dll). To wymaganie zwiększa bezpieczeństwo środowiska IDE, uniemożliwiając ładowanie nieautoryzowanych lub podszytych się bibliotek DLL systemu kontroli wersji.

Sprawdź istniejącą wtyczkę VSSCI podczas instalowania wtyczki kontroli źródła

Użytkownik, który planuje zainstalować wtyczkę kontroli źródła, może już mieć zainstalowaną wtyczkę kontroli źródła na komputerze. Program instalacyjny (instalacyjny) dla utworzonej wtyczki powinien określić, czy istnieją istniejące wartości dla odpowiednich kluczy rejestru. Jeśli te klucze są już ustawione, program instalacyjny powinien zapytać użytkownika, czy zarejestrować wtyczkę jako domyślną wtyczkę kontroli źródła i zastąpić ten, który jest już zainstalowany.

Kody wyników błędów i raportowanie

Kod SCC_OK powrotny funkcji kontroli źródła wskazuje, że operacja zakończyła się pomyślnie dla wszystkich plików. Jeśli operacja zakończy się niepowodzeniem, oczekuje się, że zostanie zwrócony ostatni kod błędu.

Regułą raportowania jest to, że jeśli wystąpi błąd w środowisku IDE, środowisko IDE jest odpowiedzialne za raportowanie go. Jeśli w systemie kontroli źródła wystąpi błąd, wtyczka kontroli źródła jest odpowiedzialna za raportowanie go. Na przykład, w środowisku IDE nie wybrano żadnych plików, natomiast przez wtyczkę jest zgłaszane, że ten plik został już wyewidencjonowany.

Struktura kontekstu

Podczas wywołania SccInitialize obiekt wywołujący przekazuje ppvContext parametr, który jest niezainicjowanym dojściem do typu void. Wtyczka kontroli źródła może zignorować ten parametr lub może przydzielić strukturę dowolnego rodzaju i umieścić wskaźnik do tej struktury w przekazanym wskaźniku. Środowisko IDE nie rozumie tej struktury, ale przekazuje wskaźnik do tej struktury przy każdym innym wywołaniu plug-inu. Zapewnia cenne informacje o pamięci podręcznej kontekstu wtyczce, które może ona wykorzystać do utrzymania informacji o stanie globalnym, które są zapisywane pomiędzy wywołaniami funkcji bez potrzeby używania zmiennych globalnych. Wtyczka jest odpowiedzialna za zwolnienie struktury przy wywołaniu interfejsu SccUninitialize.

Jeśli wtyczka ustawia bit SCC_CAP_REENTRANT w SccInitialize (w szczególności w parametrze lpSccCaps ), do monitorowania wszystkich otwartych projektów są używane wiele struktur kontekstowych.

Bitflags i inne opcje poleceń

Dla każdego polecenia, takiego jak SccGet, środowisko IDE może określić wiele opcji, które zmieniają zachowanie polecenia.

Interfejs API obsługuje ustawienie niektórych opcji przez środowisko IDE za pomocą parametru fOptions . Te opcje są opisane w bitflagi używane przez określone polecenia wraz z poleceniami, na które wpływają. Ogólnie rzecz biorąc, są to opcje, dla których użytkownik nie będzie monitowany.

Większość opcji ustawień konfigurowalnych przez użytkownika nie jest definiowana w ten sposób, ponieważ różnią się one znacznie między wtyczkami kontroli źródła. W związku z tym zalecany mechanizm jest przyciskiem Zaawansowane . Na przykład w oknie dialogowym Pobieranie środowisko IDE wyświetla tylko informacje, które rozumie, ale wyświetla również przycisk Zaawansowane , jeśli wtyczka ma opcje dla tego polecenia. Gdy użytkownik kliknie przycisk Zaawansowane, środowisko IDE wywołuje polecenie SccGetCommandOptions, aby umożliwić wtyczce kontroli źródła wyświetlenie użytkownikowi monitu o informacje, takie jak bitflagi lub data/godzina. Wtyczka zwraca te informacje w formie struktury, która jest zwracana z powrotem w ramach polecenia SccGet.