1 unstable release

0.1.0 Feb 18, 2023

#1212 in Filesystem

Download history 5/week @ 2024-01-06 18/week @ 2024-01-13 2/week @ 2024-01-20 4/week @ 2024-02-10 59/week @ 2024-02-17 39/week @ 2024-02-24 17/week @ 2024-03-02 13/week @ 2024-03-09 55/week @ 2024-03-16 38/week @ 2024-03-23

128 downloads per month

Apache-2.0

44KB
945 lines

dir-cmp

This Rust library aims to provide convient functions to compare to two file trees.

Library

Usage

    //define options
    let diff_options = Options {
        ignore_left_only: false,
        ignore_right_only: false,
        filter: None,
        ignore_equal: false,
        recursive: true,
    };

    //get dirs to compare
    let left_dir = Path::new("./foo");
    let right_dir = Path::new("./bar");

    //compare
    let result = compare_dirs(&left_dir, &right_dir, diff_options);

Filter

In order blacklist(exclude) or whitelist (include) any folder or file names, a filter can be added to the compare options. A filter consists of a list of regular expressions.

    // define filter to ignore ".git" directory
    let regex = Regex::new(r"\.git$").unwrap();
    let filter = Filter::Exclude(vec![regex]);
    
    //define options
    let diff_options = Options {
        ignore_left_only: false,
        ignore_right_only: false,
        filter: Some(filter),
        ignore_equal: false,
        recursive: true,
    };

    //get dirs to compare
    let left_dir = Path::new("./foo");
    let right_dir = Path::new("./bar");

    //compare
    let result = compare_dirs(&left_dir, &right_dir, diff_options);

Full vs Light

The compare_dirs function is implemented in two flavors: full and light. The difference is that full::compare_dirs compares also file contents while light::compare_dirs only compares names / pathes.

Cli

The lib can be tested using the Cli provided in this repo. It was inspired by diff, but only covers the basic functionality.

Usage

    dir-cmp -h
    dir-cmp -r <LEFT> <RIGHT>

Performance

To evaluate the speed of this library, we can compare it against diff.

One simple approach is to simply compare this repo against itself:

    time diff -r . . 
        // 0.01s user 0.19s system 99% cpu 0.209 total
    time dir-cmp -r . . 
        // 0.26s user 0.46s system 75% cpu 0.945 total

The result clearly shows that there is a lot of room for improvement.

Dependencies

~4.5–6.5MB
~111K SLoC