Narzędzia pochodzące ze strony Tigris.org są bardzo przydatne w pracy programisty. Szczególnie pod systemem Windows, gdzie mamy do wyboru kilka związanych z kontrolą wersji. Od kilku lat używam programu TortoiseSVN - klienta Subversion, który w bardzo wygodny dla użytkownika sposób integruje się z menu kontekstowym plików i katalogów dostępnym pod prawym przyciskiem myszy, pokazując także status danego elementu w formie nałożonego obrazka. Czasem jednak informacja ta jest przekłamana - w dzisiejszym wpisie chciałbym przedstawić kilka możliwości, za pomocą których można sobie z tym problemem poradzić.

Fotografia: rooneg, CC-BY.

TortoiseSVN: Problem z odświeżaniem ikon statusu.

Jeśli tak jak ja używaliście TortoiseSVNa przez dłuższy okres czasu, na pewno zauważyliście, że bardzo często po niektórych akcjach, takich, jak:
  • commit,
  • update,
  • checkout,
wyświetlany w katalogu status poszczególnych elementów nie pokrywa się z faktycznym stanem w repozytorium. Dzieje się tak dlatego, że system Windows nie odświeża wszystkich katalogów na bieżąco, ale dopiero wtedy, kiedy stwierdzi, że “coś się tam zmieniło”. Ze względu na fakt, że SVN nie zmienia nic samodzielnie, a jedynie aktualizuje swoją własną bazę informacji w podkatalogu .svn, występuje sytuacja, kiedy zamiast poprawnego statusu wyświetlany jest zapisany w cache stary stan, albo nie ma żadnej ikony.

W niniejszym wpisie chciałbym zebrać wszystkie metody i rozwiązania, jakie udało mi się znaleźć w Internecie. Część z nich stosowałem już wcześniej, część była dla mnie nowa, aczkolwiek każdą z nich przynajmniej przez chwilę przetestowałem. Mam nadzieję, że dzięki temu uda się w jednym miejscu zebrać w miarę kompletne studium problemu i wskazać kilka pomysłów na to, jak sobie z nim poradzić.

Rozwiązań: jest wiele.

Nie ma dobrej i jednoznacznej metody rozwiązania tego problemu, aczkolwiek jest kilka sposobów, na które możemy próbować zmusić TortoiseSVNa / Windowsa do wykonania tego, co “nam się należy”:
  • kliknąć kilka razy klawisz [F5],
Jest to trywialne rozwiązanie, ale w większości przypadków pomaga. Po prostu program potrzebuje kilku sekund na przebudowanie cache’u i potem wszystko działa bez problemu.
  • zamknąć i otworzyć okno Explorera [tzn. okno widoku katalogu, a nie przeglądarki IE ;]], ew. przejść do innego katalogu i wrócić ponownie do starego,
W moim przypadku zazwyczaj rozwiązuje problem z niedziałającym [F5]. Jeśli przechodzenie do innego katalogu nie rozwiąże problemu, zamknięcie i otwarcie jego okna powinno już coś w tej kwestii poprawić.
  • wykonać operację “cleanup” na problematycznym katalogu,
Wtedy system Windows powinien wykryć zmiany w katalogu i samodzielnie odświeżyć jego dane. Jeśli w repozytorium nie ma aktualnie żadnych locków ani konfliktów prawdopodobnie nie zadziała.
  • wykonać operację “SVN check for modifications” z menu kontekstowego TortoiseSVN,
Kilka razy mi pomogło, aczkolwiek z reguły jest to raczej opcja “na pokaz” niż faktycznie działająca.
  • zmienić ustawienie “Status Cache” w “TortoiseSVN -> Settings -> Icon Overlays” z “Default” na “Shell”
Spowoduje, że zamiast w cache katalogu, ikony będą zapisywane w cache systemu, ale tylko dla aktualnie przeglądanego katalogu, co oznacza, że ich odświeżanie może być powolne dla dużych repozytoriów.
  • w tym samym oknie ustawień wykluczyć wszystkie ścieżki poza naszymi repozytoriami - pole “Exclude paths” wypełnić kolejnymi liniami wykluczającymi partycje nie zawierające projektów, np. “C:*“.
Zależnie od tego, jak trzymamy dane na dysku [ja mam oddzielne miejsce na projekty] potrafi nieznacznie przyśpieszyć działanie TortoiseSVN [albo wywołać efekt placebo ;]]. Nie wiem, po co to narzędzie skanuje inne katalogi niż te z repozytoriami, ale cóż - zawsze kolejna możliwość zmiany tego zachowania.

Czy macie inne pomysły na to, jak rozwiązać postawiony w tytule wpisu problem?