Friday, May 04, 2007

Aritmetika untuk nilai pecahan pada shell script

Dengan menggunakan bash script kita bisa melakukan operasi aritetik dengan menggunakan $(()), misalnya $(( 1 / 3)) yaitu pembagian 1 dengan 3. Tapi yang dihasilkan adalah 0 kenapa karena hasil dari perintah tersebut adalah integer. Kita tidak bisa menggunakan ekspresi seperti ini $(( 1.0 / 3.0 )).

Menggunakan perintah exp kita juga akan mendapati hal yang sama. Cobalah perintah berikut

exp 1 / 3

hasilnya yang akan didapat adalah 0.

Sepertinya tidak ada cara dalam bash scripting untuk melakukan operasi aretmetik yang melibatkan nilai pecahan (floating point number atau rational number). Solusinya adalah menggunakan perintah bc dengan menspesifikasikan nilai skala (scale) yaitu jumlah bilangan pecahan yang akan muncul. Contoh berikut akan menghasilkan nilai 1.33

echo "scale=2;4/3" | bc


jika scale kita ganti nilainya menjadi 5, perintah diatas akan menghasilkan 1.33333

Tuesday, May 01, 2007

Bagaimana CVS menyimpan informasi tag atau branch yang kita buat?

CVS memiliki penomoran tersendiri untuk versi suatu file yang ada di repository. Setiap kali kita membuat tag (yang menandakan suatu versi atau revisi) CVS akan menyimpan informasi tag tersebut dalam setiap file. Tag tersebut berasosiasi dengan penomoran file (versi file).

Bagaimana CVS membedakan tag biasa dengan branch? Versi file yang berasosiasi dengan sebuah branch memiliki angka nol pada angka kedua terakhir. Contoh dibawah ini adalah informasi sebuah file yang didapat dengan perintah "cvs -q log -h"


RCS file: /repository/cvsroot/testproj/test.txt,v
Working file: test.txt
head: 1.1
branch: 1.1.1
locks: strict
access list:
symbolic names:
testproj_v_1_0: 1.1.1.1
testproj_1_0: 1.1.1.1.0.2
test_version_0: 1.1.1.1
tag_1 : 1.1.1
keyword substitution: kv
total revisions: 2
=============================================================================


Kita lihat pada simbolic namec terdapat beberapa tag. Tag yang merupakan branch adalah "testproj_1_0" karena memiliki angka 0 pada posisi kedua dari kanan.

Untuk mendapatkan list branch dari suatu project, bisa dilakukan dengan perintah berikut:

cvs -q log -h | perl -e "while(<>){print if /\s+([^:]+):\s(\d+\.)*0\.(\d+)/ }"

Followers