diffdir 0.4.4

deep compare two directories for differences
Documentation
extern crate diffdir;
use diffdir::diffcmp::{DirCmp, CmpResult};
use diffdir::args::Args;

use core::panic;
use atty::Stream;
use clap::Parser;

fn main() {
    let args = Args::parse(); 

    match args.verify() {
        Err(message) => panic!("{}", message),
        Ok(()) => {}
    };

    let ignore_file_patterns = match args.ignore_file {
        Some(file) => Some(Args::parse_ignore_file(file)),
        _ => None
    };

    let merged_patterns = match (ignore_file_patterns, args.ignore_patterns) {
        (Some(mut vec1), Some(vec2)) => {
            vec1.extend(vec2);
            Some(vec1)
        },
        (Some(vec), None) | (None, Some(vec)) => Some(vec),
        (None, None) => None,
    };

    let dir_comparator = DirCmp::new(&args.dir_a, &args.dir_b, &merged_patterns);
    let result: CmpResult  = dir_comparator.compare_directories();
    if !args.quiet {
        let text = if atty::is(Stream::Stdout) {
            result.format_text(!args.no_colors)
        } else {
            result.format_text(false)
        };

        for item in text {
            print!("{}", item);
        }
    }
    if result.are_different() { std::process::exit(42) }
}