SlideShare a Scribd company logo
1 of 30
Download to read offline
GIT HOOK'LARI İLE KOD KALİTESİNİ KORUMAK
                    VE

          MUHAFIZ
                  OSMAN YÜKSEL
       NİSAN'13 - Özgür YAZILIM VE LİNUX günlerİ
Neden?
GIT HOOK'LARI
AlternatİF YÖNTEMLER
“YAZARIM LAN BEN BUNU!”
MUHAFIZ
NASIL KURULUR?
RUNNER'LAR
AÇIK KAYNAK VE TOPLULUĞUN GÜCÜ
SORULAR
NEDEN?
 Daha önce çalıştığımız çoğu yerde kod standartları belirlendi
NEDEN?
 Daha önce çalıştığımız çoğu yerde kod standartları belirlendi

                                Ama hiçbir yerde uygulanmadı
NEDEN?
 Daha önce çalıştığımız çoğu yerde kod standartları belirlendi

                                Ama hiçbir yerde uygulanmadı


                         Production ortamında syntax error
                                      var_dump($badwords);
             console.log yüzünden “patlayan” ödeme sayfası
                     Virgül yüzünden parse edilemeyen JSON
NEDEN?
 Daha önce çalıştığımız çoğu yerde kod standartları belirlendi

                                Ama hiçbir yerde uygulanmadı


                         Production ortamında syntax error
                                      var_dump($badwords);
             console.log yüzünden “patlayan” ödeme sayfası
                     Virgül yüzünden parse edilemeyen JSON

                          “Bunlar Sonsuzdöngü'de olmayacak”
NEDEN?
 Daha önce çalıştığımız çoğu yerde kod standartları belirlendi

                                Ama hiçbir yerde uygulanmadı


                         Production ortamında syntax error
                                      var_dump($badwords);
             console.log yüzünden “patlayan” ödeme sayfası
                     Virgül yüzünden parse edilemeyen JSON

                          “Bunlar Sonsuzdöngü'de olmayacak”

           Ama bunun için code review'da süre harcamamalı!
GİT HOOK'LARI
Git, çoğu işlemin öncesinde ve sonrasında
“araya işlem sokmanıza” izin veriyor

 pre-commit
 pre-receive
 post-update
 pre-apply-patch
 ....
ALTERNATİF YÖNTEMLER ARAŞTIRDIK
https://github.com/jish/pre-commit'i bulduk
ALTERNATİF YÖNTEMLER ARAŞTIRDIK
https://github.com/jish/pre-commit'i bulduk

İlk başta her şey çok güzel gidiyordu :)
ALTERNATİF YÖNTEMLER ARAŞTIRDIK
https://github.com/jish/pre-commit'i bulduk

İlk başta her şey çok güzel gidiyordu :)

Ama bazı sorunlar vardı
ALTERNATİF YÖNTEMLER ARAŞTIRDIK
https://github.com/jish/pre-commit'i bulduk

İlk başta her şey çok güzel gidiyordu :)

Ama bazı sorunlar vardı

  Çalışmıyordu :(
ALTERNATİF YÖNTEMLER ARAŞTIRDIK
https://github.com/jish/pre-commit'i bulduk

İlk başta her şey çok güzel gidiyordu :)

Ama bazı sorunlar vardı

  Çalışmıyordu :(
ALTERNATİF YÖNTEMLER ARAŞTIRDIK
https://github.com/jish/pre-commit'i bulduk

İlk başta her şey çok güzel gidiyordu :)

