Jako Akwizytor zbieram z repozytorium GIT informacje o historii projektu

Podobne dokumenty
Co zostanie wypisane na ekranie? (1)

Programowanie I

Zarządzanie projektami informatycznymi

Przychodnia 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę Osoba.

System kontroli wersji git

Baza danych sql. 1. Wprowadzenie. 2. Repozytaria generyczne

Programowanie obiektowe

1. System kontroli wersji Instalacja programu kontroli wersji CVS

Baza danych sql. 1. Wprowadzenie

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Użytkowanie PortableGit w systemie Windows. 1. Najważniejsze informacje

GIT. System Kontroli wersji GIT. Rafał Kalinowski

Programowanie obiektowe - zadania

Wykład 9 Kolekcje, pliki tekstowe, Przykład: Notatnik

Projekt Hurtownia, realizacja skojarzeń dostawców i produktów

git krótki przewodnik

CVS system kontroli wersji

Synchroniczne wprowadzanie kontrahentów - SWK Moduł VBA do Symfonia FK Forte.

Specyfikacja API Runtime BAS 3.0

Programowanie zaawansowane

Wprowadzenie do projektu QualitySpy

Memeo Instant Backup Podręcznik Szybkiego Startu

Instrukcja laboratoryjna cz.3

Wprowadzenie do Doctrine ORM

Programowanie obiektowe

Widoki zagnieżdżone, layout. 1. Wprowadzenie Repozytoria danych

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

Gra-zabawka dla niemowląt przygotowana z użyciem w Unity 3D

Zadania z podstaw programowania obiektowego

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Materiały do laboratorium MS ACCESS BASIC

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Biuro Podróży 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę

1. Proszę wejść na stronę: poczta.home.pl i zalogować się do nowej skrzynki za pomocą otrzymanych danych.

Biuro Podróży 0. Stwórz projekt aplikacja konsolowa lub WPF (przemyśl wybór, bo zmiana może być czasochłonna). 1. Stwórz abstrakcyjną klasę

QualitySpy moduł persystencji

Git, Bitbucket, IntelliJ IDEA

Adam Wójs <adam[shift+2]wojs.pl> git --wprowadzenie

Instrukcja obsługi programu:

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie obiektowe

akademia androida Składowanie danych część VI

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Programowanie obiektowe

3 Delegacje. 3.1 Tworzenie delegacji. 3.2 Skojarzenie delegacji z procedurą czy funkcją

Podstawy technologii WWW

Algorytmy i Struktury Danych. Anna Paszyńska

Zasady programowania Dokumentacja

Programowanie obiektowe

Git rozproszony system kontroli wersji

Diagnoza Szkolna Pearsona. Instrukcja obsługi

Program dla praktyki lekarskiej

System kontroli wersji Git

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Instrukcja użytkowania

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

Rozdział 4 KLASY, OBIEKTY, METODY

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Aplikacje w środowisku Java

Instrukcja laboratoryjna nr.4

Archiwum Prac Dyplomowych

Podstawy obiektowości

Rozdział ten zawiera informacje o sposobie konfiguracji i działania Modułu OPC.

Instrukcja obsługi programu archiwizującego Farex Archiver

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Programowanie obiektowe

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Tabela wewnętrzna - definicja

Języki programowania imperatywnego

Ćwiczenie: JavaScript Cookies (3x45 minut)

MikroTik Serwer OpenVPN

Programowanie obiektowe

GIT. Rozproszony system kontroli wersji

Serwery aplikacji. dr Radosław Matusik. radmat

Podstawowy warsztat informatyka

SZYBKI START. Tworzenie nowego połączenia w celu zaszyfrowania/odszyfrowania danych lub tekstu 2. Szyfrowanie/odszyfrowanie danych 4

Leszek Stasiak Zastosowanie technologii LINQ w

Języki i techniki programowania Ćwiczenia 2

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Poradnik zetula.pl. Jak założyć konto na zetula.pl. i zabezpieczyć dane na swoim komputerze?

Podręcznik użytkownika

Opis szybkiego uruchomienia programu APBSoft

Przewodnik po Notowaniach Statica mdm 4

Metody Metody, parametry, zwracanie wartości

Portal Wymiany Wiedzy Przewodnik dla nowych użytkowników

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Katalog książek cz. 3: Web Service

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Programowanie obiektowe

Połączenie AutoCad'a z bazą danych

Ciekawym rozwiązaniem służącym do obsługi zdarzeń dla kilku przycisków w ramach jednej aktywności może być następujący kod:

Platforma.NET laboratorium 4 Aktualizacja: 15/11/2013. Visual Basic.NET dostęp do bazy danych. Baza Microsoft SQL Server Compact

INSTRUKCJA UŻYTKOWNIKA PROGRAMU VAT2011 VER 1.0

Zacznijmy więc pracę z repozytorium. Pierwsza konieczna rzecz do rozpoczęcia pracy z repozytorium, to zalogowanie się w serwisie:

Python wstęp. Michał Bereta

Instrukcja połączenia z programem Compas LAN i import konfiguracji

Język Java część 2 (przykładowa aplikacja)

Transkrypt:

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 config fetchrepository? null [repouri: https://github.com/twitter/bootstrap.git; repodir: /home/pawel/repo] 1 null [repouri: NULL; repodir: /home/pawel/repo] 0 null [repouri: https://github.com/twitter/bootstrap.git; repodir: /home]pawel\repo] 0 GetStartRevision, czyli pobieranie początkowej rewizji z repozytorium config getstartrevision? [repouri: https://github.com/twitter/bootstrap.git; repodir: /home/pawel/repo] 1 [repouri: NULL; repodir: /home/pawel/repo] 0 [repouri: https://github.com/twitter/bootstrap.git; repodir: /home]pawel\repo] 0 getendrevision, czyli pobieranie początkowej rewizji z repozytorium config getendrevision? [repouri: https://github.com/twitter/bootstrap.git; repodir: /home/pawel/repo] 1 [repouri: NULL; repodir: /home/pawel/repo] 0 [repouri: https://github.com/twitter/bootstrap.git; repodir: /home]pawel\repo] 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? 1 { [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 getrevision, akcja zwracająca rewizję z poczynionych zmian Rev diff tree getrevision? [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 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/.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 0

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