grep adalah sebuah tool untuk mencari suatu text pada file. Misal kita memiliki 1000 file, jika kita ingin mengetahui file apa saja yang mengandung kata “indonesia”, menggunakan grep kita bisa mengetahuinya dengan mudah.
grep adalah tool yang dijalankan lewat command line atau terminal. grep sudah menjadi bawaan linux, jadi tidak perlu proses instalasi. Ada versi windows tapi karena saya jarang pakai windows untuk koding, saya tidak pernah mencobanya.
Bagi seorang programmer, grep sangat bermanfaat jika kita mengerjakan proyek yang besar, atau proyek dimana tidak kita kerjakan sendiri dari awal, misal karena pakai framework tertentu. Sehingga kita tidak mungkin hapal suatu fitur ditulis di file apa.
Sebagai contoh kasus misal pada odoo terdapat tombol save seperti dibawah ini
Pada komputer saya, odoo 13 comunity terdiri dari 28.909 file atau directory, dengan ukuran 694 MB. Pertanyaanya di file apakah fitur save diatas ditulis ? Perlukah kita membaca satu persatu 28 ribu file atau directory tersebut ?
Ada beberapa opsi atau parameter untuk menjalankan perintah grep. Tetapi saya lebih suka opsi seperti dibawah ini.
grep -Rl 'PATTERN'
Sebelum mengetik perintah grep, pada terminal terlebih dahulu masuk ke directory dimana proyek kita berada.
Opsi -R adalah opsi recursive, artinya grep tidak hanya membaca directory yang saat ini aktif, jika directory yang saat ini aktif memiliki anak, grep akan membaca anak dan cucu directory tersebut sampai directory terakhir.
Opsi -l atau bisa juga ditulis –files-with-matches digunakan untuk menampilkan nama file saja. Secara default jika opsi ini tidak digunakan grep akan menampilkan nama file beserta cuplikan text sesuai kata atau keyword yang kita cari. Selain itu jika di file tersebut kata yang kita cari ada lebih dari satu, grep akan menampilkan semuanya. Sedangkan jika kita menggunakan opsi ini grep hanya akan menampilkan nama file saja dan hanya sekali saja, sehingga terlihat lebih rapi dan mudah dibaca.
‘PATTERN’ adalah kata atau text atau keyword yang akan kita cari. Pattern bisa ditulis apa adanya atau menggunakan regular expression. Pattern harus dibungkus dengan single atau double quote.
Pada contoh kasus tombol save diatas kita perlu tahu pattern atau kata yang bisa kita gunakan sebagai keyword. Karena odoo adalah aplikasi berbasis web maka kita inspect terlebih dahulu pada developer tool google chrome.
Terlihat tombol save pada gambar diatas memiliki class o_form_button_save jadi kita bisa menggunakan class ini sebagai pattern atau keyword. Buka terminal kemudian masuk ke folder dimana proyek odoo kita berada. Karena proyek odoo saya beradi di directory /odoo13/odoo13-server maka saya bisa menggunakan perintah seperti dibawah ini
cd /odoo13/odoo13-server
Kemudian ketik perintah grep dengan text o_form_button_save sebagai keyword seperti pada gambar dibawah ini
Terlihat text o_form_button_save terdapat di 18 file. Sekarang kita bisa mengecek 18 file tersebut untuk melihat apakah fungsi tombol save ada di file tersebut atau tidak, lumayan dari pada mengecek 28 ribu file.
Tetapi dari gambar diatas terlihat juga bahwa text o_form_button_save ada juga di folder test yang tidak dijalankan oleh odoo. Oleh karena itu kita bisa menggunakan opsi –exclude-dir=*test* agar grep tidak menampilkan file yang ada di directory yang mengandung kata test seperti pada gambar dibawah ini.
Sekarang text o_form_button_save hanya ada di 5 file. Karena saya tidak install module hr_expense dan project sekarang saya hanya perlu mengecek file di module sale dan web saja. Karena saya tahu module web adalah module dasar yang pasti di install saat kita membuat database sebelum install module lain, saya akan cek file addons/web/static/src/js/views/form/form_controller.js terlebih dahulu menggunakan fitur find text editor sublime.
Terlihat saat class o_form_button_save di klik maka akan memanggil method _onSave jadi saya akan menguji apakah benar method _onSave ini yang dipanggil saat tombol save diklik dengan cara menambahkan kode console.log seperti pada gambar dibawah ini.
Kemudian saya akan restart service odoo, refresh browser selanjutnya buat transaksi misal sale order dan klik tombol save sambil memonitor console google chrome.
Terlihat kode yang saya tambahkan ditampilkan di console google chrome, berarti benar bahwa file addons/web/static/src/js/views/form/form_controller.js adalah file dimana fungsi tombol save pada odoo ditulis. Terbukti grep sangat bermanfaat, terutama jika kita ingin memahami suatu proyek besar atau framework dengan lebih baik dengan cara membaca source codenya.