mirror of
https://github.com/astral-sh/uv.git
synced 2025-08-03 02:22:19 +00:00

When building only a single crate in the workspace to run its tests, we often recompile a lot of other, unrelated crates. Whenever cargo has a different set of crate features, it needs to recompile. By moving some features (non-exhaustive for now) to the workspace level, we always activate them an avoid recompiling. The cargo docs mismatch the behavior of cargo around default-deps, so I filed that upstream and left most `default-features` mismatches: https://github.com/rust-lang/cargo/issues/14841. Reference script: ```python import tomllib from collections import defaultdict from pathlib import Path uv = Path("/home/konsti/projects/uv") skip_list = ["uv-trampoline", "uv-dev", "uv-performance-flate2-backend", "uv-performance-memory-allocator"] root_feature_map = defaultdict(set) root_default_features = defaultdict(bool) cargo_toml = tomllib.loads(uv.joinpath("Cargo.toml").read_text()) for dep, declaration in cargo_toml["workspace"]["dependencies"].items(): root_default_features[dep] = root_default_features[dep] or declaration.get("default-features", True) root_feature_map[dep].update(declaration.get("features", [])) feature_map = defaultdict(set) default_features = defaultdict(bool) for crate in uv.joinpath("crates").iterdir(): if crate.name in skip_list: continue if not crate.joinpath("Cargo.toml").is_file(): continue cargo_toml = tomllib.loads(crate.joinpath("Cargo.toml").read_text()) for dep, declaration in cargo_toml.get("dependencies", {}).items(): # If any item uses default features, they are used everywhere default_features[dep] = default_features[dep] or declaration.get("default-features", True) feature_map[dep].update(declaration.get("features", [])) for dep, features in sorted(feature_map.items()): features = features - root_feature_map.get(dep, set()) if not features and default_features[dep] == root_default_features[dep]: continue print(dep, default_features[dep], sorted(features)) ```
78 lines
2.4 KiB
TOML
78 lines
2.4 KiB
TOML
[package]
|
|
name = "uv-python"
|
|
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 }
|
|
|
|
[lib]
|
|
doctest = false
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
uv-cache = { workspace = true }
|
|
uv-cache-info = { workspace = true }
|
|
uv-cache-key = { workspace = true }
|
|
uv-client = { workspace = true }
|
|
uv-dirs = { workspace = true }
|
|
uv-distribution-filename = { workspace = true }
|
|
uv-extract = { workspace = true }
|
|
uv-fs = { workspace = true }
|
|
uv-install-wheel = { workspace = true }
|
|
uv-pep440 = { workspace = true }
|
|
uv-pep508 = { workspace = true }
|
|
uv-platform-tags = { workspace = true }
|
|
uv-pypi-types = { workspace = true }
|
|
uv-state = { workspace = true }
|
|
uv-static = { workspace = true }
|
|
uv-trampoline-builder = { workspace = true }
|
|
uv-warnings = { workspace = true }
|
|
|
|
anyhow = { workspace = true }
|
|
clap = { workspace = true, optional = true }
|
|
configparser = { workspace = true }
|
|
fs-err = { workspace = true, features = ["tokio"] }
|
|
futures = { workspace = true }
|
|
goblin = { workspace = true, default-features = false }
|
|
itertools = { workspace = true }
|
|
owo-colors = { workspace = true }
|
|
regex = { workspace = true }
|
|
reqwest = { workspace = true }
|
|
reqwest-middleware = { workspace = true }
|
|
reqwest-retry = { workspace = true }
|
|
rmp-serde = { workspace = true }
|
|
same-file = { workspace = true }
|
|
schemars = { workspace = true, optional = true }
|
|
serde = { workspace = true, features = ["derive"] }
|
|
serde_json = { workspace = true }
|
|
target-lexicon = { workspace = true }
|
|
tempfile = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
tokio = { workspace = true }
|
|
tokio-util = { workspace = true, features = ["compat"] }
|
|
tracing = { workspace = true }
|
|
url = { workspace = true }
|
|
which = { workspace = true }
|
|
|
|
[target.'cfg(target_os = "linux")'.dependencies]
|
|
procfs = { workspace = true }
|
|
|
|
[target.'cfg(target_os = "windows")'.dependencies]
|
|
windows-sys = { workspace = true }
|
|
windows-registry = { workspace = true }
|
|
windows-result = { workspace = true }
|
|
|
|
[dev-dependencies]
|
|
anyhow = { version = "1.0.89" }
|
|
assert_fs = { version = "1.1.2" }
|
|
indoc = { version = "2.0.5" }
|
|
itertools = { version = "0.13.0" }
|
|
temp-env = { version = "0.3.6" }
|
|
tempfile = { version = "3.12.0" }
|
|
test-log = { version = "0.2.16", features = ["trace"], default-features = false }
|