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