Pendahuluan
Tujuan pembuatan patch[1] adalah untuk memperbaiki masalah yang ada pada software, misalnya bugs, celah ataupun untuk memperbaiki performa software. Salah satu cara membuat patch adalah dengan menggunakan diff[2]. Pada tutorial singkat kali ini, akan dibahas cara membuat patch menggunakan diff serta cara mengaplikasikan patch yang sudah dibuat.
Langkah-langkah:
$ tar -xzf tilda-0.9.6.tar.gz
$ mv tilda-0.9.6 tilda-0.9.6-orig
$ tar -xzf tilda-0.9.6.tar.gz
$ grep Tilda tilda-0.9.6/src/*.c
tilda-0.9.6/src/configsys.c: CFG_STR("title", "Tilda", CFGF_NONE),
tilda-0.9.6/src/key_converter.c: * This is an extremely simple converter for the Tilda-0.9.4 and less
tilda-0.9.6/src/key_converter.c: * key format to the new Tilda-0.9.5 key format, which is the standard
tilda-0.9.6/src/tilda.c: { "hidden", 'h', 0, G_OPTION_ARG_NONE, &hidden, _("Start Tilda hidden"), NULL },
tilda-0.9.6/src/tilda_window.c: label = gtk_label_new ("Tilda");
tilda-0.9.6/src/wizard.c: window_title = g_strdup_printf ("Tilda %d Config", ltw->instance);
$ sed -i 's/Tilda/shell/' tilda-0.9.6/src/configsys.c
$ sed -i 's/Tilda/shell/' tilda-0.9.6/src/tilda_window.c
$ diff -ru tilda-0.9.6-orig tilda-0.9.6 > tilda_title.diff
$ cat tilda_title.diff
diff -ru tilda-0.9.6-orig/src/configsys.c tilda-0.9.6/src/configsys.c
--- tilda-0.9.6-orig/src/configsys.c 2007-12-11 23:02:40.000000000 +0700
+++ tilda-0.9.6/src/configsys.c 2012-01-15 15:01:09.000000076 +0700
@@ -25,7 +25,7 @@
CFG_STR("command", "", CFGF_NONE),
CFG_STR("font", "Monospace 13", CFGF_NONE),
CFG_STR("key", NULL, CFGF_NONE),
- CFG_STR("title", "Tilda", CFGF_NONE),
+ CFG_STR("title", "shell", CFGF_NONE),
CFG_STR("background_color", "white", CFGF_NONE),
CFG_STR("working_dir", NULL, CFGF_NONE),
CFG_STR("web_browser", "firefox", CFGF_NONE),
diff -ru tilda-0.9.6-orig/src/tilda_window.c tilda-0.9.6/src/tilda_window.c
--- tilda-0.9.6-orig/src/tilda_window.c 2008-01-18 05:07:39.000000000 +0700
+++ tilda-0.9.6/src/tilda_window.c 2012-01-15 15:01:20.903000078 +0700
@@ -482,7 +482,7 @@
}
/* Create page and append to notebook */
- label = gtk_label_new ("Tilda");
+ label = gtk_label_new ("shell");
/* Strangely enough, prepend puts pages on the end */
index = gtk_notebook_prepend_page (GTK_NOTEBOOK(tw->notebook), tt->hbox, label);
gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK(tw->notebook), tt->hbox, TRUE, TRUE, GTK_PACK_END);
$
$ rm -rf tilda-0.9.6 tilda-0.9.6-orig/
$ tar -xzf tilda-0.9.6.tar.gz
$ patch --verbose -p0 < tilda_title.diff
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff -ru tilda-0.9.6-orig/src/configsys.c tilda-0.9.6/src/configsys.c
|--- tilda-0.9.6-orig/src/configsys.c 2007-12-11 23:02:40.000000000 +0700
|+++ tilda-0.9.6/src/configsys.c 2012-01-15 15:01:09.000000076 +0700
--------------------------
Patching file tilda-0.9.6/src/configsys.c using Plan A...
Hunk #1 succeeded at 25.
Hmm... The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff -ru tilda-0.9.6-orig/src/tilda_window.c tilda-0.9.6/src/tilda_window.c
|--- tilda-0.9.6-orig/src/tilda_window.c 2008-01-18 05:07:39.000000000 +0700
|+++ tilda-0.9.6/src/tilda_window.c 2012-01-15 15:01:20.903000078 +0700
--------------------------
Patching file tilda-0.9.6/src/tilda_window.c using Plan A...
Hunk #1 succeeded at 482.
done
$
Setelah proses patch berhasil dilakukan, kita tinggal melakukan kompilasi seperti biasa. Selain itu, file "tilda_title.diff" tadi bisa disebarkan agar orang lain bisa melakukan patch juga. Nah, sekian dulu tutorial singkat kali ini, semoga bermanfaat.
Referensi:
[1] http://en.wikipedia.org/wiki/Patch_(computing)
[2] http://en.wikipedia.org/wiki/Diff
[3] http://tilda.sourceforge.net/tildadoc.php
[4] http://en.wikipedia.org/wiki/Diff#Unified_format
Tujuan pembuatan patch[1] adalah untuk memperbaiki masalah yang ada pada software, misalnya bugs, celah ataupun untuk memperbaiki performa software. Salah satu cara membuat patch adalah dengan menggunakan diff[2]. Pada tutorial singkat kali ini, akan dibahas cara membuat patch menggunakan diff serta cara mengaplikasikan patch yang sudah dibuat.
Langkah-langkah:
- Sebagai contoh kali ini, kita akan membuat patch untuk aplikasi tilda[3] untuk mengubah titlenya dari "Tilda" menjadi "shell". Pertama-tama, ekstrak source code tilda ke dalam dua direktori:
$ tar -xzf tilda-0.9.6.tar.gz
$ mv tilda-0.9.6 tilda-0.9.6-orig
$ tar -xzf tilda-0.9.6.tar.gz
- Dari langkah di atas, terdapat 2 direktori yaitu "tilda-0.9.6-orig" dan "tilda-0.9.6". Kita akan mengubah file yang ada pada direktori "tilda-0.9.6" lalu membandingkan dengan yang original. Sekarang, kita mencari title yang akan diganti pada sub direktori "tilda-0.9.6/src" menggunakan perintah "grep"
$ grep Tilda tilda-0.9.6/src/*.c
tilda-0.9.6/src/configsys.c: CFG_STR("title", "Tilda", CFGF_NONE),
tilda-0.9.6/src/key_converter.c: * This is an extremely simple converter for the Tilda-0.9.4 and less
tilda-0.9.6/src/key_converter.c: * key format to the new Tilda-0.9.5 key format, which is the standard
tilda-0.9.6/src/tilda.c: { "hidden", 'h', 0, G_OPTION_ARG_NONE, &hidden, _("Start Tilda hidden"), NULL },
tilda-0.9.6/src/tilda_window.c: label = gtk_label_new ("Tilda");
tilda-0.9.6/src/wizard.c: window_title = g_strdup_printf ("Tilda %d Config", ltw->instance);
- Yang akan kita ubah adalah pada file "configsys.c" dan "tilda_window.c". kita cukup menggunakan perintah "sed" untuk mengubahnya.
$ sed -i 's/Tilda/shell/' tilda-0.9.6/src/configsys.c
$ sed -i 's/Tilda/shell/' tilda-0.9.6/src/tilda_window.c
- Langkah berikutnya adalah yang utama yaitu membuat patch menggunakan diff. Kita akan menggunakan opsi "-u" untuk membuat unified diff[4]. Opsi ini umum digunakan untuk membuat patch pada proyek-proyek open source. Caranya adalah seperti ini:
$ diff -ru tilda-0.9.6-orig tilda-0.9.6 > tilda_title.diff
- Opsi "-r" kita gunakan untuk melakukan proses diff secara rekursif ke dalam subdirektori. Adapun outputnya nanti akan ditulis ke file "tilda_title.diff". Hasilnya seperti ini:
$ cat tilda_title.diff
diff -ru tilda-0.9.6-orig/src/configsys.c tilda-0.9.6/src/configsys.c
--- tilda-0.9.6-orig/src/configsys.c 2007-12-11 23:02:40.000000000 +0700
+++ tilda-0.9.6/src/configsys.c 2012-01-15 15:01:09.000000076 +0700
@@ -25,7 +25,7 @@
CFG_STR("command", "", CFGF_NONE),
CFG_STR("font", "Monospace 13", CFGF_NONE),
CFG_STR("key", NULL, CFGF_NONE),
- CFG_STR("title", "Tilda", CFGF_NONE),
+ CFG_STR("title", "shell", CFGF_NONE),
CFG_STR("background_color", "white", CFGF_NONE),
CFG_STR("working_dir", NULL, CFGF_NONE),
CFG_STR("web_browser", "firefox", CFGF_NONE),
diff -ru tilda-0.9.6-orig/src/tilda_window.c tilda-0.9.6/src/tilda_window.c
--- tilda-0.9.6-orig/src/tilda_window.c 2008-01-18 05:07:39.000000000 +0700
+++ tilda-0.9.6/src/tilda_window.c 2012-01-15 15:01:20.903000078 +0700
@@ -482,7 +482,7 @@
}
/* Create page and append to notebook */
- label = gtk_label_new ("Tilda");
+ label = gtk_label_new ("shell");
/* Strangely enough, prepend puts pages on the end */
index = gtk_notebook_prepend_page (GTK_NOTEBOOK(tw->notebook), tt->hbox, label);
gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK(tw->notebook), tt->hbox, TRUE, TRUE, GTK_PACK_END);
$
- Nah, untuk contoh penggunaannya, terlebih dahulu hapus ke-2 direktori tilda tadi, kemudian ekstrak ulang source tilda yang asli:
$ rm -rf tilda-0.9.6 tilda-0.9.6-orig/
$ tar -xzf tilda-0.9.6.tar.gz
- Gunakan perintah "patch" dengan menggunakan input file "tilda_title.diff". Untuk mengetahui apa saja yang dilakukan oleh perintah "patch", kita bisa menggunakan opsi "--verbose". Opsi "-p0" diberikan untuk menentukan di direktori mana kita menjalankan patch (silakan lihat man page patch). Nah, caranya adalah sebagai berikut:
$ patch --verbose -p0 < tilda_title.diff
Hmm... Looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff -ru tilda-0.9.6-orig/src/configsys.c tilda-0.9.6/src/configsys.c
|--- tilda-0.9.6-orig/src/configsys.c 2007-12-11 23:02:40.000000000 +0700
|+++ tilda-0.9.6/src/configsys.c 2012-01-15 15:01:09.000000076 +0700
--------------------------
Patching file tilda-0.9.6/src/configsys.c using Plan A...
Hunk #1 succeeded at 25.
Hmm... The next patch looks like a unified diff to me...
The text leading up to this was:
--------------------------
|diff -ru tilda-0.9.6-orig/src/tilda_window.c tilda-0.9.6/src/tilda_window.c
|--- tilda-0.9.6-orig/src/tilda_window.c 2008-01-18 05:07:39.000000000 +0700
|+++ tilda-0.9.6/src/tilda_window.c 2012-01-15 15:01:20.903000078 +0700
--------------------------
Patching file tilda-0.9.6/src/tilda_window.c using Plan A...
Hunk #1 succeeded at 482.
done
$
Setelah proses patch berhasil dilakukan, kita tinggal melakukan kompilasi seperti biasa. Selain itu, file "tilda_title.diff" tadi bisa disebarkan agar orang lain bisa melakukan patch juga. Nah, sekian dulu tutorial singkat kali ini, semoga bermanfaat.
Referensi:
[1] http://en.wikipedia.org/wiki/Patch_(computing)
[2] http://en.wikipedia.org/wiki/Diff
[3] http://tilda.sourceforge.net/tildadoc.php
[4] http://en.wikipedia.org/wiki/Diff#Unified_format
0 comments:
Post a Comment