in src/main.rs [1286:1335]
fn cmd_import(
_out: &Arc<dyn Out>,
cfg: &Config,
sub_args: &ImportArgs,
) -> Result<(), miette::Report> {
let Some(network) = Network::acquire(cfg) else {
return Err(miette!("`cargo vet import` cannot be run while frozen"));
};
// Determine the URL for the import, potentially fetching the registry to
// find it.
let registry_file;
let import_urls = if sub_args.url.is_empty() {
registry_file = tokio::runtime::Handle::current().block_on(fetch_registry(&network))?;
registry_file
.registry
.get(&sub_args.name)
.ok_or_else(|| miette!("no peer named {} found in the registry", &sub_args.name))
.map(|entry| entry.url.clone())?
} else {
sub_args.url.clone()
};
let mut store = Store::acquire_offline(cfg)?;
// Insert a new entry for the new import, or update an existing entry to use
// the newly specified URLs.
store
.config
.imports
.entry(sub_args.name.clone())
.or_default()
.url = import_urls;
// After adding the new entry, go online, this will fetch the new import.
let cache = Cache::acquire(cfg)?;
tokio::runtime::Handle::current().block_on(store.go_online(cfg, &network, &cache, false))?;
// Update the store state, pruning unnecessary exemptions, audits, and imports.
resolver::update_store(cfg, &mut store, |_| resolver::UpdateMode {
search_mode: resolver::SearchMode::PreferFreshImports,
prune_exemptions: true,
prune_non_importable_audits: true,
prune_imports: true,
});
store.commit()?;
Ok(())
}