Linux Admin

Wednesday, September 17, 2008

Kod gozden gecirme sureci ve GvR amcanin katkilari

Gecen gun Google App Engine ile bir seyler denerken farkettim ki sundugu SDK'de bulunan appcfg.py ile elimizdeki kodu teslim etmeden once yaptigimiz degisikliklere gozatma imkanimiz yok. Kodlarimizi svn gibi bir surum denetim dizgesi kullanmamiz gerekiyormus. oysa app engine'deki surum numaralarini gorunce sonuncu ve simdiki araasindaki degisikliklere bakabileceimi sanmistim.

google'da "google app engine pre commit diff" gibi bir arama yapinca karsima http://code.google.com/p/rietveld/ geldi. parkyeri'nde zamanla ve acilar cekerek kesfettigimiz kod gozden gecirme surecinin cok benzerini google'da da kullaniyorlarmis ve Guido van Rossum(GvR - python'un yaraticisi ve hala yon vericisi, etkin kod gozden gecirici) amcamiz google'a girdikten sonra ilk proje olarak bu sureci iyilestirmek icin kollari sivamis, mondrian diye bir arac yazmis.

bizim mevcut yapimiz asagidaki gibi ve google'daki ile fazlasiyla benzerlik gosteriyor, meraklilari icin parantez icerisine kendi kullandigim araclari yazdim:

  1. bir kisigereken kodu yazar (emacs ... | vim ...)

  2. yama uretir (svn diff > ticket_no.patch)

  3. ilgili gelistirme grubuna gozden gecirme icin eposta atar (mutt -a ticket_no.patch hede@parkyeri.com)

  4. gruptan bir kisi kendi deposuna yamayi uygular (patch -p0 < ticket_no.patch)

  5. kodu inceler (emacs ... | vim ...)

  6. kodu inceleyen kisi epostadaki yama icerisine notlarini yazar ve kodun yazarina gonderir, (mutt)
    (ya da benim genelde yaptigim gibi yazan adam ile dogrudan konusarak sosyal yollarla da cozebilir (finch, konusma))

  7. kodu ilk yazan kisi kodu tekrar duzenler ve tekrar yama uretip gonderir (svn diff ... , mutt -a ...)

  8. bu surec, kodu gozden geciren kisi "eline saglik teslim edebilirsin"(este) (Enver'den bize miras olarak kaldi) diyene kadar tekrarlar (bazen yamalarimiza changelog eklemedigimiz icin "este" yerine "changelog ekleyip teslim edebilirsin[cete]" cevabi da gelebilir)

  9. son olarak da "este" alan kodlarimizi teslim ederiz (svn commit)


Kullandigim araclar basit gozukebilir, ama genel olarak islerini guzel yapan araclar ve cok da fazla dis yardima ihtiyac kalmiyor. Genellikle kodlarimizi ssh ile eristigimiz uzaktaki makinalar uzerinde gelistirdigimiz icin diger gelistiricilerin ev dizinlerinden onlarin neler yaptigini izleyebiliyoruz ve yama alisverisi eposta uzerinden olmak zorunda kalmiyor hatta bir cok durumda yama alisverisi bile olmuyor, girip diger bir gelistiricinin proje dizininde "svn diff | vim -" diyerek kodlari okuyabiliyorum, ancak bunlar gorece kucuk olmamizin getirileri.

Kucuk projelerde artik gozden gecirme surecimiz dahi olmuyor, degisikliklerin takibi ve teslim sonrasi gozden gecirme icin svn teslim epostalari, Trac ve eklentileri yeterli.

Gozden gecirmenin onemini anlatip duran ve bunu python gibi buyuk bir projeyi yonettigi icin yapmak da zorunda olan GvR amcamiz zamaninda ortaya koydugu mondrian'i fazla google bagimli oldugu icin (perforce ve bigtable gibi bagimliliklar yuzunden) acik kaynak haline getirememis, ancak daha sonra Rietveld adiyla acik kaynak olarak da yayinlamis ve diger acik kaynak projelerin kullanimina CodeReview adiyla google app engine uzerinden acmis.

Aracin (rietveld) ornek kullanimi burada.

3 comments:

  1. gelen patch ve o anda üzerinde çalışmakta olduğunuz kod ile çakışma var ise akış nasıl değişiyor?

    ReplyDelete
  2. Cok ender karsilastigimiz bir durum oldugu icin cozmeye ihtiyac duymadik.

    Cok kisi kucuk bir kod parcasi uzerinde ilerliyorsa tum takimdan seri halde gelen mini teslimatlar ile ilerliyoruz, bu surec genellikle projeyi yaparken ozel bir mudahale olmadan gelsitiriceler arasindaki iletisimle kendiliginden gelisiyor.

    Herkesin birbiri ile cakisan kisimlarda buyuk boyutlu yamalar yazmasi, ya birkacinin yamasini cope gitmesi ya da tekrar yaptigimiz tasarim ile cozuluyor.

    Ama soru "varolan degisikliklerin yamayi kendi kod tabanima uygulamami engellemesi" ise sikca basvurdugumuz uc yontem var:

    1. Yamayi kendi depona uygulamadan gozden gecirebilirsin, boyle yaparsan test etme imkanin olmaz.

    2.kendi yamani geri alip, okuyacagin yamayi uygular ve icin bitince de kendi yamana geri donersin:
    - kendi isinin yamasini saklar (svn diff > kedi_degisikliklerim.patch)
    - tum degisikliklerini geri alir (svn revert -R .)
    - artik temiz olan calisma alanimiza yapayi uygulayip yazimda anlattigim sekilde gozden gecirip test edebiliriz.
    - isimiz bitince gelen kodu geri (svn revert -R .) alir kendi yamamiza aldigimiz yerden devam edebiliriz.(patch -p0 < kedi_degisikliklerim.patch)

    3. yamayi uygulamak icin kodu farkli bir yere cekebilirsin (svn checkout https://svn....). Bu durumda yeni cektigin yer icin yapilandirmalari ve kodun calisabilmesi icin gereken kimi kurulumlari tekrar yapman gerekebilir, yani kimi projeler icin buyuk cile demek olabilir bu yontem.

    ReplyDelete