diff options
author | 2019-12-25 14:10:44 -0600 | |
---|---|---|
committer | 2019-12-25 14:14:24 -0600 | |
commit | 006aa5ff7840b6f5fcc0e926a0b2a3e6bd10a4b7 (patch) | |
tree | 48bafbbf1834b2b90345bffad1d14c264e211f07 | |
parent | gather root package data from cargo metadata (diff) | |
download | cargo-ebuild-006aa5ff7840b6f5fcc0e926a0b2a3e6bd10a4b7.tar.gz cargo-ebuild-006aa5ff7840b6f5fcc0e926a0b2a3e6bd10a4b7.tar.bz2 cargo-ebuild-006aa5ff7840b6f5fcc0e926a0b2a3e6bd10a4b7.zip |
convert from Cargo package data to cargo_metadata
Get information about the package from cargo_metadata instead of from
Cargo directly. The information is almost the same, except for the
homepage of the crate itself.
-rw-r--r-- | src/ebuild.template | 2 | ||||
-rw-r--r-- | src/lib.rs | 41 | ||||
-rw-r--r-- | src/metadata.rs | 23 |
3 files changed, 13 insertions, 53 deletions
diff --git a/src/ebuild.template b/src/ebuild.template index 4e527ae..7c8cbf5 100644 --- a/src/ebuild.template +++ b/src/ebuild.template @@ -11,6 +11,8 @@ CRATES=" inherit cargo DESCRIPTION="{description}" +# Double check the homepage as the cargo_metadata crate +# does not provide this value so instead repository is used HOMEPAGE="{homepage}" SRC_URI="$(cargo_crate_uris ${{CRATES}})" RESTRICT="mirror" @@ -13,23 +13,14 @@ extern crate time; mod metadata; -use cargo::core::Workspace; -use cargo::util::{important_paths, CargoResult}; -use cargo::{CliResult, Config}; use failure::format_err; use std::collections::BTreeSet; use std::fs::OpenOptions; use std::io::Write; -use std::path::{Path, PathBuf}; +use std::path::PathBuf; use metadata::EbuildConfig; -/// Finds the root Cargo.toml of the workspace -fn workspace(config: &Config, manifest: impl AsRef<Path>) -> CargoResult<Workspace> { - let root = important_paths::find_root_manifest_for_wd(manifest.as_ref())?; - Workspace::new(&root, config) -} - fn parse_license<'a>(lic_str: &'a str) -> Vec<&'a str> { lic_str .split('/') @@ -85,34 +76,12 @@ pub fn run(verbose: u32, quiet: bool, manifest_path: Option<PathBuf>) -> CliResu // sort the crates crates.sort(); - // create a default Cargo config - let mut config = Config::default()?; - - config.configure( - verbose, - Some(quiet), - /* color */ - &None, - /* frozen */ - false, - /* locked */ - false, - /* offline */ - false, - /* target dir */ - &None, - /* unstable flags */ - &[], - )?; - - // Load the workspace and current package - let workspace = workspace(&config, &metadata.workspace_root)?; - let package = workspace.current()?; - - let ebuild_data = EbuildConfig::from_package(package, crates, licenses); + let root_pkg_name_ver = format!("{}-{}", root_pkg.name, root_pkg.version); + + let ebuild_data = EbuildConfig::from_package(root_pkg, crates, licenses); // build up the ebuild path - let ebuild_path = PathBuf::from(format!("{}-{}.ebuild", package.name(), package.version())); + let ebuild_path = PathBuf::from(format!("{}.ebuild", root_pkg_name_ver)); // Open the file where we'll write the ebuild let mut file = OpenOptions::new() diff --git a/src/metadata.rs b/src/metadata.rs index 72ea920..22cf4bb 100644 --- a/src/metadata.rs +++ b/src/metadata.rs @@ -8,7 +8,7 @@ * except according to those terms. */ -use cargo::core::Package; +use cargo_metadata::Package; use itertools::Itertools; use std::collections::BTreeSet; @@ -29,28 +29,17 @@ pub struct EbuildConfig { } impl EbuildConfig { - pub fn from_package( - package: &Package, - crates: Vec<String>, - licenses: BTreeSet<String>, - ) -> Self { - // root package metadata - let metadata = package.manifest().metadata(); - + pub fn from_package(package: Package, crates: Vec<String>, licenses: BTreeSet<String>) -> Self { // package description - let desc = metadata + let desc = package .description .as_ref() .cloned() - .unwrap_or_else(|| package.name().to_string()); + .unwrap_or_else(|| package.name.clone()); // package homepage - let homepage = metadata.homepage.as_ref().cloned().unwrap_or_else(|| { - metadata - .repository - .as_ref() - .cloned() - .unwrap_or_else(|| String::from("")) + let homepage = package.repository.unwrap_or_else(|| { + String::from("homepage field in Cargo.toml inaccessible to cargo metadata") }); EbuildConfig { |