Sebastian Thielrefactor53e0ac25 years agoHistory
175 lines · 5.2 KB · Rust
RawDownload
use anyhow::Result;use clap::Clap;use gitoxide_core as core; use crate::{    plumbing::pretty::options::{Args, Subcommands},    shared::pretty::prepare_and_run,};use gitoxide_core::pack::verify; pub fn main() -> Result<()> {    let Args {        threads: thread_limit,        verbose,        progress,        progress_keep_open,        format,        cmd,    } = Args::parse();    git_features::interrupt::init_handler(std::io::stderr());     match cmd {        Subcommands::PackReceive {            protocol,            url,            directory,            refs_directory,        } => prepare_and_run(            "pack-receive",            verbose,            progress,            progress_keep_open,            core::pack::receive::PROGRESS_RANGE,            move |progress, out, _err| {                core::pack::receive(                    protocol,                    &url,                    directory,                    refs_directory,                    git_features::progress::DoOrDiscard::from(progress),                    core::pack::receive::Context {                        thread_limit,                        format,                        out,                    },                )            },        ),        Subcommands::RemoteRefList { protocol, url } => prepare_and_run(            "remote-ref-list",            verbose,            progress,            progress_keep_open,            core::remote::refs::PROGRESS_RANGE,            move |progress, out, _err| {                core::remote::refs::list(                    protocol,                    &url,                    git_features::progress::DoOrDiscard::from(progress),                    core::remote::refs::Context {                        thread_limit,                        format,                        out,                    },                )            },        ),        Subcommands::PackIndexFromData {            iteration_mode,            pack_path,            directory,        } => prepare_and_run(            "pack-index-from-data",            verbose,            progress,            progress_keep_open,            core::pack::index::PROGRESS_RANGE,            move |progress, out, _err| {                core::pack::index::from_pack(                    pack_path,                    directory,                    git_features::progress::DoOrDiscard::from(progress),                    core::pack::index::Context {                        thread_limit,                        iteration_mode,                        format,                        out,                    },                )            },        ),        Subcommands::PackExplode {            check,            sink_compress,            delete_pack,            pack_path,            object_path,            verify,        } => prepare_and_run(            "pack-explode",            verbose,            progress,            progress_keep_open,            None,            move |progress, _out, _err| {                core::pack::explode::pack_or_pack_index(                    pack_path,                    object_path,                    check,                    progress,                    core::pack::explode::Context {                        thread_limit,                        delete_pack,                        sink_compress,                        verify,                    },                )            },        ),        Subcommands::PackVerify {            path,            algorithm,            decode,            re_encode,            statistics,        } => prepare_and_run(            "pack-verify",            verbose,            progress,            progress_keep_open,            None,            move |progress, out, err| {                let mode = match (decode, re_encode) {                    (true, false) => verify::Mode::Sha1CRC32Decode,                    (true, true) | (false, true) => verify::Mode::Sha1CRC32DecodeEncode,                    (false, false) => verify::Mode::Sha1CRC32,                };                let output_statistics = if statistics { Some(format) } else { None };                verify::pack_or_pack_index(                    path,                    progress,                    verify::Context {                        output_statistics,                        thread_limit,                        algorithm,                        mode,                        out,                        err,                    },                )            },        )        .map(|_| ()),        Subcommands::CommitGraphVerify { path, statistics } => prepare_and_run(            "commit-graph-verify",            verbose,            progress,            progress_keep_open,            None,            move |_progress, out, err| {                let output_statistics = if statistics { Some(format) } else { None };                core::commitgraph::verify::graph_or_file(                    path,                    core::commitgraph::verify::Context {                        err,                        out,                        output_statistics,                    },                )            },        )        .map(|_| ()),    }?;    Ok(())}