use crate::compat;
use crate::lock::Lock;
use crate::paths::ProjectLayout;
use crate::yml::Snap;
use anyhow::Result;
pub async fn run() -> Result<()> {
let layout = ProjectLayout::discover(&std::env::current_dir()?)?;
let snap = Snap::from_path(&layout.yml())?;
if !layout.lock().is_file() {
anyhow::bail!("no mc-snap.lock; run `mc-snap install` first");
}
let lock = Lock::from_path(&layout.lock())?;
let reports = compat::find_newer_versions(&snap, &lock).await?;
if reports.is_empty() {
println!("no registry mods to check");
return Ok(());
}
println!(
"newer mod versions available for minecraft {}:",
snap.server.minecraft
);
let mut any = false;
for r in &reports {
if r.newer.is_empty() {
println!(" up-to-date {:<32} {}", r.mod_id, r.current_version);
} else {
any = true;
let preview = r
.newer
.iter()
.take(3)
.cloned()
.collect::<Vec<_>>()
.join(", ");
let extra = if r.newer.len() > 3 {
format!(" (+{} more)", r.newer.len() - 3)
} else {
String::new()
};
println!(
" newer {:<32} {} -> {}{}",
r.mod_id, r.current_version, preview, extra
);
}
}
if any {
println!("\nedit mc-snap.yml to pin a newer version, then `mc-snap install`.");
}
Ok(())
}