#merge #text #merged #base

bin+lib merge3

A simple merge tool for three-way merges

3 unstable releases

0.2.0 Aug 14, 2024
0.1.1 Aug 12, 2024
0.1.0 Apr 14, 2024

#806 in Text processing

Download history 376/week @ 2024-12-07 393/week @ 2024-12-14 352/week @ 2024-12-21 301/week @ 2024-12-28 356/week @ 2025-01-04 211/week @ 2025-01-11 215/week @ 2025-01-18 148/week @ 2025-01-25 608/week @ 2025-02-01 3084/week @ 2025-02-08 2151/week @ 2025-02-15 966/week @ 2025-02-22 4335/week @ 2025-03-01 3287/week @ 2025-03-08 2798/week @ 2025-03-15 1652/week @ 2025-03-22

12,463 downloads per month
Used in 5 crates (via debian-analyzer)

Apache-2.0 and maybe GPL-2.0+

56KB
1.5K SLoC

Merge3

A rust implementation of 3-way merge of texts.

Given BASE, OTHER, THIS, tries to produce a combined text incorporating the changes from both BASE->OTHER and BASE->THIS. All three will typically be sequences of lines.

Usage

From the command-line::


$ echo foo > mine
$ echo bar > base
$ echo blah > other
$ merge3 mine base other > merged
$ cat merged

Or from rust:


use merge3::Merge3;

fn main() {
    let base = vec!["common\n", "base\n"];
    let this = vec!["common\n", "a\n"];
    let other = vec!["common\n", "b\n"];

    let m3 = Merge3::new(&base, &this, &other);

    for line in m3.merge_lines() {
        println!("{}", line);
    }
}

lib.rs:

Merge3

A rust implementation of 3-way merge of texts.

Given BASE, OTHER, THIS, tries to produce a combined text incorporating the changes from both BASE->OTHER and BASE->THIS. All three will typically be sequences of lines.

Example

use merge3::Merge3;

let base = vec!["common\n", "base\n"];
let this = vec!["common\n", "a\n"];
let other = vec!["common\n", "b\n"];

let m3 = Merge3::new(&base, &this, &other);

for line in m3.merge_lines(false, &merge3::StandardMarkers::default()) {
    println!("{}", line);
}

Dependencies

~31–295KB