Skip to content

Commit 24840d9

Browse files
committed
Auto merge of #12527 - weihanglo:refactor-source-trait, r=epage
refactor: put `Source` trait under `cargo::sources`
2 parents 8230b46 + e575448 commit 24840d9

27 files changed

+74
-60
lines changed

crates/resolver-tests/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@ use std::time::Instant;
1313

1414
use cargo::core::dependency::DepKind;
1515
use cargo::core::resolver::{self, ResolveOpts, VersionPreferences};
16-
use cargo::core::source::{GitReference, QueryKind, SourceId};
1716
use cargo::core::Resolve;
1817
use cargo::core::{Dependency, PackageId, Registry, Summary};
18+
use cargo::core::{GitReference, SourceId};
19+
use cargo::sources::source::QueryKind;
1920
use cargo::util::{CargoResult, Config, Graph, IntoUrl, PartialVersion};
2021

2122
use proptest::collection::{btree_map, vec};

crates/xtask-bump-check/src/xtask.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ use std::task;
1818
use cargo::core::dependency::Dependency;
1919
use cargo::core::registry::PackageRegistry;
2020
use cargo::core::Package;
21-
use cargo::core::QueryKind;
2221
use cargo::core::Registry;
2322
use cargo::core::SourceId;
2423
use cargo::core::Workspace;
24+
use cargo::sources::source::QueryKind;
2525
use cargo::util::command_prelude::*;
2626
use cargo::util::ToSemver;
2727
use cargo::CargoResult;

src/cargo/core/compiler/future_incompat.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
//! [2]: https://github.com/rust-lang/rust/blob/9bb6e60d1f1360234aae90c97964c0fa5524f141/compiler/rustc_errors/src/json.rs#L312-L315
3535
3636
use crate::core::compiler::BuildContext;
37-
use crate::core::{Dependency, PackageId, QueryKind, Workspace};
37+
use crate::core::{Dependency, PackageId, Workspace};
38+
use crate::sources::source::QueryKind;
3839
use crate::sources::SourceConfigMap;
3940
use crate::util::{iter_join, CargoResult, Config};
4041
use anyhow::{bail, format_err, Context};

