Wednesday, April 29, 2015

Bagaimana Membuat Clone Baru dari Project Mercurial Berukuran Besar

Terkadang suatu project mercurial sudah sangat lama, nyaris satu dekade, jumlah history-nya sangat banyak sehingga proses clone sukar dilakukan apalagi jika jaringan terbatas. Mercurial tidak memiliki pause and resume dan bahkan rollback setiap kali gagal sehingga mau tak mau proses clone harus dipecah menjadi beberapa proses pull.

Berikut adalah langkah-langkah memecah proses clone.

1. Buat folder baru tempat project mercurial tersebut akan di-clone.

2. Clone hingga revisi tertentu, baik menggunakan aplikasi seperti TortoiseHg atau menggunakan perintah hg clone.

Sebaiknya gunakan revisi yang cukup kecil namun sebagian source code-nya sudah ada misalnya revisi ke-4.
contoh:

hg clone -r 4 http://bitbucket.org/edwinang/owi

3. Selidiki ada berapa revisi yang dimiliki oleh project mercurial tersebut.

Cara paling mudah adalah menggunakan aplikasi tortoiseHg, dan coba pull semua baik lewat fitur workbench atau fitur synchronize dan lihat ada berapa changeset yang dimiliki project tersebut.

Alternatifnya, jika menggunakan perintah command-line, maka buat agar semua progress terlihat dengan syntax
hg pull --verbose --debug

Perhatikan ketika outputnya mulai menyatakan adding changeset dan perhatikan berapa changeset yang muncul.
Misal, saat menampilkan changeset terakhir layar keluaran menyatakan seperti ini:
changesets :11121 chunks
add changeset 044db2dcc931

Artinya saat ini project-nya memiliki 11121 changeset and changeset terakhir memiliki Node ID  044db2dcc931

Sebenarnya, untuk contoh ini, (sumber bitbucket.org/edwinang/owi di tanggal 28th April 2015) Node ID lengkapnya adalah  044db2dcc931faf11738b5d195e2507c932df058

Jika informasi changeset terakhir terlewat, ketika proses adding manifest, total changeset bisa terlihat.

Misalkan, output-nya menyatakan
manifest: 1085/11121 chunks (9.76%)

Artinya saat output tersebut, aplikasi hg sedang mengunduh manifest untuk changeset ke-1085 dari jumlah total 11121 changeset.

Sebenarnya, berarti ada 11125 revisi (karena saat clone pertama kita di revisi 4).

Setelah mengetahui jumlah total changeset, maka rencanakan berapa kali dan di revisi2 ke berapa saja akan dilakukan pull.

4. Lakukan pull untuk revisi tertentu sesuai rencana
hg pull --verbose --debug -r [nomorrevisi]

5. Lakukan update setelah pull revisi tersebut.
hg update --clean

6. Ulangi langkah keempat hingga semua changeset sukses terunduh.

Jika komponen yang sedang diunduh tampak lama sekali tanpa ada kemajuan, sebaiknya pasang sniffer seperti Wireshark untuk mengendus apakah aplikasi hg menyerah atau masih sedang berusaha mengunduh. Gunakan filter ip address server asal lokasi misalnya filter di Wireshark bisa diatur seperti berikut:
ip.addr == [no].[ip].[add].[ress]
contoh:
 ip.addr == 131.103.20.0/16

Jika karena suatu sebab, unduhan terputus dan transaksi tidak berlanjut dan tak bisa rollback, gunakan mercurial recover
hg recover --verbose --debug

Selamat mengunduh project Mercurial!

Tambahan:
kadang satu project terdiri dari beberapa cabang.

Untuk pull sebuah project, pakai parameter -b , contohnya
hg pull -r [version no] --verbose -- debug -b [branch_name]

Sementara untuk update-nya cukup dengan menambahkan nama cabang tersebut setelah hg update.
hg update [branch_name]

Perintah tadi juga bisa digunakan untuk loncat dari cabang ke cabang lain.

0 comments: