Skip to content

Commit

Permalink
ISSUE-16 - Remove use of cargo::core:
Browse files Browse the repository at this point in the history
* Replace usage of cargo core dependency kind
* Remove use of package set

Signed-off-by: joshmc <josh-mcc@tiscali.co.uk>
  • Loading branch information
jmcconnell26 committed Nov 27, 2020
1 parent ad439f5 commit b3c6000
Show file tree
Hide file tree
Showing 16 changed files with 179 additions and 177 deletions.
53 changes: 5 additions & 48 deletions cargo-geiger/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,11 @@
// TODO: Investigate how cargo-clippy is implemented. Is it using syn? Is is
// using rustc? Is it implementing a compiler plugin?

use crate::args::FeaturesArgs;
use crate::Args;

// TODO: Consider making this a lib.rs (again) and expose a full API, excluding
// only the terminal output..? That API would be dependent on cargo.
use cargo::core::package::PackageSet;
use cargo::core::registry::PackageRegistry;
use cargo::core::resolver::ResolveOpts;
use cargo::core::{Package, PackageId, PackageIdSpec, Resolve, Workspace};
use cargo::ops;
use cargo::core::Workspace;
use cargo::util::{self, important_paths, CargoResult};
use cargo::Config;
use cargo_metadata::{CargoOpt, Metadata, MetadataCommand};
Expand Down Expand Up @@ -88,14 +83,14 @@ pub fn get_krates(cargo_metadata: &Metadata) -> CargoResult<Krates> {
.build_with_metadata(cargo_metadata.clone(), |_| ())?)
}

pub fn get_registry<'a>(
/*pub fn get_registry<'a>(
config: &'a Config,
package: &Package,
) -> CargoResult<PackageRegistry<'a>> {
let mut registry = PackageRegistry::new(config)?;
registry.add_sources(Some(package.package_id().source_id()))?;
Ok(registry)
}
}*/

pub fn get_workspace(
config: &Config,
Expand All @@ -108,7 +103,7 @@ pub fn get_workspace(
Workspace::new(&root, config)
}

pub fn resolve<'a, 'cfg>(
/*pub fn resolve<'a, 'cfg>(
args: &FeaturesArgs,
package_id: PackageId,
registry: &mut PackageRegistry<'cfg>,
Expand Down Expand Up @@ -137,7 +132,7 @@ pub fn resolve<'a, 'cfg>(
PackageRegistry::new(workspace.config())?,
)?;
Ok((packages, resolve))
}
}*/

// TODO: Make a wrapper type for canonical paths and hide all mutable access.

Expand Down Expand Up @@ -195,29 +190,6 @@ mod cli_tests {
assert!(krates_result.is_ok());
}

#[rstest]
fn get_registry_test() {
let config = Config::default().unwrap();
let workspace = Workspace::new(
&important_paths::find_root_manifest_for_wd(config.cwd()).unwrap(),
&config,
)
.unwrap();
let package = workspace.current().unwrap();

let registry_result = get_registry(&config, &package);

assert!(registry_result.is_ok());
let registry = registry_result.unwrap();

let package_ids = vec![package.package_id()];
let package_set_result = registry.get(&package_ids);
assert!(package_set_result.is_ok());
let package_set = package_set_result.unwrap();

assert_eq!(package_set.sources().len(), 1);
}

#[rstest]
fn get_workspace_test() {
let config = Config::default().unwrap();
Expand All @@ -233,19 +205,4 @@ mod cli_tests {

assert_eq!(package.package_id().name(), "cargo-geiger");
}

#[rstest]
fn resolve_test() {
let args = FeaturesArgs::default();
let config = Config::default().unwrap();
let manifest_path: Option<PathBuf> = None;
let workspace = get_workspace(&config, manifest_path).unwrap();
let package = workspace.current().unwrap();
let mut registry = get_registry(&config, &package).unwrap();

let resolve_cargo_result =
resolve(&args, package.package_id(), &mut registry, &workspace);

assert!(resolve_cargo_result.is_ok());
}
}
17 changes: 9 additions & 8 deletions cargo-geiger/src/format.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ pub mod table;
mod display;
mod parse;

use cargo::core::dependency::DepKind;
use cargo_metadata::DependencyKind;
use std::fmt;
use std::str::{self, FromStr};
use strum_macros::EnumIter;
Expand Down Expand Up @@ -79,11 +79,12 @@ impl fmt::Display for FormatError {
}
}

pub fn get_kind_group_name(dep_kind: DepKind) -> Option<&'static str> {
pub fn get_kind_group_name(dep_kind: DependencyKind) -> Option<&'static str> {
match dep_kind {
DepKind::Build => Some("[build-dependencies]"),
DepKind::Development => Some("[dev-dependencies]"),
DepKind::Normal => None,
DependencyKind::Build => Some("[build-dependencies]"),
DependencyKind::Development => Some("[dev-dependencies]"),
DependencyKind::Normal => None,
_ => panic!("Unrecognised Dependency Kind"),
}
}

Expand All @@ -103,15 +104,15 @@ mod format_tests {
#[rstest]
fn get_kind_group_name_test() {
assert_eq!(
get_kind_group_name(DepKind::Build),
get_kind_group_name(DependencyKind::Build),
Some("[build-dependencies]")
);

assert_eq!(
get_kind_group_name(DepKind::Development),
get_kind_group_name(DependencyKind::Development),
Some("[dev-dependencies]")
);

assert_eq!(get_kind_group_name(DepKind::Normal), None);
assert_eq!(get_kind_group_name(DependencyKind::Normal), None);
}
}
18 changes: 12 additions & 6 deletions cargo-geiger/src/format/table/handle_text_tree_line.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use super::total_package_counts::TotalPackageCounts;
use super::TableParameters;
use super::{table_row, table_row_empty};

use cargo::core::dependency::DepKind;
use cargo_metadata::DependencyKind;
use std::collections::HashSet;

pub struct HandlePackageParameters<'a> {
Expand All @@ -18,7 +18,7 @@ pub struct HandlePackageParameters<'a> {
}

pub fn handle_text_tree_line_extra_deps_group(
dep_kind: DepKind,
dep_kind: DependencyKind,
table_lines: &mut Vec<String>,
tree_vines: String,
) {
Expand Down Expand Up @@ -162,12 +162,18 @@ mod handle_text_tree_line_tests {
#[rstest(
input_dep_kind,
expected_kind_group_name,
case(DepKind::Build, Some(String::from("[build-dependencies]"))),
case(DepKind::Development, Some(String::from("[dev-dependencies]"))),
case(DepKind::Normal, None)
case(
DependencyKind::Build,
Some(String::from("[build-dependencies]"))
),
case(
DependencyKind::Development,
Some(String::from("[dev-dependencies]"))
),
case(DependencyKind::Normal, None)
)]
fn handle_text_tree_line_extra_deps_group_test(
input_dep_kind: DepKind,
input_dep_kind: DependencyKind,
expected_kind_group_name: Option<String>,
) {
let mut table_lines = Vec::<String>::new();
Expand Down
15 changes: 1 addition & 14 deletions cargo-geiger/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ mod tree;

use crate::args::{Args, HELP};
use crate::cli::{
get_cargo_metadata, get_krates, get_registry, get_workspace, resolve,
get_cargo_metadata, get_krates, get_workspace,
};
use crate::graph::build_graph;
use crate::mapping::{CargoMetadataParameters, QueryResolve};
Expand Down Expand Up @@ -52,22 +52,10 @@ fn real_main(args: &Args, config: &mut Config) -> CliResult {
};

let workspace = get_workspace(config, args.manifest_path.clone())?;
let root_package = workspace.current()?;
let mut registry = get_registry(config, &root_package)?;

let cargo_metadata_root_package_id =
cargo_metadata.root_package().unwrap().id.clone();

let (package_set, _) = resolve(
&args.features_args,
root_package.package_id(),
&mut registry,
&workspace,
)?;

let package_ids = package_set.package_ids().collect::<Vec<_>>();
let package_set = registry.get(&package_ids)?;

let graph = build_graph(
args,
&cargo_metadata_parameters,
Expand All @@ -90,7 +78,6 @@ fn real_main(args: &Args, config: &mut Config) -> CliResult {
&cargo_metadata_parameters,
config,
&graph,
&package_set,
query_resolve_root_package_id,
&workspace,
)
Expand Down
6 changes: 6 additions & 0 deletions cargo-geiger/src/mapping.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,12 @@ pub trait ToCargoCoreDepKind {
fn to_cargo_core_dep_kind(&self) -> DepKind;
}

pub trait ToCargoGeigerDependencyKind {
fn to_cargo_geiger_dependency_kind(
&self,
) -> cargo_geiger_serde::DependencyKind;
}

pub trait ToCargoGeigerPackageId {
fn to_cargo_geiger_package_id(
&self,
Expand Down
13 changes: 11 additions & 2 deletions cargo-geiger/src/mapping/core.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,11 @@ impl ToCargoMetadataPackageId for PackageId {
mod core_tests {
use super::*;

use crate::cli::{get_registry, get_workspace};
use crate::cli::{get_workspace};

use cargo::core::registry::PackageRegistry;
use cargo::core::Workspace;
use cargo::Config;
use cargo::{Config, CargoResult};
use cargo_metadata::{CargoOpt, Metadata, MetadataCommand};
use krates::Builder as KratesBuilder;
use krates::Krates;
Expand Down Expand Up @@ -148,4 +148,13 @@ mod core_tests {

(package, registry, workspace)
}

fn get_registry<'a>(
config: &'a Config,
package: &Package,
) -> CargoResult<PackageRegistry<'a>> {
let mut registry = PackageRegistry::new(config)?;
registry.add_sources(Some(package.package_id().source_id()))?;
Ok(registry)
}
}
66 changes: 62 additions & 4 deletions cargo-geiger/src/mapping/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use super::{
ToCargoMetadataPackageId,
};

use crate::mapping::{ToCargoGeigerSource, ToCargoMetadataPackage};
use crate::mapping::{ToCargoGeigerDependencyKind, ToCargoGeigerSource, ToCargoMetadataPackage};

use cargo::core::dependency::DepKind;
use cargo_metadata::{DependencyKind, Metadata};
Expand Down Expand Up @@ -77,6 +77,23 @@ impl ToCargoCoreDepKind for DependencyKind {
}
}

impl ToCargoGeigerDependencyKind for cargo_metadata::DependencyKind {
fn to_cargo_geiger_dependency_kind(
&self,
) -> cargo_geiger_serde::DependencyKind {
match self {
DependencyKind::Build => cargo_geiger_serde::DependencyKind::Build,
DependencyKind::Development => {
cargo_geiger_serde::DependencyKind::Development
}
DependencyKind::Normal => {
cargo_geiger_serde::DependencyKind::Normal
}
_ => panic!("Unrecognised Dependency Kind"),
}
}
}

impl ToCargoGeigerPackageId for cargo_metadata::PackageId {
fn to_cargo_geiger_package_id(
&self,
Expand Down Expand Up @@ -130,15 +147,16 @@ mod metadata_tests {
use super::super::GetPackageNameFromCargoMetadataPackageId;

use crate::args::FeaturesArgs;
use crate::cli::{get_registry, get_workspace, resolve};
use crate::cli::get_workspace;

use cargo::core::registry::PackageRegistry;
use cargo::core::{Package, Workspace};
use cargo::Config;
use cargo::core::{Package, Workspace, PackageId, PackageSet, Resolve, PackageIdSpec};
use cargo::{Config, CargoResult, ops};
use cargo_metadata::{CargoOpt, Metadata, MetadataCommand};
use krates::Builder as KratesBuilder;
use rstest::*;
use std::path::PathBuf;
use cargo::core::resolver::ResolveOpts;

#[rstest]
fn deps_not_replaced_test() {
Expand Down Expand Up @@ -286,4 +304,44 @@ mod metadata_tests {

(package, registry, workspace)
}

fn get_registry<'a>(
config: &'a Config,
package: &Package,
) -> CargoResult<PackageRegistry<'a>> {
let mut registry = PackageRegistry::new(config)?;
registry.add_sources(Some(package.package_id().source_id()))?;
Ok(registry)
}

fn resolve<'a, 'cfg>(
args: &FeaturesArgs,
package_id: PackageId,
registry: &mut PackageRegistry<'cfg>,
workspace: &'a Workspace<'cfg>,
) -> CargoResult<(PackageSet<'a>, Resolve)> {
let dev_deps = true; // TODO: Review this.
let uses_default_features = !args.no_default_features;
let opts = ResolveOpts::new(
dev_deps,
&args.features.clone(),
args.all_features,
uses_default_features,
);
let prev = ops::load_pkg_lockfile(workspace)?;
let resolve = ops::resolve_with_previous(
registry,
workspace,
&opts,
prev.as_ref(),
None,
&[PackageIdSpec::from_package_id(package_id)],
true,
)?;
let packages = ops::get_resolved_packages(
&resolve,
PackageRegistry::new(workspace.config())?,
)?;
Ok((packages, resolve))
}
}
Loading

0 comments on commit b3c6000

Please sign in to comment.