piątek, 10 sierpnia 2012

Jak zdjąć blokadę z pakietu z kontrolą wersji?

W przypadku, gdy w repozytorium jest włączona kontrola wersji w oparciu o SVN lub inny system kontroli wersji może dojść do sytuacji, gdy ktoś zablokował dla siebie możliwość edycji zawartości pakietu (funkcja check-out), a my potrzebujemy pilnie otrzymać uprawnienia do modyfikacji jego zawartości i nie możemy czekać aż ten zapominalski wróci do pracy z urlopu lub ze spotkania z klientem.
Tylko co zrobić? Program Enterprise Architect uparcie zwraca nam informację, że pakiet ten jest zablokowany do edycji wyświetlając komunikat o treści: The selected package cannot be checked-out at this time. The associated XMI package file is already checked-out.


Od strony systemowej informacja o blokadzie (check-out) przechowywana jest aż w dwóch miejscach niezależnie:
  • w repozytorium (baza danych lub plik EAP) w tabeli t_package,
  • w repozytorium SVN w postaci atrybutu lock - to jest miejsce referencyjne.
Możemy zacząć od ustalenia, czy blokada jest nadal aktywna, bo w przypadku, gdy korzystamy z jednego centralnego systemu kontroli wersji oraz wielu repozytoriów EA, może się okazać, że blokada została już zdjęta w SVN, a w repozytorium, z którego korzystamy nie ma aktualnej informacji. 
Bez konieczności aktualizowania całej zawartości repozytorium możemy ustalić aktualny stan blokady poprzez wywołanie z menu kontekstowego (poprzez naciśnięcie prawego przycisku myszy na wybranym pakiecie) funkcji Package Control --> Re-synch Status With VC Provider.
Wynikiem wywołania tej funkcji będzie ewentualna aktualizacja blokady w repozytorium i wyświetlenie informacji w oknie Output. W przypadku, gdy nie udało się zdjąć blokady (brak różnic), wówczas wynik operacji wygląda następująco:
Resynchronizing status of the selected version controlled package, with its Version Control Provider.   
   
   Package: 'XXXX' - no change.   
   
Version control status synchronization completed.   
 -- Double-click a package entry above to select that package in the Project Browser.   
Jeśli nie mamy wiedzy o tym, kto jest autorem założonej blokady możemy wywołać funkcję File Properties również z menu kontekstowego wybranego pakietu: Package Control --> File Properties.... Otrzymujemy wówczas szczegółowe informacje o skojarzonym z pakietem pliku w systemie kontroli wersji.
Komunikat Enterprise Architect: Package Control - File Properties
W podanym powyżej przykładzie widoczny jest identyfikator użytkownika, który jest właścicielem blokady. Wróćmy zatem do opisanej na początku hipotetycznej sytuacji, w której nie mamy możliwości poprosić właściciela blokady o jej usunięcie.
W takim przypadku konieczna jest operacja zdjęcia blokady w repozytorium systemu kontroli wersji. Jeśli korzystamy z SVN najprościej jest to wykonać przy użyciu programu TortoiseSVN.
Na dysku lokalnym odnajdujemy miejsce, gdzie znajduje się lokalna kopia repozytorium SVN, w programie TortoiseSVN wywołujemy okno Repo-Browser, jak na poniższym rysunku.
SVN Repository Browser - break lock

W oknie Repository Browser odnajdujemy plik korespondujący z zablokowanym pakietem. Ścieżkę i nazwę pliku możemy odnaleźć chociażby w treści komunikatu wyświetlonego powyżej. W tym przypadku jest /ea8/843BA78343A1.xml. W kolumnie Lock widoczny jest identyfikator użytkownika, który jest właścicielem blokady.
Blokadę zdejmujemy korzystając z funkcji Break lock wywołanej z menu kontekstowego na tym pakiecie.
W takim sam sposób należy zdjąć blokady pojedynczo dla wszystkich innych zablokowanych pakietów.
Po wykonaniu tej operacji jednak Enterprise Architect jeszcze nie będzie tego świadomy. Ale na szczęście każda próba check-out na pakiecie powoduje najpierw sprawdzenie w SVN, czy dla wybranego pakietu istnieje blokada. Nie jest zatem konieczne ponowne wykonanie funkcji Package Control --> Re-synch Status With VC Provider.

1 komentarz: