Move OnceMap into its own crate (#946)

## Summary

This is extremely generic (like `WaitMap`), and I want to use it in the
cache.
This commit is contained in:
Charlie Marsh 2024-01-16 23:09:15 -05:00 committed by GitHub
parent 5051b2c004
commit b8fbd529a1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 39 additions and 11 deletions

12
Cargo.lock generated
View file

@ -1922,6 +1922,14 @@ dependencies = [
"memchr",
]
[[package]]
name = "once-map"
version = "0.0.1"
dependencies = [
"rustc-hash",
"waitmap",
]
[[package]]
name = "once_cell"
version = "1.19.0"
@ -2680,6 +2688,7 @@ dependencies = [
"insta",
"install-wheel-rs",
"itertools 0.12.0",
"once-map",
"once_cell",
"owo-colors",
"pep440_rs 0.3.12",
@ -2718,12 +2727,11 @@ version = "0.0.1"
dependencies = [
"anyhow",
"distribution-types",
"once-map",
"pep508_rs",
"puffin-cache",
"puffin-interpreter",
"rustc-hash",
"tokio",
"waitmap",
]
[[package]]

View file

@ -26,6 +26,11 @@ A `venv` replacement to create virtual environments in Rust.
Install built distributions (wheels) into a virtual environment.]
## [once-map](./once-map)
A [`waitmap`](https://github.com/withoutboats/waitmap)-like concurrent hash map for executing tasks
exactly once.
## [pep440-rs](./pep440-rs)
Utilities for interacting with Python version numbers and specifiers.

View file

@ -0,0 +1,17 @@
[package]
name = "once-map"
version = "0.0.1"
edition = { workspace = true }
rust-version = { workspace = true }
homepage = { workspace = true }
documentation = { workspace = true }
repository = { workspace = true }
authors = { workspace = true }
license = { workspace = true }
[lints]
workspace = true
[dependencies]
rustc-hash = { workspace = true }
waitmap = { workspace = true }

View file

@ -17,6 +17,7 @@ cache-key = { path = "../cache-key" }
distribution-filename = { path = "../distribution-filename", features = ["serde"] }
distribution-types = { path = "../distribution-types" }
install-wheel-rs = { path = "../install-wheel-rs" }
once-map = { path = "../once-map" }
pep440_rs = { path = "../pep440-rs", features = ["pubgrub"] }
pep508_rs = { path = "../pep508-rs" }
platform-host = { path = "../platform-host" }
@ -26,9 +27,9 @@ puffin-client = { path = "../puffin-client" }
puffin-distribution = { path = "../puffin-distribution" }
puffin-git = { path = "../puffin-git" }
puffin-interpreter = { path = "../puffin-interpreter" }
puffin-warnings = { path = "../puffin-warnings" }
puffin-normalize = { path = "../puffin-normalize" }
puffin-traits = { path = "../puffin-traits" }
puffin-warnings = { path = "../puffin-warnings" }
pypi-types = { path = "../pypi-types" }
requirements-txt = { path = "../requirements-txt" }

View file

@ -8,11 +8,11 @@ use thiserror::Error;
use url::Url;
use distribution_types::{BuiltDist, PathBuiltDist, PathSourceDist, SourceDist};
use once_map::OnceMap;
use pep440_rs::Version;
use pep508_rs::Requirement;
use puffin_distribution::DistributionDatabaseError;
use puffin_normalize::PackageName;
use puffin_traits::OnceMap;
use crate::candidate_selector::CandidateSelector;
use crate::pubgrub::{PubGrubPackage, PubGrubPython, PubGrubReportFormatter};

View file

@ -12,10 +12,10 @@ use rustc_hash::FxHashMap;
use url::Url;
use distribution_types::{Dist, DistributionMetadata, LocalEditable, Name, PackageId, Verbatim};
use once_map::OnceMap;
use pep440_rs::Version;
use pep508_rs::VerbatimUrl;
use puffin_normalize::{ExtraName, PackageName};
use puffin_traits::OnceMap;
use pypi_types::{Hashes, Metadata21};
use crate::pins::FilePins;

View file

@ -2,8 +2,8 @@ use dashmap::DashMap;
use url::Url;
use distribution_types::PackageId;
use once_map::OnceMap;
use puffin_normalize::PackageName;
use puffin_traits::OnceMap;
use pypi_types::Metadata21;
use crate::version_map::VersionMap;

View file

@ -14,11 +14,10 @@ workspace = true
[dependencies]
distribution-types = { path = "../distribution-types" }
once-map = { path = "../once-map" }
pep508_rs = { path = "../pep508-rs" }
puffin-cache = { path = "../puffin-cache" }
puffin-interpreter = { path = "../puffin-interpreter" }
anyhow = { workspace = true }
rustc-hash = { workspace = true }
tokio = { workspace = true, features = ["sync"] }
waitmap = { workspace = true }

View file

@ -7,13 +7,11 @@ use std::path::{Path, PathBuf};
use anyhow::Result;
use distribution_types::{CachedDist, DistributionId, Resolution};
pub use once_map::OnceMap;
use once_map::OnceMap;
use pep508_rs::Requirement;
use puffin_cache::Cache;
use puffin_interpreter::{Interpreter, Virtualenv};
mod once_map;
/// Avoid cyclic crate dependencies between resolver, installer and builder.
///
/// To resolve the dependencies of a packages, we may need to build one or more source