Szczegóły konfiguracji kontroli kodu źródłowego
Aby zaimplementować kontrolę źródła, należy prawidłowo skonfigurować system projektu lub edytor, aby wykonać następujące czynności:
Żądanie uprawnienia do przejścia do zmienionego stanu
Żądanie uprawnień do zapisania pliku
Żądanie uprawnień do dodawania, usuwania lub zmieniania nazw plików w projekcie
Żądanie uprawnienia do przejścia do zmienionego stanu
Projekt lub edytor musi zażądać uprawnienia do przejścia do zmienionego (zanieczyszczonego) stanu, wywołując polecenie IVsQueryEditQuerySave2. Każdy edytor, który implementujeIsDocDataDirty, musi wywołać QueryEditFiles i otrzymać zatwierdzenie, aby zmienić dokument ze środowiska przed zwróceniem True
polecenia .IsDocDataDirty Projekt jest zasadniczo edytorem pliku projektu, a w rezultacie ma taką samą odpowiedzialność za zaimplementowanie śledzenia zmienionych stanów dla pliku projektu, jak edytor tekstów dla jego plików. Środowisko obsługuje zmieniony stan rozwiązania, ale należy obsłużyć zmieniony stan każdego obiektu, do którego odwołuje się rozwiązanie, ale nie przechowuje, jak plik projektu lub jego elementy. Ogólnie rzecz biorąc, jeśli projekt lub edytor jest odpowiedzialny za zarządzanie trwałością elementu, jest on odpowiedzialny za implementację śledzenia zmienionych stanów.
W odpowiedzi na wywołanie IVsQueryEditQuerySave2::QueryEditFiles
środowisko może wykonać następujące czynności:
Odrzuć wywołanie zmiany, w tym przypadku edytor lub projekt musi pozostać w niezmienionym (czystym) stanie.
Wskaż, że dane dokumentu powinny zostać ponownie załadowane. W przypadku projektu środowisko ponownie załaduje dane dla projektu. Edytor musi ponownie załadować dane z dysku przez jego ReloadDocData implementację. W obu przypadkach kontekst w projekcie lub edytorze może ulec zmianie po ponownym załadowaniu danych.
Jest to złożone i trudne zadanie modernizacji odpowiednich
IVsQueryEditQuerySave2::QueryEditFiles
wywołań do istniejącej bazy kodu. W związku z tym te wywołania powinny być zintegrowane podczas tworzenia projektu lub edytora.
Żądanie uprawnienia do zapisywania pliku
Zanim projekt lub edytor zapisze plik, musi on wywołać QuerySaveFile metodę lub QuerySaveFiles. W przypadku plików projektu te wywołania są automatycznie wykonywane przez rozwiązanie, które wie, kiedy zapisać plik projektu. Edytory są odpowiedzialne za wykonywanie tych wywołań, chyba że implementacja edytora IVsPersistDocData2
używa funkcji SaveDocDataToFilepomocnika . Jeśli edytor implementuje IVsPersistDocData2
w ten sposób, wywołanie metody IVsQueryEditQuerySave2::QuerySaveFile
lub IVsQueryEditQuerySave2::QuerySaveFiles
zostanie wykonane za Ciebie.
Uwaga
Zawsze należy wykonywać te wywołania z preemptively — czyli w czasie, gdy edytor może odebrać anulowanie.
Żądanie uprawnień do dodawania, usuwania lub zmieniania nazw plików w projekcie
Zanim projekt będzie mógł dodawać, zmieniać nazwy lub usuwać plik lub katalog, musi wywołać odpowiednią IVsTrackProjectDocuments2::OnQuery*
metodę, aby zażądać uprawnień ze środowiska. Jeśli udzielono uprawnień, projekt musi ukończyć operację, a następnie wywołać odpowiednią IVsTrackProjectDocuments2::OnAfter*
metodę, aby powiadomić środowisko o zakończeniu operacji. Projekt musi wywoływać metody interfejsu IVsTrackProjectDocuments2 dla wszystkich plików (na przykład plików specjalnych), a nie tylko plików nadrzędnych. Wywołania plików są obowiązkowe, ale wywołania katalogów są opcjonalne. Jeśli projekt zawiera informacje o katalogu, należy wywołać odpowiednie IVsTrackProjectDocuments2 metody, ale jeśli nie ma tych informacji, środowisko wywnioskuje informacje o katalogu.
Projekt nie powinien wywoływać metod otwierania lub zamykania IVsTrackProjectDocuments2
projektu. Odbiorniki, które chcą uzyskać te informacje podczas uruchamiania, mogą czekać na OnAfterOpenSolution zdarzenie i iterować przez rozwiązanie w celu znalezienia potrzebnych informacji. Po zamknięciu te informacje nie są potrzebne. IVsTrackProjectDocuments2
element jest dostarczany z elementu SVsTrackProjectDocuments.
Dla każdej akcji dodawania, zmieniania nazwy i usuwania istnieje OnQuery*
metoda i OnAfter*
metoda. Wywołaj metodę OnQuery*
, aby poprosić o uprawnienie do dodawania, zmieniania nazwy lub usuwania pliku lub katalogu. Wywołaj metodę OnAfter*
po dodaniu pliku lub katalogu, zmianie nazwy lub usunięciu, a stan projektu odzwierciedla nowy stan.