* [gentoo-commits] proj/cargo-ebuild:master commit in: /, src/
@ 2021-08-25 15:35 Georgy Yakovlev
0 siblings, 0 replies; 4+ messages in thread
From: Georgy Yakovlev @ 2021-08-25 15:35 UTC (permalink / raw
To: gentoo-commits
commit: 8357787285a25600de45743c9ecfd5e16ff576ef
Author: Luca Barbato <lu_zero <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 29 14:16:18 2021 +0000
Commit: Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
CommitDate: Wed Aug 25 15:11:24 2021 +0000
URL: https://gitweb.gentoo.org/proj/cargo-ebuild.git/commit/?id=83577872
Convert the default template to tera
Signed-off-by: Luca Barbato <lu_zero <AT> gentoo.org>
Signed-off-by: Georgy Yakovlev <gyakovlev <AT> gentoo.org>
Cargo.toml | 5 +++++
src/{ebuild.template => ebuild.tera} | 19 +++++++++++--------
src/lib.rs | 35 +++++++++++++++++------------------
src/metadata.rs | 2 ++
4 files changed, 35 insertions(+), 26 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
index b934115..a15752f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -34,8 +34,13 @@ cargo-lock = "^7.0"
cargo_metadata = "^0.14"
itertools = "^0.10"
structopt = "^0.3"
+serde = { version = "1.0", features = ["derive"] }
time = "^0.2"
[dependencies.phf]
version = "0.9"
features = ["macros"]
+
+[dependencies.tera]
+version = "1"
+default-features = false
diff --git a/src/ebuild.template b/src/ebuild.tera
similarity index 54%
rename from src/ebuild.template
rename to src/ebuild.tera
index b979f2f..b83675d 100644
--- a/src/ebuild.template
+++ b/src/ebuild.tera
@@ -1,24 +1,27 @@
-# Copyright 2017-{this_year} Gentoo Authors
+# Copyright 2017-{{ this_year }} Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
-# Auto-Generated by cargo-ebuild {cargo_ebuild_ver}
+# Auto-Generated by cargo-ebuild {{ cargo_ebuild_ver }}
EAPI=7
CRATES="
-{crates}"
+{% for crate in crates -%}
+{{ crate }}
+{%- endfor -%}"
inherit cargo
-DESCRIPTION="{description}"
+DESCRIPTION="{{ description | trim }}"
# 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}})"
-
+HOMEPAGE="{{ homepage }}"
+{% raw -%}
+SRC_URI="$(cargo_crate_uris ${CRATES})"
+{%- endraw %}
# License set may be more restrictive as OR is not respected
# use cargo-license for a more accurate license picture
-LICENSE="{license}"
+LICENSE="{{ license }}"
SLOT="0"
KEYWORDS="~amd64"
RESTRICT="mirror"
diff --git a/src/lib.rs b/src/lib.rs
index 9a4aa49..2ecb1f3 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -13,11 +13,10 @@ mod metadata;
use anyhow::{format_err, Context, Result};
use cargo_lock::Lockfile;
-use cargo_metadata::MetadataCommand;
use cargo_metadata::CargoOpt;
+use cargo_metadata::MetadataCommand;
use std::collections::BTreeSet;
use std::fs::OpenOptions;
-use std::io::Write;
use std::path::{Path, PathBuf};
use std::process::Command;
@@ -86,7 +85,10 @@ pub fn gen_ebuild_data(manifest_path: Option<PathBuf>) -> Result<EbuildConfig> {
licenses.insert(norm.to_string());
} else {
// Add the unknown license name to be corrected manually
- println!("WARNING: unknown license \"{}\", please correct manually", &lic);
+ println!(
+ "WARNING: unknown license \"{}\", please correct manually",
+ &lic
+ );
licenses.insert(lic.to_string());
}
}
@@ -133,19 +135,16 @@ pub fn write_ebuild(ebuild_data: EbuildConfig, ebuild_path: impl AsRef<Path>) ->
ebuild_path.as_ref().display()
))?;
- // write the contents out
- write!(
- file,
- include_str!("ebuild.template"),
- description = ebuild_data.description.trim(),
- homepage = ebuild_data.homepage.trim(),
- license = ebuild_data.license.trim(),
- crates = ebuild_data.crates.join(""),
- cargo_ebuild_ver = env!("CARGO_PKG_VERSION"),
- this_year = time::OffsetDateTime::now_utc().year(),
- )
- .context(format!(
- "Failed to write to {}",
- ebuild_path.as_ref().display()
- ))
+ let mut tera = tera::Tera::default();
+ let mut context = tera::Context::from_serialize(ebuild_data)?;
+ tera.add_raw_template("ebuild.tera", include_str!("ebuild.tera"))?;
+
+ context.insert("cargo_ebuild_ver", env!("CARGO_PKG_VERSION"));
+ context.insert("this_year", &time::OffsetDateTime::now_utc().year());
+
+ tera.render_to("ebuild.tera", &context, &mut file)
+ .context(format!(
+ "Failed to write to {}",
+ ebuild_path.as_ref().display()
+ ))
}
diff --git a/src/metadata.rs b/src/metadata.rs
index d221825..2d081d8 100644
--- a/src/metadata.rs
+++ b/src/metadata.rs
@@ -10,8 +10,10 @@
use cargo_metadata::Package;
use itertools::Itertools;
+use serde::Serialize;
use std::collections::BTreeSet;
+#[derive(Serialize)]
pub struct EbuildConfig {
pub name: String,
pub version: String,
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [gentoo-commits] proj/cargo-ebuild:master commit in: /, src/
@ 2021-08-26 7:51 Georgy Yakovlev
0 siblings, 0 replies; 4+ messages in thread
From: Georgy Yakovlev @ 2021-08-26 7:51 UTC (permalink / raw
To: gentoo-commits
commit: 4b0b01717cd58331181101a7d94cdba88a912237
Author: Leonardo Neumann <leonardo <AT> neumann <DOT> dev <DOT> br>
AuthorDate: Sat Aug 14 20:03:22 2021 +0000
Commit: Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
CommitDate: Thu Aug 26 07:40:32 2021 +0000
URL: https://gitweb.gentoo.org/proj/cargo-ebuild.git/commit/?id=4b0b0171
Remove cargo-lock dependency
Closes: https://github.com/gentoo/cargo-ebuild/pull/7
Signed-off-by: Leonardo Neumann <leonardo <AT> neumann.dev.br>
Signed-off-by: Georgy Yakovlev <gyakovlev <AT> gentoo.org>
Cargo.lock | 4 ++--
src/lib.rs | 46 +++++-----------------------------------------
2 files changed, 7 insertions(+), 43 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index e7a9187..431eb9d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -349,9 +349,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
-version = "0.2.100"
+version = "0.2.101"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1fa8cddc8fbbee11227ef194b5317ed014b8acbf15139bd716a18ad3fe99ec5"
+checksum = "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21"
[[package]]
name = "log"
diff --git a/src/lib.rs b/src/lib.rs
index db9d54b..29fd0c2 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -12,40 +12,15 @@ mod license;
mod metadata;
use anyhow::{format_err, Context, Result};
-use cargo_lock::Lockfile;
use cargo_metadata::CargoOpt;
use cargo_metadata::MetadataCommand;
use std::collections::BTreeSet;
use std::fs::OpenOptions;
use std::path::{Path, PathBuf};
-use std::process::Command;
use license::{normalize_license, split_spdx_license};
use metadata::EbuildConfig;
-fn generate_lockfile(manifest_path: Option<PathBuf>) -> Result<()> {
- let cargo = std::env::var("CARGO")
- .map(PathBuf::from)
- .unwrap_or_else(|_| PathBuf::from("cargo"));
-
- let mut lock_cmd = Command::new(cargo);
- lock_cmd.arg("generate-lockfile");
-
- if let Some(path) = manifest_path.as_ref() {
- lock_cmd.arg("--manifest-path");
- lock_cmd.arg(path.as_os_str());
- }
-
- let lock_output = lock_cmd.output()?;
-
- if !lock_output.status.success() {
- let stderr = String::from_utf8_lossy(&lock_output.stderr);
- return Err(format_err!("unable to generate lockfile:\n{}", stderr));
- }
-
- Ok(())
-}
-
pub fn gen_ebuild_data(manifest_path: Option<PathBuf>) -> Result<EbuildConfig> {
let mut cmd = MetadataCommand::new();
@@ -97,29 +72,18 @@ pub fn gen_ebuild_data(manifest_path: Option<PathBuf>) -> Result<EbuildConfig> {
if pkg.license_file.is_some() {
println!("WARNING: {} uses a license-file, not handled", pkg.name);
}
- }
- let root_pkg = root_pkg
- .ok_or_else(|| format_err!("unable to determine package to generate ebuild for"))?;
-
- let lockfile_path = metadata.workspace_root.join("Cargo.lock");
-
- // Generate lockfile if it doesn't exists
- if std::fs::metadata(&lockfile_path).is_err() {
- generate_lockfile(manifest_path)?;
- }
-
- // Check for packages that must be fetched from default registry
- let lockfile = Lockfile::load(lockfile_path)?;
-
- for pkg in lockfile.packages {
if let Some(src) = pkg.source {
- if src.is_default_registry() {
+ // Check if the crate is available at crates.io
+ if src.is_crates_io() {
crates.push(format!("\t{}-{}\n", pkg.name, pkg.version));
}
}
}
+ let root_pkg = root_pkg
+ .ok_or_else(|| format_err!("unable to determine package to generate ebuild for"))?;
+
Ok(EbuildConfig::from_package(root_pkg, crates, licenses))
}
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [gentoo-commits] proj/cargo-ebuild:master commit in: /, src/
@ 2021-08-26 7:51 Georgy Yakovlev
0 siblings, 0 replies; 4+ messages in thread
From: Georgy Yakovlev @ 2021-08-26 7:51 UTC (permalink / raw
To: gentoo-commits
commit: 1f8c7eb03ace33caba40822651c822d140f2840c
Author: Leonardo Neumann <leonardo <AT> neumann <DOT> dev <DOT> br>
AuthorDate: Sat Aug 14 21:05:37 2021 +0000
Commit: Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
CommitDate: Thu Aug 26 07:40:36 2021 +0000
URL: https://gitweb.gentoo.org/proj/cargo-ebuild.git/commit/?id=1f8c7eb0
Implement audit functionality using rustsec
Closes: https://github.com/gentoo/cargo-ebuild/pull/15
Closes: https://github.com/gentoo/cargo-ebuild/issues/2
Signed-off-by: Leonardo Neumann <leonardo <AT> neumann.dev.br>
Signed-off-by: Georgy Yakovlev <gyakovlev <AT> gentoo.org>
Cargo.lock | 259 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Cargo.toml | 1 +
src/audit.rs | 96 ++++++++++++++++++++++
src/lib.rs | 8 +-
src/main.rs | 7 +-
5 files changed, 368 insertions(+), 3 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index 431eb9d..06293a2 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -37,6 +37,12 @@ dependencies = [
"winapi",
]
+[[package]]
+name = "autocfg"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+
[[package]]
name = "base-x"
version = "0.2.8"
@@ -115,6 +121,7 @@ dependencies = [
"cargo_metadata",
"itertools",
"phf",
+ "rustsec",
"serde",
"structopt",
"tera",
@@ -155,6 +162,15 @@ dependencies = [
"serde_json",
]
+[[package]]
+name = "cc"
+version = "1.0.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2"
+dependencies = [
+ "jobserver",
+]
+
[[package]]
name = "cfg-if"
version = "1.0.0"
@@ -182,6 +198,24 @@ version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f92cfa0fd5690b3cf8c1ef2cabbd9b7ef22fa53cf5e1f92b05103f6d5d1cf6e7"
+[[package]]
+name = "crates-index"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ad4af5c8dd9940a497ef4473e6e558b660a4a1b6e5ce2cb9d85454e2aaaf947"
+dependencies = [
+ "git2",
+ "glob",
+ "hex",
+ "home",
+ "memchr",
+ "semver 1.0.4",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "smartstring",
+]
+
[[package]]
name = "crossbeam-utils"
version = "0.8.5"
@@ -192,6 +226,15 @@ dependencies = [
"lazy_static",
]
+[[package]]
+name = "cvss"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "829862dabeab142ae0efd558d42d8fd874659268ccd810809ac6f1ee6bfcbd3f"
+dependencies = [
+ "serde",
+]
+
[[package]]
name = "digest"
version = "0.8.1"
@@ -235,6 +278,12 @@ dependencies = [
"percent-encoding",
]
+[[package]]
+name = "fs-err"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ebd3504ad6116843b8375ad70df74e7bfe83cac77a1f3fe73200c844d43bfe0"
+
[[package]]
name = "generic-array"
version = "0.12.4"
@@ -255,6 +304,27 @@ dependencies = [
"wasi",
]
+[[package]]
+name = "git2"
+version = "0.13.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "659cd14835e75b64d9dba5b660463506763cf0aa6cb640aeeb0e98d841093490"
+dependencies = [
+ "bitflags",
+ "libc",
+ "libgit2-sys",
+ "log",
+ "openssl-probe",
+ "openssl-sys",
+ "url",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+
[[package]]
name = "globset"
version = "0.4.8"
@@ -297,6 +367,40 @@ dependencies = [
"libc",
]
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "home"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "humantime-serde"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac34a56cfd4acddb469cc7fff187ed5ac36f498ba085caf8bbc725e3ff474058"
+dependencies = [
+ "humantime",
+ "serde",
+]
+
[[package]]
name = "idna"
version = "0.2.3"
@@ -341,6 +445,15 @@ version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+[[package]]
+name = "jobserver"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "lazy_static"
version = "1.4.0"
@@ -353,6 +466,46 @@ version = "0.2.101"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21"
+[[package]]
+name = "libgit2-sys"
+version = "0.12.22+1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89c53ac117c44f7042ad8d8f5681378dfbc6010e49ec2c0d1f11dfedc7a4a1c3"
+dependencies = [
+ "cc",
+ "libc",
+ "libssh2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libssh2-sys"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0186af0d8f171ae6b9c4c90ec51898bad5d08a2d5e470903a50d9ad8959cbee"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
[[package]]
name = "log"
version = "0.4.14"
@@ -392,6 +545,25 @@ version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
+[[package]]
+name = "openssl-probe"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1996d2d305e561b70d1ee0c53f1542833f4e1ac6ce9a6708b6ff2738ca67dc82"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
[[package]]
name = "percent-encoding"
version = "2.1.0"
@@ -485,6 +657,21 @@ dependencies = [
"siphasher",
]
+[[package]]
+name = "pkg-config"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
+
+[[package]]
+name = "platforms"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "989d43012e2ca1c4a02507c67282691a0a3207f9dc67cec596b43fe925b3d325"
+dependencies = [
+ "serde",
+]
+
[[package]]
name = "ppv-lite86"
version = "0.2.10"
@@ -605,6 +792,29 @@ dependencies = [
"semver 0.9.0",
]
+[[package]]
+name = "rustsec"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c29c220a60ceaeedb2c5bf51826b3d3c5d77b2523693f0579c8a85dd03f11947"
+dependencies = [
+ "cargo-lock",
+ "crates-index",
+ "cvss",
+ "fs-err",
+ "git2",
+ "home",
+ "humantime",
+ "humantime-serde",
+ "platforms",
+ "semver 1.0.4",
+ "serde",
+ "smol_str",
+ "thiserror",
+ "toml",
+ "url",
+]
+
[[package]]
name = "ryu"
version = "1.0.5"
@@ -699,6 +909,22 @@ version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "729a25c17d72b06c68cb47955d44fda88ad2d3e7d77e025663fdd69b93dd71a1"
+[[package]]
+name = "smartstring"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31aa6a31c0c2b21327ce875f7e8952322acfcfd0c27569a6e18a647281352c9b"
+dependencies = [
+ "serde",
+ "static_assertions",
+]
+
+[[package]]
+name = "smol_str"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ca0f7ce3a29234210f0f4f0b56f8be2e722488b95cb522077943212da3b32eb"
+
[[package]]
name = "standback"
version = "0.2.17"
@@ -708,6 +934,12 @@ dependencies = [
"version_check",
]
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
[[package]]
name = "stdweb"
version = "0.4.20"
@@ -823,6 +1055,26 @@ dependencies = [
"unicode-width",
]
+[[package]]
+name = "thiserror"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93119e4feac1cbe6c798c34d3a53ea0026b0b1de6a120deef895137c0529bfe2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
[[package]]
name = "thread_local"
version = "1.1.3"
@@ -999,8 +1251,15 @@ dependencies = [
"idna",
"matches",
"percent-encoding",
+ "serde",
]
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
[[package]]
name = "vec_map"
version = "0.8.2"
diff --git a/Cargo.toml b/Cargo.toml
index ef4be19..84e7883 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -27,6 +27,7 @@ anyhow = "^1"
cargo-lock = "^7.0"
cargo_metadata = "^0.14"
itertools = "^0.10"
+rustsec = "0.24.2"
structopt = "^0.3"
serde = { version = "1.0", features = ["derive"] }
time = "^0.2"
diff --git a/src/audit.rs b/src/audit.rs
new file mode 100644
index 0000000..8ea8e43
--- /dev/null
+++ b/src/audit.rs
@@ -0,0 +1,96 @@
+use std::env;
+use std::path::Path;
+use std::process::Command;
+
+use anyhow::{format_err, Context, Result};
+use rustsec::lockfile::Lockfile;
+use rustsec::report::{Settings, VulnerabilityInfo};
+use rustsec::{Database, Report, Vulnerability};
+
+fn generate_lockfile(workspace_root: &Path, manifest_path: Option<&Path>) -> Result<Lockfile> {
+ let lockfile = workspace_root.join("Cargo.lock");
+ let mut command = Command::new(env::var("CARGO").unwrap_or_else(|_| "cargo".into()));
+
+ if lockfile.exists() {
+ return Lockfile::load(lockfile).context("Failed to load lockfile");
+ }
+
+ command.arg("generate-lockfile");
+
+ if let Some(path) = manifest_path {
+ command.arg("--manifest-path");
+ command.arg(path.as_os_str());
+ }
+
+ let status = command
+ .status()
+ .context("Failed to run `cargo generate-lockfile`")?;
+
+ match status.code() {
+ Some(0) => Lockfile::load(lockfile).context("Failed to load lockfile"),
+ Some(code) => Err(format_err!(
+ "Non-zero status ({}) on `cargo generate-lockfile`",
+ code,
+ )),
+ None => Err(format_err!(
+ "Unexpected termination on `cargo generate-lockfile`",
+ )),
+ }
+}
+
+pub fn audit_package(workspace_root: &Path, manifest_path: Option<&Path>) -> Result<()> {
+ let database = Database::fetch().context("Failed to fetch security advisory database")?;
+ let lockfile = generate_lockfile(workspace_root, manifest_path)?;
+ let settings = Settings::default();
+ let report = Report::generate(&database, &lockfile, &settings);
+
+ if report.vulnerabilities.found {
+ let VulnerabilityInfo { count, list, .. } = report.vulnerabilities;
+
+ let mut message = match count {
+ 1 => format!("Found {} vulnerability:\n", count),
+ _ => format!("Found {} vulnerabilities:\n", count),
+ };
+
+ for Vulnerability {
+ package,
+ versions,
+ advisory,
+ ..
+ } in list
+ {
+ message.push('\n');
+ message.push_str(&format!("Crate: {}\n", package.name));
+ message.push_str(&format!("Version: {}\n", package.version.to_string()));
+ message.push_str(&format!("Title: {}\n", advisory.title));
+ message.push_str(&format!("Date: {}\n", advisory.date.as_str()));
+ message.push_str(&format!("ID: {}\n", advisory.id));
+
+ if let Some(url) = advisory.id.url() {
+ message.push_str(&format!("URL: {}\n", url));
+ } else if let Some(url) = &advisory.url {
+ message.push_str(&format!("URL: {}\n", url));
+ }
+
+ if versions.patched().is_empty() {
+ message.push_str("Solution: No solution available\n");
+ } else {
+ let patched = versions
+ .patched()
+ .iter()
+ .map(ToString::to_string)
+ .collect::<Vec<_>>()
+ .as_slice()
+ .join(" or ");
+
+ message.push_str(&format!("Solution: Upgrade to {}\n", patched));
+ }
+ }
+
+ message.push_str("\nPlease fix the issues or use \"--noaudit\" flag.\n");
+
+ return Err(format_err!(message));
+ }
+
+ Ok(())
+}
diff --git a/src/lib.rs b/src/lib.rs
index 6b2d2d3..f478bc0 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -8,6 +8,7 @@
* except according to those terms.
*/
+mod audit;
mod license;
mod metadata;
@@ -18,10 +19,11 @@ use std::collections::BTreeSet;
use std::fs::OpenOptions;
use std::path::Path;
+use audit::audit_package;
use license::{normalize_license, split_spdx_license};
use metadata::EbuildConfig;
-pub fn gen_ebuild_data(manifest_path: Option<&Path>) -> Result<EbuildConfig> {
+pub fn gen_ebuild_data(manifest_path: Option<&Path>, audit: bool) -> Result<EbuildConfig> {
let mut cmd = MetadataCommand::new();
cmd.features(CargoOpt::AllFeatures);
@@ -44,6 +46,10 @@ pub fn gen_ebuild_data(manifest_path: Option<&Path>) -> Result<EbuildConfig> {
.as_ref()
.ok_or_else(|| format_err!("cargo metadata failed to resolve the root package"))?;
+ if audit {
+ audit_package(metadata.workspace_root.as_ref(), manifest_path)?;
+ }
+
let mut licenses = BTreeSet::new();
let mut crates = Vec::new();
let mut root_pkg = None;
diff --git a/src/main.rs b/src/main.rs
index 12dd0e0..1072094 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -22,9 +22,13 @@ struct Args {
#[structopt(name = "PATH", long = "manifest-path", parse(from_os_str))]
/// Path to Cargo.toml.
manifest_path: Option<PathBuf>,
+
#[structopt(name = "TEMPLATE", long = "template-path", short)]
/// Non-standard template
template_path: Option<PathBuf>,
+
+ #[structopt(long)]
+ noaudit: bool,
}
#[derive(StructOpt, Debug)]
@@ -45,8 +49,7 @@ fn main() -> Result<()> {
let Opt::Ebuild(opt) = Opt::from_args();
// compute the data from the package that the build needs
- let ebuild_data = gen_ebuild_data(opt.manifest_path.as_deref())?;
-
+ let ebuild_data = gen_ebuild_data(opt.manifest_path.as_deref(), !opt.noaudit)?;
let ebuild_path = format!("{}-{}.ebuild", ebuild_data.name, ebuild_data.version);
write_ebuild(ebuild_data, ebuild_path.as_ref(), opt.template_path.as_deref())?;
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [gentoo-commits] proj/cargo-ebuild:master commit in: /, src/
@ 2021-10-07 16:23 Georgy Yakovlev
0 siblings, 0 replies; 4+ messages in thread
From: Georgy Yakovlev @ 2021-10-07 16:23 UTC (permalink / raw
To: gentoo-commits
commit: 02ddf334369229a1f7aab44a8e919a954e2124c5
Author: Miezhiko <Miezhiko <AT> gmail <DOT> com>
AuthorDate: Wed Sep 22 11:10:28 2021 +0000
Commit: Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
CommitDate: Thu Oct 7 16:21:54 2021 +0000
URL: https://gitweb.gentoo.org/proj/cargo-ebuild.git/commit/?id=02ddf334
package-name option support, it needs for Cargo.toml without root package
Signed-off-by: Miezhiko <Miezhiko <AT> gmail.com>
Signed-off-by: Georgy Yakovlev <gyakovlev <AT> gentoo.org>
.gitignore | 1 +
Cargo.lock | 307 +++++++++++-------------------------------------------------
Cargo.toml | 4 +-
src/lib.rs | 25 +++--
src/main.rs | 8 +-
5 files changed, 84 insertions(+), 261 deletions(-)
diff --git a/.gitignore b/.gitignore
index 11d7baa..a2687e6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
target
*.rs.bk
+*.ebuild
diff --git a/Cargo.lock b/Cargo.lock
index a2137a9..3f35df7 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -22,9 +22,9 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.43"
+version = "1.0.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28ae2b3dec75a406790005a200b1bd89785afc02517a00ca99ecfe093ee9e6cf"
+checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1"
[[package]]
name = "atty"
@@ -43,12 +43,6 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
-[[package]]
-name = "base-x"
-version = "0.2.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b"
-
[[package]]
name = "bitflags"
version = "1.3.2"
@@ -78,19 +72,13 @@ dependencies = [
[[package]]
name = "bstr"
-version = "0.2.16"
+version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
dependencies = [
"memchr",
]
-[[package]]
-name = "bumpalo"
-version = "3.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631"
-
[[package]]
name = "byte-tools"
version = "0.3.1"
@@ -134,7 +122,7 @@ version = "7.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fb04b88bd5b2036e30704f95c6ee16f3b5ca3b4ca307da2889d9006648e5c88"
dependencies = [
- "semver 1.0.4",
+ "semver",
"serde",
"toml",
"url",
@@ -157,16 +145,16 @@ checksum = "c297bd3135f558552f99a0daa180876984ea2c4ffa7470314540dff8c654109a"
dependencies = [
"camino",
"cargo-platform",
- "semver 1.0.4",
+ "semver",
"serde",
"serde_json",
]
[[package]]
name = "cc"
-version = "1.0.69"
+version = "1.0.70"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e70cc2f62c6ce1868963827bd677764c62d07c3d9a3e1fb1177ee1a9ab199eb2"
+checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0"
dependencies = [
"jobserver",
]
@@ -192,12 +180,6 @@ dependencies = [
"vec_map",
]
-[[package]]
-name = "const_fn"
-version = "0.4.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f92cfa0fd5690b3cf8c1ef2cabbd9b7ef22fa53cf5e1f92b05103f6d5d1cf6e7"
-
[[package]]
name = "crates-index"
version = "0.17.0"
@@ -209,7 +191,7 @@ dependencies = [
"hex",
"home",
"memchr",
- "semver 1.0.4",
+ "semver",
"serde",
"serde_derive",
"serde_json",
@@ -244,12 +226,6 @@ dependencies = [
"generic-array",
]
-[[package]]
-name = "discard"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
-
[[package]]
name = "either"
version = "1.6.1"
@@ -306,9 +282,9 @@ dependencies = [
[[package]]
name = "git2"
-version = "0.13.21"
+version = "0.13.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "659cd14835e75b64d9dba5b660463506763cf0aa6cb640aeeb0e98d841093490"
+checksum = "9c1cbbfc9a1996c6af82c2b4caf828d2c653af4fcdbb0e5674cc966eee5a4197"
dependencies = [
"bitflags",
"libc",
@@ -462,15 +438,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
-version = "0.2.101"
+version = "0.2.102"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21"
+checksum = "a2a5ac8f984bfcf3a823267e5fde638acc3325f6496633a5da6bb6eb2171e103"
[[package]]
name = "libgit2-sys"
-version = "0.12.22+1.1.0"
+version = "0.12.23+1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89c53ac117c44f7042ad8d8f5681378dfbc6010e49ec2c0d1f11dfedc7a4a1c3"
+checksum = "29730a445bae719db3107078b46808cc45a5b7a6bae3f31272923af969453356"
dependencies = [
"cc",
"libc",
@@ -553,9 +529,9 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a"
[[package]]
name = "openssl-sys"
-version = "0.9.66"
+version = "0.9.67"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1996d2d305e561b70d1ee0c53f1542833f4e1ac6ce9a6708b6ff2738ca67dc82"
+checksum = "69df2d8dfc6ce3aaf44b40dec6f487d5a886516cf6879c49e98e0710f310a058"
dependencies = [
"autocfg",
"cc",
@@ -615,9 +591,9 @@ dependencies = [
[[package]]
name = "phf"
-version = "0.9.0"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2ac8b67553a7ca9457ce0e526948cad581819238f4a9d1ea74545851fa24f37"
+checksum = "b9fc3db1018c4b59d7d582a739436478b6035138b6aecbce989fc91c3e98409f"
dependencies = [
"phf_macros",
"phf_shared",
@@ -626,9 +602,9 @@ dependencies = [
[[package]]
name = "phf_generator"
-version = "0.9.1"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d43f3220d96e0080cc9ea234978ccd80d904eafb17be31bb0f76daaea6493082"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
dependencies = [
"phf_shared",
"rand",
@@ -636,9 +612,9 @@ dependencies = [
[[package]]
name = "phf_macros"
-version = "0.9.0"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b706f5936eb50ed880ae3009395b43ed19db5bff2ebd459c95e7bf013a89ab86"
+checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0"
dependencies = [
"phf_generator",
"phf_shared",
@@ -650,9 +626,9 @@ dependencies = [
[[package]]
name = "phf_shared"
-version = "0.9.0"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a68318426de33640f02be62b4ae8eb1261be2efbc337b60c54d845bf4484e0d9"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
dependencies = [
"siphasher",
]
@@ -710,9 +686,9 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
[[package]]
name = "proc-macro2"
-version = "1.0.28"
+version = "1.0.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c7ed8b8c7b886ea3ed7dde405212185f423ab44682667c8c6dd14aa1d9f6612"
+checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d"
dependencies = [
"unicode-xid",
]
@@ -783,20 +759,11 @@ version = "0.6.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
-[[package]]
-name = "rustc_version"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
-dependencies = [
- "semver 0.9.0",
-]
-
[[package]]
name = "rustsec"
-version = "0.24.2"
+version = "0.24.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c29c220a60ceaeedb2c5bf51826b3d3c5d77b2523693f0579c8a85dd03f11947"
+checksum = "bcf7c16b24c1facb34fc8392fdcf4986c369335973441ccc2ff11ba7341b7ee2"
dependencies = [
"cargo-lock",
"crates-index",
@@ -807,7 +774,7 @@ dependencies = [
"humantime",
"humantime-serde",
"platforms",
- "semver 1.0.4",
+ "semver",
"serde",
"smol_str",
"thiserror",
@@ -830,15 +797,6 @@ dependencies = [
"winapi-util",
]
-[[package]]
-name = "semver"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
-dependencies = [
- "semver-parser",
-]
-
[[package]]
name = "semver"
version = "1.0.4"
@@ -848,26 +806,20 @@ dependencies = [
"serde",
]
-[[package]]
-name = "semver-parser"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-
[[package]]
name = "serde"
-version = "1.0.129"
+version = "1.0.130"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d1f72836d2aa753853178eda473a3b9d8e4eefdaf20523b919677e6de489f8f1"
+checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.129"
+version = "1.0.130"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e57ae87ad533d9a56427558b516d0adac283614e347abf85b0dc0cbbf0a249f3"
+checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b"
dependencies = [
"proc-macro2",
"quote",
@@ -876,9 +828,9 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.66"
+version = "1.0.68"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "336b10da19a12ad094b59d870ebde26a45402e5b470add4b5fd03c5048a32127"
+checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8"
dependencies = [
"itoa",
"ryu",
@@ -897,17 +849,11 @@ dependencies = [
"opaque-debug",
]
-[[package]]
-name = "sha1"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
-
[[package]]
name = "siphasher"
-version = "0.3.6"
+version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "729a25c17d72b06c68cb47955d44fda88ad2d3e7d77e025663fdd69b93dd71a1"
+checksum = "533494a8f9b724d33625ab53c6c4800f7cc445895924a8ef649222dcb76e938b"
[[package]]
name = "smartstring"
@@ -925,70 +871,12 @@ version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ca0f7ce3a29234210f0f4f0b56f8be2e722488b95cb522077943212da3b32eb"
-[[package]]
-name = "standback"
-version = "0.2.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff"
-dependencies = [
- "version_check",
-]
-
[[package]]
name = "static_assertions"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
-[[package]]
-name = "stdweb"
-version = "0.4.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5"
-dependencies = [
- "discard",
- "rustc_version",
- "stdweb-derive",
- "stdweb-internal-macros",
- "stdweb-internal-runtime",
- "wasm-bindgen",
-]
-
-[[package]]
-name = "stdweb-derive"
-version = "0.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef"
-dependencies = [
- "proc-macro2",
- "quote",
- "serde",
- "serde_derive",
- "syn",
-]
-
-[[package]]
-name = "stdweb-internal-macros"
-version = "0.2.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11"
-dependencies = [
- "base-x",
- "proc-macro2",
- "quote",
- "serde",
- "serde_derive",
- "serde_json",
- "sha1",
- "syn",
-]
-
-[[package]]
-name = "stdweb-internal-runtime"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
-
[[package]]
name = "strsim"
version = "0.8.0"
@@ -997,9 +885,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
[[package]]
name = "structopt"
-version = "0.3.22"
+version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69b041cdcb67226aca307e6e7be44c8806423d83e018bd662360a93dabce4d71"
+checksum = "bf9d950ef167e25e0bdb073cf1d68e9ad2795ac826f2f3f59647817cf23c0bfa"
dependencies = [
"clap",
"lazy_static",
@@ -1008,9 +896,9 @@ dependencies = [
[[package]]
name = "structopt-derive"
-version = "0.4.15"
+version = "0.4.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7813934aecf5f51a54775e00068c237de98489463968231a51746bbbc03f9c10"
+checksum = "134d838a2c9943ac3125cf6df165eda53493451b719f3255b2a26b85f772d0ba"
dependencies = [
"heck",
"proc-macro-error",
@@ -1021,9 +909,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "1.0.75"
+version = "1.0.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7f58f7e8eaa0009c5fec437aabf511bd9933e4b2d7407bd05273c01a8906ea7"
+checksum = "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84"
dependencies = [
"proc-macro2",
"quote",
@@ -1057,18 +945,18 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "1.0.26"
+version = "1.0.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93119e4feac1cbe6c798c34d3a53ea0026b0b1de6a120deef895137c0529bfe2"
+checksum = "fa6f76457f59514c7eeb4e59d891395fab0b2fd1d40723ae737d64153392e9c6"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.26"
+version = "1.0.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745"
+checksum = "8a36768c0fbf1bb15eca10defa29526bda730a2376c2ab4393ccfa16fb1a318d"
dependencies = [
"proc-macro2",
"quote",
@@ -1086,47 +974,18 @@ dependencies = [
[[package]]
name = "time"
-version = "0.2.27"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242"
+checksum = "3e0a10c9a9fb3a5dce8c2239ed670f1a2569fcf42da035f5face1b19860d52b0"
dependencies = [
- "const_fn",
"libc",
- "standback",
- "stdweb",
- "time-macros",
- "version_check",
- "winapi",
-]
-
-[[package]]
-name = "time-macros"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1"
-dependencies = [
- "proc-macro-hack",
- "time-macros-impl",
-]
-
-[[package]]
-name = "time-macros-impl"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f"
-dependencies = [
- "proc-macro-hack",
- "proc-macro2",
- "quote",
- "standback",
- "syn",
]
[[package]]
name = "tinyvec"
-version = "1.3.1"
+version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "848a1e1181b9f6753b5e96a092749e29b11d19ede67dfbbd6c7dc7e0f49b5338"
+checksum = "5241dd6f21443a3606b432718b166d3cedc962fd4b8bea54a8bc7f514ebda986"
dependencies = [
"tinyvec_macros",
]
@@ -1148,9 +1007,9 @@ dependencies = [
[[package]]
name = "typenum"
-version = "1.13.0"
+version = "1.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06"
+checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec"
[[package]]
name = "ucd-trie"
@@ -1231,9 +1090,9 @@ checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
[[package]]
name = "unicode-width"
-version = "0.1.8"
+version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
[[package]]
name = "unicode-xid"
@@ -1289,60 +1148,6 @@ version = "0.10.2+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
-[[package]]
-name = "wasm-bindgen"
-version = "0.2.76"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ce9b1b516211d33767048e5d47fa2a381ed8b76fc48d2ce4aa39877f9f183e0"
-dependencies = [
- "cfg-if",
- "wasm-bindgen-macro",
-]
-
-[[package]]
-name = "wasm-bindgen-backend"
-version = "0.2.76"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cfe8dc78e2326ba5f845f4b5bf548401604fa20b1dd1d365fb73b6c1d6364041"
-dependencies = [
- "bumpalo",
- "lazy_static",
- "log",
- "proc-macro2",
- "quote",
- "syn",
- "wasm-bindgen-shared",
-]
-
-[[package]]
-name = "wasm-bindgen-macro"
-version = "0.2.76"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44468aa53335841d9d6b6c023eaab07c0cd4bddbcfdee3e2bb1e8d2cb8069fef"
-dependencies = [
- "quote",
- "wasm-bindgen-macro-support",
-]
-
-[[package]]
-name = "wasm-bindgen-macro-support"
-version = "0.2.76"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0195807922713af1e67dc66132c7328206ed9766af3858164fb583eedc25fbad"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
- "wasm-bindgen-backend",
- "wasm-bindgen-shared",
-]
-
-[[package]]
-name = "wasm-bindgen-shared"
-version = "0.2.76"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "acdb075a845574a1fa5f09fd77e43f7747599301ea3417a9fbffdeedfc1f4a29"
-
[[package]]
name = "winapi"
version = "0.3.9"
diff --git a/Cargo.toml b/Cargo.toml
index 902d237..4140a60 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -30,10 +30,10 @@ itertools = "^0.10"
rustsec = "0.24.2"
structopt = "^0.3"
serde = { version = "1.0", features = ["derive"] }
-time = "^0.2"
+time = "^0.3"
[dependencies.phf]
-version = "0.9"
+version = "0.10"
features = ["macros"]
[dependencies.tera]
diff --git a/src/lib.rs b/src/lib.rs
index f478bc0..94ebf71 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -23,7 +23,9 @@ use audit::audit_package;
use license::{normalize_license, split_spdx_license};
use metadata::EbuildConfig;
-pub fn gen_ebuild_data(manifest_path: Option<&Path>, audit: bool) -> Result<EbuildConfig> {
+pub fn gen_ebuild_data( manifest_path: Option<&Path>
+ , package_name: Option<&str>
+ , audit: bool ) -> Result<EbuildConfig> {
let mut cmd = MetadataCommand::new();
cmd.features(CargoOpt::AllFeatures);
@@ -41,10 +43,19 @@ pub fn gen_ebuild_data(manifest_path: Option<&Path>, audit: bool) -> Result<Ebui
.as_ref()
.ok_or_else(|| format_err!("cargo metadata did not resolve the depend graph"))?;
- let root = resolve
- .root
- .as_ref()
- .ok_or_else(|| format_err!("cargo metadata failed to resolve the root package"))?;
+ let root =
+ if let Some(pkg_name) = package_name {
+ let found_package =
+ metadata.packages.iter().find(|&p| {
+ p.name == pkg_name
+ }).ok_or_else(|| format_err!("cargo metadata contains no specified package"))?;
+ &found_package.id
+ } else {
+ resolve
+ .root
+ .as_ref()
+ .ok_or_else(|| format_err!("cargo metadata failed to resolve the root package"))?
+ };
if audit {
audit_package(metadata.workspace_root.as_ref(), manifest_path)?;
@@ -54,7 +65,7 @@ pub fn gen_ebuild_data(manifest_path: Option<&Path>, audit: bool) -> Result<Ebui
let mut crates = Vec::new();
let mut root_pkg = None;
- for pkg in metadata.packages {
+ for pkg in &metadata.packages {
if &pkg.id == root {
root_pkg = Some(pkg.clone());
}
@@ -79,7 +90,7 @@ pub fn gen_ebuild_data(manifest_path: Option<&Path>, audit: bool) -> Result<Ebui
println!("WARNING: {} uses a license-file, not handled", pkg.name);
}
- if let Some(src) = pkg.source {
+ if let Some(src) = &pkg.source {
// Check if the crate is available at crates.io
if src.is_crates_io() {
crates.push(format!("\t{}-{}\n", pkg.name, pkg.version));
diff --git a/src/main.rs b/src/main.rs
index 1072094..edffb18 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -23,6 +23,10 @@ struct Args {
/// Path to Cargo.toml.
manifest_path: Option<PathBuf>,
+ #[structopt(name = "PACKAGE", long = "package-name")]
+ /// Desired package name from cargo workspace
+ package_name: Option<String>,
+
#[structopt(name = "TEMPLATE", long = "template-path", short)]
/// Non-standard template
template_path: Option<PathBuf>,
@@ -49,7 +53,9 @@ fn main() -> Result<()> {
let Opt::Ebuild(opt) = Opt::from_args();
// compute the data from the package that the build needs
- let ebuild_data = gen_ebuild_data(opt.manifest_path.as_deref(), !opt.noaudit)?;
+ let ebuild_data = gen_ebuild_data( opt.manifest_path.as_deref()
+ , opt.package_name.as_deref()
+ , !opt.noaudit )?;
let ebuild_path = format!("{}-{}.ebuild", ebuild_data.name, ebuild_data.version);
write_ebuild(ebuild_data, ebuild_path.as_ref(), opt.template_path.as_deref())?;
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-10-07 16:23 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-10-07 16:23 [gentoo-commits] proj/cargo-ebuild:master commit in: /, src/ Georgy Yakovlev
-- strict thread matches above, loose matches on Subject: below --
2021-08-26 7:51 Georgy Yakovlev
2021-08-26 7:51 Georgy Yakovlev
2021-08-25 15:35 Georgy Yakovlev
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox