use clap::Args;
use tokio::runtime::Runtime;
use crate::error::*;
use crate::fmt_dim;
use crate::infoln;
use crate::sess::{Session, SessionIo};
use crate::util::fmt_duration;
#[derive(Args, Debug)]
pub struct CheckoutArgs {
#[arg(long)]
pub force: bool,
}
pub fn run(sess: &Session, args: &CheckoutArgs) -> Result<()> {
run_plain(sess, args.force, &[])
}
pub fn run_plain(sess: &Session, force: bool, update_list: &[String]) -> Result<()> {
let rt = Runtime::new()?;
let io = SessionIo::new(sess);
let start_time = std::time::Instant::now();
let _srcs = rt.block_on(io.sources(force, update_list))?;
let num_dependencies = io.sess.packages().iter().flatten().count();
infoln!(
"{} {} dependencies {}",
fmt_dim!("Checked out"),
num_dependencies,
fmt_dim!(fmt_duration(start_time.elapsed()))
);
Ok(())
}