Facebook (zabranjen u Ruskoj Federaciji) objavio je sistem kontrole izvora Sapling, koji se koristi u razvoju internih projekata kompanije. Sistem ima za cilj da obezbedi poznati interfejs za kontrolu verzija koji se može skalirati za veoma velika spremišta koja obuhvataju desetine miliona fajlova, urezivanja i grana. Klijentski kod je napisan na Pythonu i Rustu i otvoren je pod GPLv2 licencom.
Razvijena je zasebna serverska komponenta za efikasan udaljeni rad sa repozitorijima i virtuelni datotečni sistem za rad sa lokalnim dijelom repozitorija kao da se radi o punom repozitoriju (programer vidi cijeli repozitorij, ali se samo traženi podaci kopiraju u lokalni sistem). Kod za ove komponente koji se koristi u Facebookovoj infrastrukturi još nije otvorenog koda, ali je kompanija obećala da će ga objaviti u budućnosti. Međutim, prototipovi se već mogu pronaći u Sapling repozitoriju. server Mononoke (napisan u Rustu) i VFS EdenFS (napisan u C++). Ove komponente su opcionalne, kao i Sapling klijent, koji podržava kloniranje Git repozitorija i interakciju sa serveri zasnovano na Git LFS-u i rad sa git hosting servisima kao što je GitHub.
Glavna ideja sistema je da se prilikom interakcije sa posebnim serverskim delom koji obezbeđuje skladištenje spremišta, sve operacije skaliraju u zavisnosti od broja fajlova koji se stvarno koriste u kodu na kojem programer radi, i ne zavise od ukupna veličina čitavog spremišta. Na primjer, programer može koristiti samo mali dio koda iz veoma velikog spremišta i samo taj mali dio će biti migriran u njegov sistem, a ne cijelo spremište. Radni direktorij se puni dinamički kako se pristupa datotekama iz spremišta, što vam s jedne strane omogućava značajno ubrzanje rada sa svojim dijelom koda, ali s druge strane dovodi do usporavanja pristupa novim datotekama za prvi put i zahteva stalan pristup mreži (posebno obezbeđen i offline režim za pripremu urezivanja).
Pored adaptivnog učitavanja podataka, Sapling također implementira optimizacije usmjerene na smanjenje učitavanja informacija s historijom promjena (na primjer, 3/4 podataka u repozitoriju s jezgrom Linux (Ovo se odnosi na historiju promjena). Da bi se efikasno radilo s historijom promjena, povezani podaci se pohranjuju u segmentiranom prikazu, što omogućava preuzimanje pojedinačnih dijelova grafa commit-ova sa servera. Klijent može zatražiti informacije o odnosu između nekoliko commit-ova sa servera i preuzeti samo potreban dio grafa.
Projekat se razvijao poslednjih 10 godina i kreiran je da reši probleme prilikom organizovanja pristupa veoma velikim monolitnim repozitorijumima sa jednom master granom, koja je koristila operaciju „rebase“ umesto „merge“. U to vrijeme nije bilo otvorenih rješenja za rad sa ovakvim repozitorijumima, te su Facebook inženjeri odlučili da kreiraju novi sistem kontrole verzija koji bi zadovoljio potrebe kompanije, umjesto da dijele projekte na mala spremišta, što bi dovelo do složenosti upravljanje zavisnošću (u jednom trenutku, da bi rešio sličan problem, Microsoft je kreirao GVFS sloj). U početku, Facebook je koristio sistem Mercurial i projekat Sapling u prvoj fazi razvijen kao dodatak Mercurialu. Vremenom se sistem transformisao u nezavisan projekat sa sopstvenim protokolom, formatom skladištenja i algoritmima, koji je takođe proširen mogućnošću interakcije sa Git repozitorijumima.
Za rad se nudi uslužni program komandne linije “sl”, koji implementira tipične koncepte, tokove posla i interfejs koji je poznat programerima koji su upoznati sa Gitom i Mercurialom. Terminologija i naredbe u Saplingu se malo razlikuju od Git-a i bliže su Mercurialu. Na primjer, umjesto grana se koriste “bookmarkovi” (imenovane grane nisu podržane), po defaultu, prilikom izvršavanja kloniranja/povuci, ne učitava se cijelo spremište, već samo glavna grana, nema preliminarnog označavanja urezivanja ( staging area), umjesto “git fetch” koristi se naredba “sl” pull”, umjesto “git pull” - "sl pull -rebase", umjesto "git checkout COMMIT" - "sl goto COMMIT", umjesto "git reflog" - "sl journal", za poništavanje promjene umjesto "git checkout - FILE" naveden je "sl revert FILE", a "." Ali generalno, opšti koncepti grananja i operacija kloniranja/povlačenja/push/urezivanja/rebase su očuvani.
Među dodatnim karakteristikama kompleta alata Sapling ističe se podrška za “smartlog” koja vam omogućava da vizualno procijenite stanje vašeg spremišta, istaknete najvažnije informacije i filtrirate nevažne detalje. Na primjer, kada pokrenete sl uslužni program bez argumenata, na ekranu se prikazuju samo vaše lokalne promjene (druge su minimizirane), prikazano je stanje vanjskih grana, promijenjene datoteke i nove verzije urezivanja. Dodatno, nudi se interaktivni web interfejs koji omogućava brzu navigaciju kroz pametni dnevnik, stablo promjena i urezivanje.

Još jedno značajno poboljšanje u Saplingu je to što olakšava ispravljanje i rješavanje grešaka i vraćanje u prethodno stanje. Na primjer, naredbe “sl undo”, “sl redo”, “sl uncommit” i “sl unaend” se nude za vraćanje mnogih operacija unatrag, naredbe “sl hide” i “sl unhide” se koriste za privremeno sakrivanje urezivanja; i za interaktivnu navigaciju kroz stara stanja i povratak na navedenu tačku komandom “sl undo -i command”. Sapling takođe podržava koncept steka urezivanja, koji vam omogućava da organizujete preglede korak po korak razbijanjem složene funkcionalnosti u skup manjih, razumljivijih inkrementalnih promena (od osnovnog okvira do gotove funkcije).
Nekoliko dodataka je pripremljeno za Sapling, uključujući ReviewStack sučelje za pregled promjena (kod pod GPLv2), koji vam omogućava da obrađujete zahtjeve za povlačenjem na GitHub-u i koristite prikaz steka promjena. Osim toga, objavljeni su dodaci za integraciju sa VSCode i TextMate urednicima, kao i implementaciju ISL (Interactive SmartLog) interfejsa i servera.
izvor: opennet.ru
