aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Goldstein <cardoe@cardoe.com>2019-12-25 14:10:44 -0600
committerDoug Goldstein <cardoe@cardoe.com>2019-12-25 14:14:24 -0600
commit006aa5ff7840b6f5fcc0e926a0b2a3e6bd10a4b7 (patch)
tree48bafbbf1834b2b90345bffad1d14c264e211f07
parentgather root package data from cargo metadata (diff)
downloadcargo-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.template2
-rw-r--r--src/lib.rs41
-rw-r--r--src/metadata.rs23
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"
diff --git a/src/lib.rs b/src/lib.rs
index d2cfebd..6a112bd 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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 {