diff --git a/cargo-registry-index/lib.rs b/cargo-registry-index/lib.rs index 7440d7f9066..0777a85fbe1 100644 --- a/cargo-registry-index/lib.rs +++ b/cargo-registry-index/lib.rs @@ -5,7 +5,7 @@ extern crate serde; pub mod testing; use anyhow::{anyhow, Context}; -use std::collections::HashMap; +use std::collections::BTreeMap; use std::io::Write; use std::path::{Path, PathBuf}; use std::process::Command; @@ -101,7 +101,7 @@ pub struct Crate { pub vers: String, pub deps: Vec, pub cksum: String, - pub features: HashMap>, + pub features: BTreeMap>, /// This field contains features with new, extended syntax. Specifically, /// namespaced features (`dep:`) and weak dependencies (`pkg?/feat`). /// @@ -112,7 +112,7 @@ pub struct Crate { /// will fail to load due to not being able to parse the new syntax, even /// with a `Cargo.lock` file. #[serde(skip_serializing_if = "Option::is_none")] - pub features2: Option>>, + pub features2: Option>>, pub yanked: Option, #[serde(default)] pub links: Option, diff --git a/src/controllers/krate/publish.rs b/src/controllers/krate/publish.rs index be5f3ac9fdb..259de4366e0 100644 --- a/src/controllers/krate/publish.rs +++ b/src/controllers/krate/publish.rs @@ -3,7 +3,7 @@ use flate2::read::GzDecoder; use hex::ToHex; use sha2::{Digest, Sha256}; -use std::collections::HashMap; +use std::collections::BTreeMap; use std::io::Read; use std::path::Path; use std::sync::Arc; @@ -216,7 +216,7 @@ pub fn publish(req: &mut dyn RequestExt) -> EndpointResult { .uploader() .upload_crate(app.http_client(), tarball, &krate, vers)?; - let (features, features2): (HashMap<_, _>, HashMap<_, _>) = + let (features, features2): (BTreeMap<_, _>, BTreeMap<_, _>) = features.into_iter().partition(|(_k, vals)| { !vals .iter() diff --git a/src/tests/krate/publish.rs b/src/tests/krate/publish.rs index 3146a651353..8103a563287 100644 --- a/src/tests/krate/publish.rs +++ b/src/tests/krate/publish.rs @@ -11,7 +11,7 @@ use diesel::{delete, update, ExpressionMethods, QueryDsl, RunQueryDsl}; use flate2::write::GzEncoder; use flate2::Compression; use http::StatusCode; -use std::collections::HashMap; +use std::collections::{BTreeMap, HashMap}; use std::io::Read; use std::iter::FromIterator; use std::time::Duration; @@ -953,9 +953,9 @@ fn features_version_2() { assert_eq!(crates[0].name, "foo"); assert_eq!(crates[0].deps.len(), 1); assert_eq!(crates[0].v, Some(2)); - let features = HashMap::from_iter([("old_feat".to_string(), vec![])]); + let features = BTreeMap::from_iter([("old_feat".to_string(), vec![])]); assert_eq!(crates[0].features, features); - let features2 = HashMap::from_iter([( + let features2 = BTreeMap::from_iter([( "new_feat".to_string(), vec!["dep:bar".to_string(), "bar?/feat".to_string()], )]);