Skip to content

Commit 7036f3e

Browse files
authored
Merge pull request #5089 from Turbo87/index-order
index: Use/Allow alphabetic ordering of features and dependencies
2 parents 17fef4c + 7314e5b commit 7036f3e

File tree

9 files changed

+25
-25
lines changed

9 files changed

+25
-25
lines changed

cargo-registry-index/lib.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ extern crate serde;
55
pub mod testing;
66

77
use anyhow::{anyhow, Context};
8-
use std::collections::HashMap;
8+
use std::collections::BTreeMap;
99
use std::io::Write;
1010
use std::path::{Path, PathBuf};
1111
use std::process::Command;
@@ -101,7 +101,7 @@ pub struct Crate {
101101
pub vers: String,
102102
pub deps: Vec<Dependency>,
103103
pub cksum: String,
104-
pub features: HashMap<String, Vec<String>>,
104+
pub features: BTreeMap<String, Vec<String>>,
105105
/// This field contains features with new, extended syntax. Specifically,
106106
/// namespaced features (`dep:`) and weak dependencies (`pkg?/feat`).
107107
///
@@ -112,7 +112,7 @@ pub struct Crate {
112112
/// will fail to load due to not being able to parse the new syntax, even
113113
/// with a `Cargo.lock` file.
114114
#[serde(skip_serializing_if = "Option::is_none")]
115-
pub features2: Option<HashMap<String, Vec<String>>>,
115+
pub features2: Option<BTreeMap<String, Vec<String>>>,
116116
pub yanked: Option<bool>,
117117
#[serde(default)]
118118
pub links: Option<String>,
@@ -139,7 +139,7 @@ pub struct Crate {
139139
pub v: Option<u32>,
140140
}
141141

142-
#[derive(Serialize, Deserialize, Debug)]
142+
#[derive(Serialize, Deserialize, Debug, PartialEq, PartialOrd, Ord, Eq)]
143143
pub struct Dependency {
144144
pub name: String,
145145
pub req: String,
@@ -152,7 +152,7 @@ pub struct Dependency {
152152
pub package: Option<String>,
153153
}
154154

155-
#[derive(Copy, Clone, Serialize, Deserialize, Debug)]
155+
#[derive(Copy, Clone, Serialize, Deserialize, Debug, PartialEq, PartialOrd, Ord, Eq)]
156156
#[serde(rename_all = "lowercase")]
157157
pub enum DependencyKind {
158158
Normal,

src/controllers/krate/publish.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
use flate2::read::GzDecoder;
44
use hex::ToHex;
55
use sha2::{Digest, Sha256};
6-
use std::collections::HashMap;
6+
use std::collections::BTreeMap;
77
use std::io::Read;
88
use std::path::Path;
99
use std::sync::Arc;
@@ -216,7 +216,7 @@ pub fn publish(req: &mut dyn RequestExt) -> EndpointResult {
216216
.uploader()
217217
.upload_crate(app.http_client(), tarball, &krate, vers)?;
218218

219-
let (features, features2): (HashMap<_, _>, HashMap<_, _>) =
219+
let (features, features2): (BTreeMap<_, _>, BTreeMap<_, _>) =
220220
features.into_iter().partition(|(_k, vals)| {
221221
!vals
222222
.iter()

src/downloads_counter.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ mod tests {
247247
use crate::models::{Crate, NewCrate, NewUser, NewVersion, User};
248248
use diesel::PgConnection;
249249
use semver::Version;
250-
use std::collections::HashMap;
250+
use std::collections::BTreeMap;
251251

252252
#[test]
253253
fn test_increment_and_persist_all() {
@@ -452,7 +452,7 @@ mod tests {
452452
let version = NewVersion::new(
453453
self.krate.id,
454454
&Version::parse(&format!("{}.0.0", self.next_version)).unwrap(),
455-
&HashMap::new(),
455+
&BTreeMap::new(),
456456
None,
457457
None,
458458
0,

src/models/version.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::collections::HashMap;
1+
use std::collections::BTreeMap;
22

33
use chrono::NaiveDateTime;
44
use diesel::prelude::*;
@@ -127,7 +127,7 @@ impl NewVersion {
127127
pub fn new(
128128
crate_id: i32,
129129
num: &semver::Version,
130-
features: &HashMap<String, Vec<String>>,
130+
features: &BTreeMap<String, Vec<String>>,
131131
license: Option<String>,
132132
license_file: Option<&str>,
133133
crate_size: i32,

src/tests/builders/publish.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use cargo_registry::views::krate_publish as u;
2-
use std::{collections::HashMap, io::Read};
2+
use std::{collections::BTreeMap, collections::HashMap, io::Read};
33

44
use flate2::{write::GzEncoder, Compression};
55
use once_cell::sync::Lazy;
@@ -36,7 +36,7 @@ pub struct PublishBuilder {
3636
readme: Option<String>,
3737
tarball: Vec<u8>,
3838
version: semver::Version,
39-
features: HashMap<u::EncodableFeatureName, Vec<u::EncodableFeature>>,
39+
features: BTreeMap<u::EncodableFeatureName, Vec<u::EncodableFeature>>,
4040
}
4141

4242
impl PublishBuilder {
@@ -56,7 +56,7 @@ impl PublishBuilder {
5656
readme: None,
5757
tarball: EMPTY_TARBALL_BYTES.to_vec(),
5858
version: semver::Version::parse("1.0.0").unwrap(),
59-
features: HashMap::new(),
59+
features: BTreeMap::new(),
6060
}
6161
}
6262

src/tests/builders/version.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use cargo_registry::{
33
schema::{dependencies, versions},
44
util::errors::AppResult,
55
};
6-
use std::collections::HashMap;
6+
use std::collections::BTreeMap;
77

88
use chrono::NaiveDateTime;
99
use diesel::prelude::*;
@@ -12,7 +12,7 @@ use diesel::prelude::*;
1212
pub struct VersionBuilder<'a> {
1313
created_at: Option<NaiveDateTime>,
1414
dependencies: Vec<(i32, Option<&'static str>)>,
15-
features: HashMap<String, Vec<String>>,
15+
features: BTreeMap<String, Vec<String>>,
1616
license: Option<&'a str>,
1717
license_file: Option<&'a str>,
1818
num: semver::Version,
@@ -36,7 +36,7 @@ impl<'a> VersionBuilder<'a> {
3636
VersionBuilder {
3737
created_at: None,
3838
dependencies: Vec::new(),
39-
features: HashMap::new(),
39+
features: BTreeMap::new(),
4040
license: None,
4141
license_file: None,
4242
num,

src/tests/krate/publish.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use diesel::{delete, update, ExpressionMethods, QueryDsl, RunQueryDsl};
1111
use flate2::write::GzEncoder;
1212
use flate2::Compression;
1313
use http::StatusCode;
14-
use std::collections::HashMap;
14+
use std::collections::{BTreeMap, HashMap};
1515
use std::io::Read;
1616
use std::iter::FromIterator;
1717
use std::time::Duration;
@@ -953,9 +953,9 @@ fn features_version_2() {
953953
assert_eq!(crates[0].name, "foo");
954954
assert_eq!(crates[0].deps.len(), 1);
955955
assert_eq!(crates[0].v, Some(2));
956-
let features = HashMap::from_iter([("old_feat".to_string(), vec![])]);
956+
let features = BTreeMap::from_iter([("old_feat".to_string(), vec![])]);
957957
assert_eq!(crates[0].features, features);
958-
let features2 = HashMap::from_iter([(
958+
let features2 = BTreeMap::from_iter([(
959959
"new_feat".to_string(),
960960
vec!["dep:bar".to_string(), "bar?/feat".to_string()],
961961
)]);

src/views/krate_publish.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//! and manages the serialising and deserialising of this information
33
//! to and from structs. The serlializing is only utilised in
44
//! integration tests.
5-
use std::collections::HashMap;
5+
use std::collections::{BTreeMap, HashMap};
66

77
use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
88

@@ -17,7 +17,7 @@ pub struct EncodableCrateUpload {
1717
pub name: EncodableCrateName,
1818
pub vers: EncodableCrateVersion,
1919
pub deps: Vec<EncodableCrateDependency>,
20-
pub features: HashMap<EncodableFeatureName, Vec<EncodableFeature>>,
20+
pub features: BTreeMap<EncodableFeatureName, Vec<EncodableFeature>>,
2121
pub description: Option<String>,
2222
pub homepage: Option<String>,
2323
pub documentation: Option<String>,
@@ -53,7 +53,7 @@ pub struct EncodableCategoryList(pub Vec<EncodableCategory>);
5353
pub struct EncodableCategory(pub String);
5454
#[derive(Serialize, Debug, Deref)]
5555
pub struct EncodableFeature(pub String);
56-
#[derive(PartialEq, Eq, Hash, Serialize, Debug, Deref)]
56+
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Debug, Deref)]
5757
pub struct EncodableFeatureName(pub String);
5858

5959
#[derive(Serialize, Deserialize, Debug)]

src/worker/update_downloads.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ mod test {
8585
use super::*;
8686
use crate::email::Emails;
8787
use crate::models::{Crate, NewCrate, NewUser, NewVersion, User, Version};
88-
use std::collections::HashMap;
88+
use std::collections::BTreeMap;
8989

9090
fn user(conn: &PgConnection) -> User {
9191
NewUser::new(2, "login", None, None, "access_token")
@@ -103,7 +103,7 @@ mod test {
103103
let version = NewVersion::new(
104104
krate.id,
105105
&semver::Version::parse("1.0.0").unwrap(),
106-
&HashMap::new(),
106+
&BTreeMap::new(),
107107
None,
108108
None,
109109
0,

0 commit comments

Comments
 (0)