10 poin oleh levish 2025-09-05 | 2 komentar | Bagikan ke WhatsApp

Halo 🙂

Ada situasi di proyek di mana saya perlu melakukan 3-way merge untuk perubahan string, dan saya membutuhkan pustaka yang bisa bekerja seperti git merge-file sambil langsung menggabungkan string di memori.

Saya sudah melihat pustaka-pustaka yang ada, tetapi:

  • harus menggunakan file sementara, atau
  • tidak menangani konflik dengan cara yang sama seperti Git, atau
  • sering kali tidak mendukung strategi merge yang saya inginkan.

Karena itu, pada akhirnya saya menulis binding Rust untuk xdiff milik libgit2 (kode C, sama seperti yang digunakan di internal Git).

use threeway_merge::{merge_strings, MergeOptions};  
  
let result = merge_strings(base, ours, theirs, &MergeOptions::default())?;  

Fitur:

  • Mendukung semua algoritme merge Git (Myers, Patience, Histogram, dll.)
  • Mendukung gaya konflik (normal, diff3, zdiff3)
  • Bisa otomatis memprioritaskan salah satu sisi, atau menggabungkan perubahan dengan strategi union
  • Berperilaku 100% identik dengan pengujian git merge-file

Tautan:

Saya membagikannya karena sepertinya ini juga bisa berguna bagi orang lain!

2 komentar

 
jamiecha 2025-09-06

Proyek yang keren! Kodenya rapi, jadi sepertinya ini bisa menjadi contoh yang sangat bagus untuk dihubungkan lewat FFI.
Tapi saat saya menjalankan cargo test, hasilnya gagal. Apa mungkin karena saya memakai Ubuntu di WSL2?

=== COMPREHENSIVE TEST RESULTS ===
Scenarios tested: 12
Total test combinations: 576
Passing tests: 96
Failing tests: 480
Success rate: 16.7%

 
levish 2025-09-06

Saya ingat argumen git yang digunakan oleh skrip pengujian di WSL berbeda.