Featured Post

Helppo ja nopea kolmionpiirtorutiini.

Vau. Kehitys kehittynyt ja oppi opittu. public static void SolidTriangle(Point a, Point b, Point c, Color color) {             Point[] po...

Wednesday, August 20, 2008

Skriptausta, tai 'Tee-se-itse versionhallinta komentoriviskriptillä'


Tämä on minusta kiva video.

Eli: Töissä olivat varovaisia sen suhteen, miten tehdään committeja svn-trunkkiin. Joten en tehnyt committia mahdollisesti rikkinäisestä koodista. Okei.

No, toimivasta koodista jatkoin tweakkausta ja onnistuin vahingossa poistamaan yhden rivin yhdestä funktiosta mikä rikkoi kaiken. Tietty, meni aikansa ennen kuin virheen sai korjattua, ja siinä sai miettiä, "jos olisi jonkinlainen SCM, niin tämäkin olisi selvinnyt kolmessa sekunnissa diffillä." Git on tietty ihan hieno, mutta työpaikan serverillä sitä ei ole, noin ensinnäkin. Yhtä kaikki, eilen illalla lueskentelin muunmuassa tuon Wikipedian artikkelin linkkejä, ja mietin tätä "Tarballs and patches" juttua.

Tulin siihen tulokseen, että riippumatta siitä, mitkä säännöt muuten on versionhallintaan, haluan itselleni sellaisen oman savegame-mekanismin. Nyt.

Joten, skriptiä:

svn status||grep --regexp [MA]|grep -F .|sed -e 's/M / /' -e 's/A / /'|xargs tar -zcvf /home/esa/backup-$(date +%Y%m%d-%H%M%S).tar.gz


Selitys:

svn status hakee listan kaikista versionhallinnasta haetun projektin muutoksista - tarkemmin sanottuna, tiedostonnimet.

grep --regexp [MA] antaa vain ne rivit jotka ovat Modified tai Added CVS:ään. Tähän voi lisätä ?:n, jos haluaa ne mitä ei ole vielä lisätty.

grep -F . karsii pois kansionnimet, sillä muuten TAR pakkaa koko kansion.

sed -e 's/M / /' -e 's/A / /' korvaa rivin alussa olevat "Modified" ja "Added" merkit yhdellä välilyönnillä. tyhjä stringi käy myös.

xargs antaa putkessa tulleen datan syötteenä seuraavalle komennolle.

tar -zcvf /home/esa/backup-$(date +%Y%m%d-%H%M%S).tar.gz tekee syötteessä tulleista tiedostoista time-stampatyn paketin.

Nämä kaikki ovat backup.sh skriptissä tällä hetkellä, joten jos ajan tämän, niin se luo kotihakemistooni tiedoston, jonka nimi on muotoa backup_2008-08-17-175011.tar.gz

Minusta kohtuu kätevää. Nyt, juuresta tar zxOf /home/esa/backup_YYYY-MM-DD-HHMMSS.tar.gz path/to/filename | diff path/to/filename antaa muutokset viimeisimmän "savegamen" ja nykyversion välillä. Kätevää. Luonnollisesti tar zdf /home/esa/backup_YYYY-MM-DD-HHMMSS.tar.gz antaa diffin. Muistaakseni.

Nyt, tein skriptin: 'tar zxOf $1 $2 | diff $2 -' jolloin voin kirjoittaa tyyliin mydiff.sh /home/esa/paketti /path/to/filename, mikä antaa diffin. Ehkä kolmas parametri voi olla hyödyllinen, jos ei jaksa olla projektin juuressa.

Lisäksi, backup-scriptiin kun laittaa tuon "backup" tekstin tilalle $1:n niin saadaan seuraava toiminnallisuus:

./backup.sh jokunimi

tuottaa paketin jonka nimi onkin jokunimi-YYYYMMDD-HHMMSS.tar.gz. kätevää.

Toinen parametri polulle olisi myös mahdollinen, mutta skriptiä on helppo editoida tarpeen mukaan, joten ei ole jaksanut.

Tästä on itseasiassa helpohko jatkaa vähän, ja lopputuloksena on inkrementaalinen versionhallinta, joka käyttää pelkkää tarria. Liekö tuossa pointtia, mutta hauskaa on. Noissa on oikeasti paljon vielä laajennettavaa, mutta kaikkea kivaa voi tehdä - sen sijaan että, esim. vertaa SVN:ää vastaan, voi vaan tehdä tar-paketin kansiosta, sitten aloittaa tar zdf:llä alkuperäistä vastaan...

Mielenkiintoista, näin ohjelmoijalle.

Hei, hullu juttu, mutta putpixel diveillä.

Tämä oli alunperin viivanpiirtojuttuihin, Tetriksen jälkeen, mutta meni liian vaikeaksi, joten hylkäsin idean. Ihan hyvä sinällään, koodin hitaus on ihan omaa luokkaansa. Sitävastoin
monenlaisia toisenlaisia pelitoteutuksia on DIV-generoinnilla erittäinkin ja oikeinkin mahdollista suorittaa.

Muut ovat minua hullumpia

No comments:

Post a Comment