| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| use crate::paths; |
| use crate::util::{remove_checksums_from_lock, run_cargo_command, without_cargo_config_toml}; |
| use crate::UpdateCommandArgs; |
| use anyhow::{Context, Result}; |
| use std::collections::HashMap; |
| |
| pub fn update(args: UpdateCommandArgs, paths: &paths::ChromiumPaths) -> Result<()> { |
| // Update needs to work with real crates.io, not with our locally vendored |
| // crates. |
| without_cargo_config_toml(paths, || update_impl(args, paths))?; |
| println!("Update successful: run gnrt vendor to download new crate versions."); |
| Ok(()) |
| } |
| |
| fn update_impl(args: UpdateCommandArgs, paths: &paths::ChromiumPaths) -> Result<()> { |
| println!("Updating crates from {}", paths.third_party_cargo_root.display()); |
| |
| run_cargo_command( |
| paths.third_party_cargo_root.into(), |
| "update", |
| args.passthrough, |
| HashMap::new(), |
| ) |
| .context("run_cargo_command")?; |
| |
| // Running cargo commands against actual crates.io will put checksum into |
| // the Cargo.lock file, but we don't generate checksums when we download |
| // the crates. This mismatch causes everything else to fail when cargo is |
| // using our vendor/ directory. So we remove all the checksums from the |
| // lock file. |
| remove_checksums_from_lock(paths.third_party_cargo_root)?; |
| |
| Ok(()) |
| } |