Homework for the Object Oriented Programming course @ ACS, UPB 2018
- am realizat o clasa
Commitcu 3 campuri pentru a retine caracteristicile acestei comenzi. Un camp retine id-ul commit-ului, un altul retine clona filesystem-ului curent, iar ultimul retine operatia/operatiile aplicata de commit. - am creat o clasa
Branchin care am retinut caracteristicile unei comenzi de acest tip, numele branch-ului si o lista cu commit-urile pe care le detine. - pentru fiecare operatie, am realizat cate o clasa care executa comanda data si schimbarile pe care le realizeaza, dupa cum urmeaza:
-
Clasa
CommitOperation- verifica daca lista cu operatiile din Staging este goala, altfel adauga un obiect de tipCommitin lista branch-ului curent dat denameHead. Fiecare obiect de tip commit retine o clona a filesystem-ului curent. Dupa fiecare commit adaugat, se goleste lista care retine operatiile inStaging. -
Clasa
BranchOperationverifica initial, in functia execute, daca mai exista alt branch cu acelasi nume, in caz contrar cream un obiect de tip branch si copiem toate obiectele te tip commit dinnameHeadin lista noului branch. In final, adaugam branch-ul in lista cu branch-uri. -
Clasa
CheckoutOperationrealizeaza operatia, in functia execute, dupa 2 cazuri, de tip branch sau de tip commit. Initial, verifica daca lista cu comenzile din staging este goala. Daca comanda este pentru commit-uri, sterg commit-urile care urmeaza dupa commit-ul cu id-ul dat de comanda, dupa care setezactiveSnapshotla la versiunea data de ultimul commit. Daca comanda este de tip branch, verific daca exista branch-ul cu numele dat, in caz afirmativ, setez pointerulnameHeadla branch (salveaza referinta branch-ului respectiv). -
Clasa
InvalidVcsOperationreturneaza eroarea dupa ce verifica daca comanda este valida in metoda execute. -
Clasa
LogOperationrealizeaza, in metoda execute, afisarea caracteristicilor unei comenzi de tip commit (id-ul si mesajul comenzii). Se ia branchul curent cu ajutorul pointeruluinameHeadsi este parcursa lista sa de commit-uri. -
Clasa
RollbackOperationrealizeaza in metoda execute, operatia de golire a staging-ului curent si de aducere a snapshot-ului de filesystem la versiunea data de ultimul commit. -
Clasa
StatusOperationafiseaza numele branch-ului curent și modificarile care sunt in staging cu ajutorul metodeistatusCommand()din clasaVcscare efectueaza parsarea numelor comenzilor din staging.
In clasa Vcs am declarat si intantiat urmatoarele variabile: lista
stagingOperationList de tip AbstractOperation, lista statusOperation de tip
String, lista branchHead de tip Branch si variablia statica nameHead de tip
Branch in efectuarea comenzilor date. Fiecare camp declarat si instantiat are
get-eri, set-eri si alte metode specifice, dupa caz, pentru a interactiona cu
operatiile de tip vcs.