src/cargo/core/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ pub use self::package_id_spec::PackageIdSpec;
88
pub use self::registry::Registry;
99
pub use self::resolver::{Resolve, ResolveVersion};
1010
pub use self::shell::{Shell, Verbosity};
11-
pub use self::source::{GitReference, QueryKind, Source, SourceId, SourceMap};
11+
pub use self::source_id::{GitReference, SourceId};
1212
pub use self::summary::{FeatureMap, FeatureValue, Summary};
1313
pub use self::workspace::{
1414
find_workspace_root, resolve_relative_path, MaybePackage, Workspace, WorkspaceConfig,
@@ -27,6 +27,6 @@ pub mod profiles;
2727
pub mod registry;
2828
pub mod resolver;
2929
pub mod shell;
30-
pub mod source;
30+
mod source_id;
3131
pub mod summary;
3232
mod workspace;

src/cargo/core/package.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ use crate::core::compiler::{CompileKind, RustcTargetData};
2121
use crate::core::dependency::DepKind;
2222
use crate::core::resolver::features::ForceAllTargets;
2323
use crate::core::resolver::{HasDevUnits, Resolve};
24-
use crate::core::source::MaybePackage;
2524
use crate::core::{Dependency, Manifest, PackageId, SourceId, Target};
26-
use crate::core::{SourceMap, Summary, Workspace};
25+
use crate::core::{Summary, Workspace};
26+
use crate::sources::source::{MaybePackage, SourceMap};
2727
use crate::util::config::PackageCacheLock;
2828
use crate::util::errors::{CargoResult, HttpNotSuccessful};
2929
use crate::util::interning::InternedString;

src/cargo/core/package_id.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use std::sync::OnceLock;
1010
use serde::de;
1111
use serde::ser;
1212

13-
use crate::core::source::SourceId;
13+
use crate::core::SourceId;
1414
use crate::util::interning::InternedString;
1515
use crate::util::{CargoResult, ToSemver};
1616

@@ -238,7 +238,7 @@ impl fmt::Debug for PackageId {
238238
#[cfg(test)]
239239
mod tests {
240240
use super::PackageId;
241-
use crate::core::source::SourceId;
241+
use crate::core::SourceId;
242242
use crate::sources::CRATES_IO_INDEX;
243243
use crate::util::IntoUrl;
244244

src/cargo/core/registry.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ use std::collections::{HashMap, HashSet};
22
use std::task::{ready, Poll};
33

44
use crate::core::PackageSet;
5-
use crate::core::{Dependency, PackageId, QueryKind, Source, SourceId, SourceMap, Summary};
5+
use crate::core::{Dependency, PackageId, SourceId, Summary};
66
use crate::sources::config::SourceConfigMap;
7+
use crate::sources::source::QueryKind;
8+
use crate::sources::source::Source;
9+
use crate::sources::source::SourceMap;
710
use crate::util::errors::CargoResult;
811
use crate::util::interning::InternedString;
912
use crate::util::{CanonicalUrl, Config};

src/cargo/core/resolver/dep_cache.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,8 @@ use crate::core::resolver::{
1616
ActivateError, ActivateResult, CliFeatures, RequestedFeatures, ResolveOpts, VersionOrdering,
1717
VersionPreferences,
1818
};
19-
use crate::core::{
20-
Dependency, FeatureValue, PackageId, PackageIdSpec, QueryKind, Registry, Summary,
21-
};
19+
use crate::core::{Dependency, FeatureValue, PackageId, PackageIdSpec, Registry, Summary};
20+
use crate::sources::source::QueryKind;
2221
use crate::util::errors::CargoResult;
2322
use crate::util::interning::InternedString;
2423
use crate::util::PartialVersion;

src/cargo/core/resolver/errors.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
use std::fmt;
22
use std::task::Poll;
33

4-
use crate::core::{Dependency, PackageId, QueryKind, Registry, Summary};
4+
use crate::core::{Dependency, PackageId, Registry, Summary};
5+
use crate::sources::source::QueryKind;
56
use crate::util::edit_distance::edit_distance;
67
use crate::util::{Config, VersionExt};
78
use anyhow::Error;

src/cargo/core/source/source_id.rs renamed to src/cargo/core/source_id.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::core::PackageId;
22
use crate::sources::registry::CRATES_IO_HTTP_INDEX;
3+
use crate::sources::source::Source;
34
use crate::sources::{DirectorySource, CRATES_IO_DOMAIN, CRATES_IO_INDEX, CRATES_IO_REGISTRY};
45
use crate::sources::{GitSource, PathSource, RegistrySource};
56
use crate::util::{config, CanonicalUrl, CargoResult, Config, IntoUrl, ToSemver};
@@ -29,9 +30,9 @@ static SOURCE_ID_CACHE: OnceLock<Mutex<HashSet<&'static SourceIdInner>>> = OnceL
2930
/// `SourceId` is usually associated with an instance of [`Source`], which is
3031
/// supposed to provide a `SourceId` via [`Source::source_id`] method.
3132
///
32-
/// [`Source`]: super::Source
33-
/// [`Source::source_id`]: super::Source::source_id
34-
/// [`PackageId`]: super::super::PackageId
33+
/// [`Source`]: crate::sources::source::Source
34+
/// [`Source::source_id`]: crate::sources::source::Source::source_id
35+
/// [`PackageId`]: super::PackageId
3536
#[derive(Clone, Copy, Eq, Debug)]
3637
pub struct SourceId {
3738
inner: &'static SourceIdInner,
@@ -395,7 +396,7 @@ impl SourceId {
395396
self,
396397
config: &'a Config,
397398
yanked_whitelist: &HashSet<PackageId>,
398-
) -> CargoResult<Box<dyn super::Source + 'a>> {
399+
) -> CargoResult<Box<dyn Source + 'a>> {
399400
trace!("loading SourceId; {}", self);
400401
match self.inner.kind {
401402
SourceKind::Git(..) => Ok(Box::new(GitSource::new(self, config)?)),

src/cargo/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@
5151
//! - [`core::compiler::fingerprint`]:
5252
//! The `fingerprint` module contains all the code that handles detecting
5353
//! if a crate needs to be recompiled.
54-
//! - [`core::source`]:
55-
//! The [`core::Source`] trait is an abstraction over different sources of packages.
54+
//! - [`sources::source`]:
55+
//! The [`sources::source::Source`] trait is an abstraction over different sources of packages.
5656
//! Sources are uniquely identified by a [`core::SourceId`]. Sources are implemented in the [`sources`]
5757
//! directory.
5858
//! - [`util`]:

src/cargo/ops/cargo_add/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ use crate::core::dependency::DepKind;
2121
use crate::core::registry::PackageRegistry;
2222
use crate::core::FeatureValue;
2323
use crate::core::Package;
24-
use crate::core::QueryKind;
2524
use crate::core::Registry;
2625
use crate::core::Shell;
2726
use crate::core::Summary;
2827
use crate::core::Workspace;
28+
use crate::sources::source::QueryKind;
2929
use crate::util::toml_mut::dependency::Dependency;
3030
use crate::util::toml_mut::dependency::GitSource;
3131
use crate::util::toml_mut::dependency::MaybeWorkspace;

src/cargo/ops/cargo_install.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ use std::{env, fs};
55

66
use crate::core::compiler::{CompileKind, DefaultExecutor, Executor, UnitOutput};
77
use crate::core::{
8-
Dependency, Edition, Package, PackageId, PackageIdSpec, Source, SourceId, Target, Workspace,
8+
Dependency, Edition, Package, PackageId, PackageIdSpec, SourceId, Target, Workspace,
99
};
1010
use crate::ops::{common_for_install_and_uninstall::*, FilterRule};
1111
use crate::ops::{CompileFilter, Packages};
12+
use crate::sources::source::Source;
1213
use crate::sources::{GitSource, PathSource, SourceConfigMap};
1314
use crate::util::errors::CargoResult;
1415
use crate::util::{Config, Filesystem, Rustc};

src/cargo/ops/common_for_install_and_uninstall.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ use serde::{Deserialize, Serialize};
1212

1313
use crate::core::compiler::{DirtyReason, Freshness};
1414
use crate::core::Target;
15-
use crate::core::{Dependency, FeatureValue, Package, PackageId, QueryKind, Source, SourceId};
15+
use crate::core::{Dependency, FeatureValue, Package, PackageId, SourceId};
1616
use crate::ops::{self, CompileFilter, CompileOptions};
17+
use crate::sources::source::QueryKind;
18+
use crate::sources::source::Source;
1719
use crate::sources::PathSource;
1820
use crate::util::errors::CargoResult;
1921
use crate::util::Config;

src/cargo/ops/registry/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ use anyhow::{bail, format_err, Context as _};
1717
use cargo_credential::{Operation, Secret};
1818
use crates_io::{self, Registry};
1919

20-
use crate::core::source::Source;
2120
use crate::core::SourceId;
21+
use crate::sources::source::Source;
2222
use crate::sources::{RegistrySource, SourceConfigMap};
2323
use crate::util::auth;
2424
use crate::util::config::{Config, PathAndArgs};

src/cargo/ops/registry/publish.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ use crate::core::manifest::ManifestMetadata;
2121
use crate::core::resolver::CliFeatures;
2222
use crate::core::Dependency;
2323
use crate::core::Package;
24-
use crate::core::QueryKind;
2524
use crate::core::SourceId;
2625
use crate::core::Workspace;
2726
use crate::ops;
2827
use crate::ops::PackageOpts;
2928
use crate::ops::Packages;
29+
use crate::sources::source::QueryKind;
3030
use crate::sources::SourceConfigMap;
3131
use crate::sources::CRATES_IO_REGISTRY;
3232
use crate::util::auth;

src/cargo/ops/resolve.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@
4949
//! [`Package`]: crate::core::package
5050
//! [`Target`]: crate::core::Target
5151
//! [`Manifest`]: crate::core::Manifest
52-
//! [`Source`]: crate::core::Source
53-
//! [`SourceMap`]: crate::core::SourceMap
52+
//! [`Source`]: crate::sources::source::Source
53+
//! [`SourceMap`]: crate::sources::source::SourceMap
5454
//! [`PackageRegistry`]: crate::core::registry::PackageRegistry
5555
//! [source implementations]: crate::sources
5656
//! [`Downloads`]: crate::core::package::Downloads

src/cargo/sources/config.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
//! structure usable by Cargo itself. Currently this is primarily used to map
55
//! sources to one another via the `replace-with` key in `.cargo/config`.
66
7-
use crate::core::{GitReference, PackageId, Source, SourceId};
7+
use crate::core::{GitReference, PackageId, SourceId};
8+
use crate::sources::source::Source;
89
use crate::sources::{ReplacedSource, CRATES_IO_REGISTRY};
910
use crate::util::config::{self, ConfigRelativePath, OptValue};
1011
use crate::util::errors::CargoResult;

src/cargo/sources/directory.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ use std::fmt::{self, Debug, Formatter};
33
use std::path::{Path, PathBuf};
44
use std::task::Poll;
55

6-
use crate::core::source::MaybePackage;
7-
use crate::core::{Dependency, Package, PackageId, QueryKind, Source, SourceId, Summary};
6+
use crate::core::{Dependency, Package, PackageId, SourceId, Summary};
7+
use crate::sources::source::MaybePackage;
8+
use crate::sources::source::QueryKind;
9+
use crate::sources::source::Source;
810
use crate::sources::PathSource;
911
use crate::util::errors::CargoResult;
1012
use crate::util::Config;

src/cargo/sources/git/source.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
//! See [GitSource].
22
3-
use crate::core::source::{MaybePackage, QueryKind, Source, SourceId};
43
use crate::core::GitReference;
4+
use crate::core::SourceId;
55
use crate::core::{Dependency, Package, PackageId, Summary};
66
use crate::sources::git::utils::GitRemote;
7+
use crate::sources::source::MaybePackage;
8+
use crate::sources::source::QueryKind;
9+
use crate::sources::source::Source;
710
use crate::sources::PathSource;
811
use crate::util::errors::CargoResult;
912
use crate::util::hex::short_hash;

src/cargo/sources/mod.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
1-
//! Implementations of `Source` trait.
1+
//! The trait for sources of Cargo packages and its built-in implemetations.
22
//!
3-
//! Cargo provides several built-in implementations of [`Source`] trait. Namely,
3+
//! A source is a provider that contains source files and metadata of packages.
4+
//! It provides a number of methods to fetch those package informations, for
5+
//! example, querying metadata or downloading files for a package. These
6+
//! informations then can be used as dependencies for other Cargo packages.
7+
//!
8+
//! This module provides [`Source`][source::Source] trait as an abstraction of different sources,
9+
//! as well as [`SourceMap`][source::SourceMap] struct as a map of all available sources.
10+
//!
11+
//! Several built-in implementations of `Source` trait are provided. Namely,
412
//!
513
//! * [`RegistrySource`] --- A source that provides an index for people to query
614
//! a crate's metadata, and fetch files for a certain crate. crates.io falls
@@ -16,7 +24,6 @@
1624
//! This module also contains [`SourceConfigMap`], which is effectively the
1725
//! representation of the `[source.*]` value in Cargo configuration.
1826
//!
19-
//! [`Source`]: crate::core::Source
2027
//! [source replacement]: https://doc.rust-lang.org/nightly/cargo/reference/source-replacement.html
2128
2229
pub use self::config::SourceConfigMap;
@@ -32,3 +39,4 @@ pub mod git;
3239
pub mod path;
3340
pub mod registry;
3441
pub mod replaced;
42+
pub mod source;

src/cargo/sources/path.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ use std::fmt::{self, Debug, Formatter};
33
use std::path::{Path, PathBuf};
44
use std::task::Poll;
55

6-
use crate::core::source::MaybePackage;
7-
use crate::core::{Dependency, Package, PackageId, QueryKind, Source, SourceId, Summary};
6+
use crate::core::{Dependency, Package, PackageId, SourceId, Summary};
87
use crate::ops;
8+
use crate::sources::source::MaybePackage;
9+
use crate::sources::source::QueryKind;
10+
use crate::sources::source::Source;
911
use crate::util::{internal, CargoResult, Config};
1012
use anyhow::Context as _;
1113
use cargo_util::paths;

src/cargo/sources/registry/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,10 @@ use tar::Archive;
201201
use tracing::debug;
202202

203203
use crate::core::dependency::Dependency;
204-
use crate::core::source::MaybePackage;
205-
use crate::core::{Package, PackageId, QueryKind, Source, SourceId, Summary};
204+
use crate::core::{Package, PackageId, SourceId, Summary};
205+
use crate::sources::source::MaybePackage;
206+
use crate::sources::source::QueryKind;
207+
use crate::sources::source::Source;
206208
use crate::sources::PathSource;
207209
use crate::util::hex;
208210
use crate::util::network::PollExt;

src/cargo/sources/replaced.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
use crate::core::source::MaybePackage;
2-
use crate::core::{Dependency, Package, PackageId, QueryKind, Source, SourceId, Summary};
1+
use crate::core::{Dependency, Package, PackageId, SourceId, Summary};
2+
use crate::sources::source::MaybePackage;
3+
use crate::sources::source::QueryKind;
4+
use crate::sources::source::Source;
35
use crate::util::errors::CargoResult;
46
use std::task::Poll;
57

src/cargo/core/source/mod.rs renamed to src/cargo/sources/source.rs

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,14 @@
1-
//! Fundamental types and traits for sources of Cargo packages.
2-
//!
3-
//! A source is a provider that contains source files and metadata of packages.
4-
//! It provides a number of methods to fetch those package informations, for
5-
//! example, querying metadata or downloading files for a package. These
6-
//! informations then can be used as dependencies for other Cargo packages.
7-
//!
8-
//! Notably, this module contains
9-
//!
10-
//! * [`Source`] trait as an abstraction of different sources
11-
//! * [`SourceMap`] struct as a map of all available sources
12-
//! * [`SourceId`] struct as an unique identifier for a certain source
13-
//!
14-
//! For implementations of `Source` trait, see [`crate::sources`].
1+
//! [`Source`] trait for sources of Cargo packages.
152
163
use std::collections::hash_map::HashMap;
174
use std::fmt;
185
use std::task::Poll;
196

207
use crate::core::package::PackageSet;
8+
use crate::core::SourceId;
219
use crate::core::{Dependency, Package, PackageId, Summary};
2210
use crate::util::{CargoResult, Config};
2311

24-
mod source_id;
25-
26-
pub use self::source_id::{GitReference, SourceId};
27-
2812
/// An abstraction of different sources of Cargo packages.
2913
///
3014
/// The [`Source`] trait generalizes the API to interact with these providers.

tests/testsuite/profile_config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ fn named_config_profile() {
427427
let ws = Workspace::new(&paths::root().join("Cargo.toml"), &config).unwrap();
428428
let profiles = Profiles::new(&ws, profile_name).unwrap();
429429

430-
let crates_io = cargo::core::source::SourceId::crates_io(&config).unwrap();
430+
let crates_io = cargo::core::SourceId::crates_io(&config).unwrap();
431431
let a_pkg = PackageId::new("a", "0.1.0", crates_io).unwrap();
432432
let dep_pkg = PackageId::new("dep", "0.1.0", crates_io).unwrap();
433433

tests/testsuite/search.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ fn setup() -> RegistryBuilder {
8989
fn not_update() {
9090
let registry = setup().build();
9191

92-
use cargo::core::{Shell, Source, SourceId};
92+
use cargo::core::{Shell, SourceId};
93+
use cargo::sources::source::Source;
9394
use cargo::sources::RegistrySource;
9495
use cargo::util::Config;
9596

0 commit comments

Comments
 (0)