Ama bazı sorunlar vardı

  Çalışmıyordu :(
  Ruby ile geliştirilmişti, biz   çok Ruby bilmiyorduk
  Genelde Ruby ile geliştirilen   projeler için “Runner”lar vardı
  Sunucu tarafında çalışmıyordu   :(
“YAZARIM LAN BEN BUNU!”
 Bildiğimiz bir dil ile geliştirilmeliydi (PHP?)
 Sonsuzdöngü'de belirlediğimiz standartları desteklemeliydi
 Sunucu tarafında da çalışmalıydı
 Açık kaynak olmalıydı!!1
“YAZARIM LAN BEN BUNU!”
  Bildiğimiz bir dil ile geliştirilmeliydi (PHP?)
  Sonsuzdöngü'de belirlediğimiz standartları desteklemeliydi
  Sunucu tarafında da çalışmalıydı
  Açık kaynak olmalıydı!!1

Oturduk yazdık :/
“YAZARIM LAN BEN BUNU!”
  Bildiğimiz bir dil ile geliştirilmeliydi (PHP?)
  Sonsuzdöngü'de belirlediğimiz standartları desteklemeliydi
  Sunucu tarafında da çalışmalıydı
  Açık kaynak olmalıydı!!1

Oturduk yazdık :/
MUHAFIZ

http://sonsuzdongu.github.com/muhafiz
NASIL KURULUR?

$ git clone git://github.com/sonsuzdongu/muhafiz.git ~/muhafiz
$ cp ~/muhafiz/git-hooks/* /your/project/.git/hooks
NASIL KURULUR?

$ git clone git://github.com/sonsuzdongu/muhafiz.git ~/muhafiz
$ cp ~/muhafiz/git-hooks/* /your/project/.git/hooks


$ git config muhafiz.bootstrap-file ~/muhafiz/src/bootstrap.php
NASIL KURULUR?

$ git clone git://github.com/sonsuzdongu/muhafiz.git ~/muhafiz
$ cp ~/muhafiz/git-hooks/* /your/project/.git/hooks


$ git config muhafiz.bootstrap-file ~/muhafiz/src/bootstrap.php


$ git config muhafiz.active-runners 'phpcs, jshint, consolefoo'
RUNNER'LAR
Dosya adında veya içeriğinde işlem yapan PHP sınıfları
RUNNER'LAR
RUNNER'LAR
Dosya adında veya içeriğinde işlem yapan PHP sınıfları

 bom: ByteOrderMark
 consolefoo: console.log(), console.debug()
 forbiddenfile: İzin verilmeyen dosyalar. foo.~ gibi
 jshint: JavaScript check
 lineend: Unix/Windows Satır sonu
 phpcsfixer: php-cs-fixer
 phpcs: PHP Code Sniffer
 php: Php Syntax Check
 vardump: var_dump(), print_r()
RUNNER'LAR
Dosya adında veya içeriğinde işlem yapan PHP sınıfları

 bom: ByteOrderMark
 consolefoo: console.log(), console.debug()
 forbiddenfile: İzin verilmeyen dosyalar. foo.~ gibi
 jshint: JavaScript check
 lineend: Unix/Windows Satır sonu
 phpcsfixer: php-cs-fixer
 phpcs: PHP Code Sniffer
 php: Php Syntax Check
 vardump: var_dump(), print_r()

Nasıl çalışıyor bir görelim?
AÇIK KAYNAK VE TOPLULUĞUN GÜCÜ


         Volkan Altan
        Yeni Runner'lar
AÇIK KAYNAK VE TOPLULUĞUN GÜCÜ


         Volkan Altan     Sercan Virlan
        Yeni Runner'lar      Bugfix
AÇIK KAYNAK VE TOPLULUĞUN GÜCÜ


         Volkan Altan     Sercan Virlan
        Yeni Runner'lar      Bugfix




          Adil Ilhan
        Yeni Runner'lar
AÇIK KAYNAK VE TOPLULUĞUN GÜCÜ


         Volkan Altan     Sercan Virlan
        Yeni Runner'lar      Bugfix




          Adil Ilhan      Eser Özvataf
        Yeni Runner'lar   SVN Desteği
Sorular ?

            Teşekkürler

            http://github.com/yuxel

            http://twitter.com/yuxel

            http://yuxel.net

More Related Content

Similar to Muhafiz

Web geliştirmeye başlamak
Web geliştirmeye başlamakWeb geliştirmeye başlamak
Web geliştirmeye başlamakMurat Yüksel
 
Programlama Dilleri Tanıtım
Programlama Dilleri TanıtımProgramlama Dilleri Tanıtım
Programlama Dilleri TanıtımAtilla Özgür
 
iOS Workflow: Tools, Tips & Tricks
iOS Workflow: Tools, Tips & TricksiOS Workflow: Tools, Tips & Tricks
iOS Workflow: Tools, Tips & TricksMobile İstanbul
 
Javascript Performance Optimisation
Javascript Performance OptimisationJavascript Performance Optimisation
Javascript Performance Optimisationirfandurmus
 
jQuery ile ASP.NET Uygulamaları Geliştirme
jQuery ile ASP.NET Uygulamaları GeliştirmejQuery ile ASP.NET Uygulamaları Geliştirme
jQuery ile ASP.NET Uygulamaları Geliştirmeİbrahim ATAY
 
Go Programlama Dili - Seminer
Go Programlama Dili - SeminerGo Programlama Dili - Seminer
Go Programlama Dili - SeminerCihan Özhan
 
Başarılı Projelerin Anahtarı: Çevik Yazılım Geliştirme Pratikleri
Başarılı Projelerin Anahtarı: Çevik Yazılım Geliştirme PratikleriBaşarılı Projelerin Anahtarı: Çevik Yazılım Geliştirme Pratikleri
Başarılı Projelerin Anahtarı: Çevik Yazılım Geliştirme PratikleriLemi Orhan Ergin
 

Similar to Muhafiz (10)

Web geliştirmeye başlamak
Web geliştirmeye başlamakWeb geliştirmeye başlamak
Web geliştirmeye başlamak
 
Programlama Dilleri Tanıtım
Programlama Dilleri TanıtımProgramlama Dilleri Tanıtım
Programlama Dilleri Tanıtım
 
iOS Workflow: Tools, Tips & Tricks
iOS Workflow: Tools, Tips & TricksiOS Workflow: Tools, Tips & Tricks
iOS Workflow: Tools, Tips & Tricks
 
BTRisk iOS Mobil Uygulama Denetimi Eğitimi
BTRisk iOS Mobil Uygulama Denetimi EğitimiBTRisk iOS Mobil Uygulama Denetimi Eğitimi
BTRisk iOS Mobil Uygulama Denetimi Eğitimi
 
Javascript Performance Optimisation
Javascript Performance OptimisationJavascript Performance Optimisation
Javascript Performance Optimisation
 
jQuery ile ASP.NET Uygulamaları Geliştirme
jQuery ile ASP.NET Uygulamaları GeliştirmejQuery ile ASP.NET Uygulamaları Geliştirme
jQuery ile ASP.NET Uygulamaları Geliştirme
 
Kabuk / bash proglama
Kabuk / bash  proglamaKabuk / bash  proglama
Kabuk / bash proglama
 
Go Programlama Dili - Seminer
Go Programlama Dili - SeminerGo Programlama Dili - Seminer
Go Programlama Dili - Seminer
 
Başarılı Projelerin Anahtarı: Çevik Yazılım Geliştirme Pratikleri
Başarılı Projelerin Anahtarı: Çevik Yazılım Geliştirme PratikleriBaşarılı Projelerin Anahtarı: Çevik Yazılım Geliştirme Pratikleri
Başarılı Projelerin Anahtarı: Çevik Yazılım Geliştirme Pratikleri
 
PostgreSQL DBA Neler Yapar?
PostgreSQL DBA Neler Yapar?PostgreSQL DBA Neler Yapar?
PostgreSQL DBA Neler Yapar?
 

Muhafiz

  • 1. GIT HOOK'LARI İLE KOD KALİTESİNİ KORUMAK VE MUHAFIZ OSMAN YÜKSEL NİSAN'13 - Özgür YAZILIM VE LİNUX günlerİ
  • 2. Neden? GIT HOOK'LARI AlternatİF YÖNTEMLER “YAZARIM LAN BEN BUNU!” MUHAFIZ NASIL KURULUR? RUNNER'LAR AÇIK KAYNAK VE TOPLULUĞUN GÜCÜ SORULAR
  • 3. NEDEN? Daha önce çalıştığımız çoğu yerde kod standartları belirlendi
  • 4. NEDEN? Daha önce çalıştığımız çoğu yerde kod standartları belirlendi Ama hiçbir yerde uygulanmadı
  • 5. NEDEN? Daha önce çalıştığımız çoğu yerde kod standartları belirlendi Ama hiçbir yerde uygulanmadı Production ortamında syntax error var_dump($badwords); console.log yüzünden “patlayan” ödeme sayfası Virgül yüzünden parse edilemeyen JSON
  • 6. NEDEN? Daha önce çalıştığımız çoğu yerde kod standartları belirlendi Ama hiçbir yerde uygulanmadı Production ortamında syntax error var_dump($badwords); console.log yüzünden “patlayan” ödeme sayfası Virgül yüzünden parse edilemeyen JSON “Bunlar Sonsuzdöngü'de olmayacak”
  • 7. NEDEN? Daha önce çalıştığımız çoğu yerde kod standartları belirlendi Ama hiçbir yerde uygulanmadı Production ortamında syntax error var_dump($badwords); console.log yüzünden “patlayan” ödeme sayfası Virgül yüzünden parse edilemeyen JSON “Bunlar Sonsuzdöngü'de olmayacak” Ama bunun için code review'da süre harcamamalı!
  • 8. GİT HOOK'LARI Git, çoğu işlemin öncesinde ve sonrasında “araya işlem sokmanıza” izin veriyor pre-commit pre-receive post-update pre-apply-patch ....
  • 10. ALTERNATİF YÖNTEMLER ARAŞTIRDIK https://github.com/jish/pre-commit'i bulduk İlk başta her şey çok güzel gidiyordu :)
  • 11. ALTERNATİF YÖNTEMLER ARAŞTIRDIK https://github.com/jish/pre-commit'i bulduk İlk başta her şey çok güzel gidiyordu :) Ama bazı sorunlar vardı
  • 12. ALTERNATİF YÖNTEMLER ARAŞTIRDIK https://github.com/jish/pre-commit'i bulduk İlk başta her şey çok güzel gidiyordu :) Ama bazı sorunlar vardı Çalışmıyordu :(
  • 13. ALTERNATİF YÖNTEMLER ARAŞTIRDIK https://github.com/jish/pre-commit'i bulduk İlk başta her şey çok güzel gidiyordu :) Ama bazı sorunlar vardı Çalışmıyordu :(
  • 14. ALTERNATİF YÖNTEMLER ARAŞTIRDIK https://github.com/jish/pre-commit'i bulduk İlk başta her şey çok güzel gidiyordu :) Ama bazı sorunlar vardı Çalışmıyordu :( Ruby ile geliştirilmişti, biz çok Ruby bilmiyorduk Genelde Ruby ile geliştirilen projeler için “Runner”lar vardı Sunucu tarafında çalışmıyordu :(
  • 15. “YAZARIM LAN BEN BUNU!” Bildiğimiz bir dil ile geliştirilmeliydi (PHP?) Sonsuzdöngü'de belirlediğimiz standartları desteklemeliydi Sunucu tarafında da çalışmalıydı Açık kaynak olmalıydı!!1
  • 16. “YAZARIM LAN BEN BUNU!” Bildiğimiz bir dil ile geliştirilmeliydi (PHP?) Sonsuzdöngü'de belirlediğimiz standartları desteklemeliydi Sunucu tarafında da çalışmalıydı Açık kaynak olmalıydı!!1 Oturduk yazdık :/
  • 17. “YAZARIM LAN BEN BUNU!” Bildiğimiz bir dil ile geliştirilmeliydi (PHP?) Sonsuzdöngü'de belirlediğimiz standartları desteklemeliydi Sunucu tarafında da çalışmalıydı Açık kaynak olmalıydı!!1 Oturduk yazdık :/
  • 19. NASIL KURULUR? $ git clone git://github.com/sonsuzdongu/muhafiz.git ~/muhafiz $ cp ~/muhafiz/git-hooks/* /your/project/.git/hooks
  • 20. NASIL KURULUR? $ git clone git://github.com/sonsuzdongu/muhafiz.git ~/muhafiz $ cp ~/muhafiz/git-hooks/* /your/project/.git/hooks $ git config muhafiz.bootstrap-file ~/muhafiz/src/bootstrap.php
  • 21. NASIL KURULUR? $ git clone git://github.com/sonsuzdongu/muhafiz.git ~/muhafiz $ cp ~/muhafiz/git-hooks/* /your/project/.git/hooks $ git config muhafiz.bootstrap-file ~/muhafiz/src/bootstrap.php $ git config muhafiz.active-runners 'phpcs, jshint, consolefoo'
  • 22. RUNNER'LAR Dosya adında veya içeriğinde işlem yapan PHP sınıfları
  • 24. RUNNER'LAR Dosya adında veya içeriğinde işlem yapan PHP sınıfları bom: ByteOrderMark consolefoo: console.log(), console.debug() forbiddenfile: İzin verilmeyen dosyalar. foo.~ gibi jshint: JavaScript check lineend: Unix/Windows Satır sonu phpcsfixer: php-cs-fixer phpcs: PHP Code Sniffer php: Php Syntax Check vardump: var_dump(), print_r()
  • 25. RUNNER'LAR Dosya adında veya içeriğinde işlem yapan PHP sınıfları bom: ByteOrderMark consolefoo: console.log(), console.debug() forbiddenfile: İzin verilmeyen dosyalar. foo.~ gibi jshint: JavaScript check lineend: Unix/Windows Satır sonu phpcsfixer: php-cs-fixer phpcs: PHP Code Sniffer php: Php Syntax Check vardump: var_dump(), print_r() Nasıl çalışıyor bir görelim?
  • 26. AÇIK KAYNAK VE TOPLULUĞUN GÜCÜ Volkan Altan Yeni Runner'lar
  • 27. AÇIK KAYNAK VE TOPLULUĞUN GÜCÜ Volkan Altan Sercan Virlan Yeni Runner'lar Bugfix
  • 28. AÇIK KAYNAK VE TOPLULUĞUN GÜCÜ Volkan Altan Sercan Virlan Yeni Runner'lar Bugfix Adil Ilhan Yeni Runner'lar
  • 29. AÇIK KAYNAK VE TOPLULUĞUN GÜCÜ Volkan Altan Sercan Virlan Yeni Runner'lar Bugfix Adil Ilhan Eser Özvataf Yeni Runner'lar SVN Desteği
  • 30. Sorular ? Teşekkürler http://github.com/yuxel http://twitter.com/yuxel http://yuxel.net