Jako Akwizytor zbieram z repozytorium GIT informacje o
Transkrypt
Jako Akwizytor zbieram z repozytorium GIT informacje o
Jako Akwizytor zbieram z repozytorium GIT informacje o historii projektu Cel PU: Celem przypadku użycia jest zebranie danych o historii zmian dokonanych w projekcie. Opis PU: Zadaniem przypadku użycia jest pobranie kopii repozytorium z serwera Gita, a później uzyskanie informacji o historii projektu z lokalnej kopii repozytorium. W tym celu napisaliśmy klasę „GitWrapperImpl”, dziedziczącą po klasie „AbstractRepoWrapperImpl”. Napisaliśmy też klasę pomocniczą „GitDiffService”. Warunki początkowe: Przekazanie przez GUI nazwy repozytorium oraz adresu repozytorium, które będziemy chcieli ściągnąć na nasz dysk w celu zebrania danych o cyklu życia projektu. Podstawowy ciąg zdarzeń: (cały poniższy ciąg zdarzeń zawiera się w metodzie fetchProjectHistory, która zwraca obiekt klasy ProjectHistory) 1. Tworząc obiekt naszej nowej klasy za pomocą konstruktora ustawiamy adres URI „repoUri”, w tym przypadku jest adresem, który wskazuje adres, z którego pobierzemy repozytorium. Przypisujemy także katalog, w którym chcemy zapisać interesujące nas repozytorium, mianowicie „repoDir”. Te dane zapisywane są jako pola obiektu config, klasy Properties. 2. Jeżeli repozytorium nie istnieje wywołujemy metodę fetchRepository. 3. W metodzie fetchRepository usuwamy dotychczasowy katalog metodą deleteDirectory w celu uniknięcia błedów. 4. W celu pobrania repozytorium w metodzie fetchRepository wywołujemy metodę CloneRepository(config data) z klasy Git, gdzie data to ustawione przez nas w podpunkcie pierwszym „repoUri” i „repoDir”. Metoda zwraca pobrane repozytorium. 5. Ustalamy start rewizji metodą getStartRevision(), następnie koniec rewizji za pomocą getEndRevision(). Metody te zwrócą pola klasy RevCommit, których użyjemy jako argumenty metody getRevCommitSet. 6. Tworzy następnie kolekcję commitów Set<RevCommit> za pomocą metody getRevCommitSet, posiadającej 3 argumenty, 2 to uzyskane przez nas w poprzednim punkcie (wartości zwrócone przez getStartRevision i getEndRevision), trzecim argumentem jest zaś config, klasy Properties, uzyskany przez nas w 1 punkcie. 7. Później tworzymy kolekcję rewizji Set<Revision>, za pomocą metody getRevisionSet. Argumentem tej metody jest kolekcja commitów Set<RevCommit> z punktu 6. 8. Zapisujemy do obiektu ProjectHistory dane uzyskane wcześniej, za pomocą metody setRevisions(revisions), gdzie revisions to kolekcja Set<Revision> z punktu 7. Założenie dodatkowe: Korzystamy z biblioteki Jgit, posiadającej klasy Git i RevCommit, które są przez nas wykorzystywane. Różnica między RevCommit, a Revision: Obie klasy opisują Commit, jednakże obiekty RevCommit to obiekty klasy pochodzącej z biblioteki Jgit, a Revision to obiekty klasy pochodzącej z tego projektu. W metodzie doDiff, mapujemy obiekt RevCommit na obiekt Revision. Alternatywny ciąg zdarzeń 1: Kiedy główny ciąg zdarzeń zostanie wykonany, użytkownik za pomocą GUI będzie mógł zobaczyć historię zmian w repozytorium. Ażeby to zrobić będzie musiał nacisnąc button dodany przez naszych kolegów do GUI, który wywoła za pomocą zdarzeń metodę doDiff napisanej przez nas klasy DiffService. Przycisk powinien być aktywny tylko wtedy, gdy zaznaczone będzie ściągnięte wcześniej istniejące repozytorium, którego zawartość będziemy chcieli przeglądnąć. Argumenty metody doDiff: – obiekt klasy Git oraz obiekt klasy Repository niezbędny do połączenia się z repozytorium ( w sumie 2 różne argumenty ) – kolekcja commitów Set<RevCommit> Metoda ta zwróci kolekcję rewizji Set<Revision>, którą za pomocą GUI wyświetlimy w kontrolce graficznej. Ciąg zdarzeń metody doDiff: 1. W pętli while sprawdzającej czy kolekcja Set<RevCommit> posiada następny element, sprawdzamy czy taki element występuje. Jeśli tak zapisujemy do obiektu String tekst, który uzyskamy za pomocą metody getDiff, posiadającej 2 argumenty, jeden to poprzedni element kolekcji Set<RevCommit>, a drugi to aktualny. 2. Później wywołujemy funkcję getRevision, posiadającą w argumencie Stringa uzyskanego w punkcie 1 oraz nasz aktualny element kolekcji Set<RevCommit>. Funkcja getRevision zwraca obiekt klasy Revision, który dodajemy do kolekcji Set<Revision>. 3. Metoda doDiff wykonuje się do momentu wystąpienia ostatniego elementu kolekcji Set<RevCommit> i metoda zwraca kolekcję Set<Revision>, której elementy powinniśmy wyświetlić w GUI. Diagram klas: Diagramy sekwencji: metoda fetchProjectHistory: Metoda fetchRepository: Metoda doDiff, z klasy gitDiffService. Testy akceptacyjne: W poniższych testach zostały przetestowane akcje użytkownika, które są wykonywane przez użytkownika, gdy korzysta z zaimplementowanego przez nas przypadku użycia. W tabelach przedstawione są dane wejściowe. Które są konieczne do przetestowania danej aktywności, cyfra 1 oznacza pomyślne przejście testu, cyfra 0 oznacza negatywne przejście testu. FetchRepository, czyli przeglądanie repozytorium. repository null null null config [repoUri: https://github.com/twitter/bootstrap.git; repoDir: /home/pawel/repo] [repoUri: NULL; repoDir: /home/pawel/repo] [repoUri: https://github.com/twitter/bootstrap.git; repoDir: /home]pawel\repo] fetchRepository? 1 0 0 GetStartRevision, czyli pobieranie początkowej rewizji z repozytorium config [repoUri: https://github.com/twitter/bootstrap.git; repoDir: /home/pawel/repo] [repoUri: NULL; repoDir: /home/pawel/repo] [repoUri: https://github.com/twitter/bootstrap.git; repoDir: /home]pawel\repo] getStartRevision? 1 0 0 getEndRevision, czyli pobieranie początkowej rewizji z repozytorium config [repoUri: https://github.com/twitter/bootstrap.git; repoDir: /home/pawel/repo] [repoUri: NULL; repoDir: /home/pawel/repo] [repoUri: https://github.com/twitter/bootstrap.git; repoDir: /home]pawel\repo] getEndRevision? 1 0 0 setCommits, akcja, która pozwala dodać do listy commity, jeżeli istnieją config start end setCommits? [repoUri: https://github.com/twitter/bootstrap.git; repoDir: /home/pawel/repo] [pawelrak; 2010-07-14 09:00:02; utf8] [pawelrak; 2010-08-14 19:50:42; utf8] 1 [repoUri: https://github.com/twitter/bootstrap.git; repoDir: /home/pawel/repo] [pawelrak; 2010-09-14 09:00:02; utf8] [pawelrak; 2010-08-14 19:50:42; utf8] 0 [repoUri: blednylink.cc; repoDir: /home/pawel/repo] [pawelrak; 2010-07-14 09:00:02; utf8] [pawelrak; 2010-08-14 19:50:42; utf8] 0 getRevCommitSet, akcja, która pozwala pobrać commity z repozytorium config start end getRevCommitSet? [repoUri: https://github.com/twitter/bootstrap.git; repoDir: /home/pawel/repo] [pawelrak; 2010-07-14 09:00:02; utf8] [pawelrak; 2010-08-14 19:50:42; utf8] 1 [repoUri: https://github.com/twitter/bootstrap.git; repoDir: /home/pawel/repo] [pawelrak; 2010-09-14 09:00:02; utf8] [pawelrak; 2010-08-14 19:50:42; utf8] 0 [repoUri: blednylink.cc; repoDir: /home/pawel/repo] [pawelrak; 2010-07-14 09:00:02; utf8] [pawelrak; 2010-08-14 19:50:42; utf8] 0 getRevisionSet, akcja, która pozwala pobrać przetworzyć zbiór revCommitów na zbiór obiektów repozytorium revSet { [pawelrak; 2010-07-14 09:00:02; utf8], [jkowalski; 2010-07-15 09:10:06; utf8], [jkowalski; 2010-07-15 09:10:06; utf8] } getRevisionSet? { [prak; 2010-07-14 09:00:02; utf8], [jkowalski; 207-15 09:10:06; utf8] } 0 { [jkowalski; 2071-15 09:10:06; utf8] , [prak; 2010-07-14 09:00:02; utf8], [jkowalski; 207-15 09:10:06; utf8] } 0 1 getRevision, akcja zwracająca rewizję z poczynionych zmian Rev diff tree getRevision? 1 [pawelrak; 2010-07-14 09:00:02; utf8] Binary files a/index.html diff --git a/index.html index b70c486..31d4a68 100644 /home/usr/repo/.git 0 [pawelrak; 2010-07-14 09:00:02; utf8] Binary files a/index.html diff --git a/index.html index b70c486..31d4a68 100644 /home\usr/.svn 0 [pawelrak; 2010-07-14 99:99:99; utf8] Binary files a/index.html diff --git a/index.html index b70c486..31d4a68 100644 /home/usr/repo/.git doDiff, zapisywanie zmian w repozytorium repository commits doDiff? /home/usr/repo/.git { [pawelrak; 2010-07-14 09:00:02; utf8], [jkowalski; 2010-07-15 09:10:06; utf8], [jkowalski; 2010-07-15 09:10:06; utf8] } 1 /home/usr/repo/.git { [pawelrak; 2010-07-14 09:00:02; utf8], [jkowalski; 211110-07-15 09:10:06; utf8], [jkowalski; 2010-07-415 09:10:06; utf8] } 0 null { [pawelrak; 2010-07-14 09:00:02; utf8], [jkowalski; 2010-07-15 09:10:06; utf8], [jkowalski; 2010-07-15 09:10:06; utf8] } 0