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:
- crates.io: https://crates.io/crates/threeway_merge
- Kode sumber: https://github.com/levish0/threeway-merge-rs
Saya membagikannya karena sepertinya ini juga bisa berguna bagi orang lain!
2 komentar
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%
Saya ingat argumen
gityang digunakan oleh skrip pengujian di WSL berbeda.