Sebastian Thielrefactor53e0ac25 years agoHistory
138 lines · 4.7 KB · Rust
RawDownload
use crate::{    plumbing::lean::options::{self, Args, SubCommands},    shared::lean::prepare,};use anyhow::Result;use git_features::progress::DoOrDiscard;use gitoxide_core::{self as core, OutputFormat};use std::io::{self, stderr, stdout}; pub fn main() -> Result<()> {    let cli: Args = crate::shared::from_env();    git_features::interrupt::init_handler(std::io::stderr());    let thread_limit = cli.threads;    let verbose = cli.verbose;    match cli.subcommand {        SubCommands::RemoteRefList(options::RemoteRefList { protocol, url }) => {            let (_handle, progress) = prepare(verbose, "remote-ref-list", Some(core::remote::refs::PROGRESS_RANGE));            core::remote::refs::list(                protocol,                &url,                DoOrDiscard::from(progress),                core::remote::refs::Context {                    thread_limit,                    format: OutputFormat::Human,                    out: io::stdout(),                },            )        }        SubCommands::PackReceive(options::PackReceive {            protocol,            url,            directory,            refs_directory,        }) => {            let (_handle, progress) = prepare(verbose, "pack-receive", core::pack::receive::PROGRESS_RANGE);            core::pack::receive(                protocol,                &url,                directory,                refs_directory,                DoOrDiscard::from(progress),                core::pack::receive::Context {                    thread_limit,                    format: OutputFormat::Human,                    out: io::stdout(),                },            )        }        SubCommands::IndexFromPack(options::IndexFromPack {            iteration_mode,            pack_path,            directory,        }) => {            let (_handle, progress) = prepare(verbose, "pack-explode", core::pack::index::PROGRESS_RANGE);            core::pack::index::from_pack(                pack_path,                directory,                DoOrDiscard::from(progress),                core::pack::index::Context {                    thread_limit,                    iteration_mode: iteration_mode.unwrap_or_default(),                    format: OutputFormat::Human,                    out: io::stdout(),                },            )        }        SubCommands::PackExplode(options::PackExplode {            pack_path,            sink_compress,            object_path,            verify,            check,            delete_pack,        }) => {            let (_handle, progress) = prepare(verbose, "pack-explode", None);            core::pack::explode::pack_or_pack_index(                pack_path,                object_path,                check.unwrap_or_default(),                progress,                core::pack::explode::Context {                    thread_limit,                    delete_pack,                    sink_compress,                    verify,                },            )        }        SubCommands::PackVerify(options::PackVerify {            path,            statistics,            algorithm,            decode,            re_encode,        }) => {            use self::core::pack::verify;            let (_handle, progress) = prepare(verbose, "pack-verify", None);            core::pack::verify::pack_or_pack_index(                path,                progress,                core::pack::verify::Context {                    output_statistics: if statistics {                        Some(core::OutputFormat::Human)                    } else {                        None                    },                    algorithm: algorithm.unwrap_or(verify::Algorithm::LessTime),                    thread_limit,                    mode: match (decode, re_encode) {                        (true, false) => verify::Mode::Sha1CRC32Decode,                        (true, true) | (false, true) => verify::Mode::Sha1CRC32DecodeEncode,                        (false, false) => verify::Mode::Sha1CRC32,                    },                    out: stdout(),                    err: stderr(),                },            )            .map(|_| ())        }        SubCommands::CommitGraphVerify(options::CommitGraphVerify { path, statistics }) => {            use self::core::commitgraph::verify;             verify::graph_or_file(                path,                verify::Context {                    err: stderr(),                    out: stdout(),                    output_statistics: if statistics {                        Some(core::OutputFormat::Human)                    } else {                        None                    },                },            )            .map(|_| ())        }    }}