Skip to content

Commit a7da4a1

Browse files
committed
Use BTreeMap for features to ensure stable sorting
1 parent 981ac9b commit a7da4a1

File tree

6 files changed

+15
-15
lines changed

6 files changed

+15
-15
lines changed

src/downloads_counter.rs

Lines changed: 2 additions & 2 deletions
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

Lines changed: 2 additions & 2 deletions
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::*;
@@ -129,7 +129,7 @@ impl NewVersion {
129129
pub fn new(
130130
crate_id: i32,
131131
num: &semver::Version,
132-
features: &HashMap<String, Vec<String>>,
132+
features: &BTreeMap<String, Vec<String>>,
133133
license: Option<String>,
134134
license_file: Option<&str>,
135135
crate_size: i32,

src/tests/builders/publish.rs

Lines changed: 3 additions & 3 deletions
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

Lines changed: 3 additions & 3 deletions
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,
@@ -37,7 +37,7 @@ impl<'a> VersionBuilder<'a> {
3737
VersionBuilder {
3838
created_at: None,
3939
dependencies: Vec::new(),
40-
features: HashMap::new(),
40+
features: BTreeMap::new(),
4141
license: None,
4242
license_file: None,
4343
num,

src/views/krate_publish.rs

Lines changed: 3 additions & 3 deletions
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

Lines changed: 2 additions & 2 deletions
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)