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(())}
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(())
}