cargo-deps
cargo-deps copied to clipboard
Config not working when using as a library
I am using this as an included libary in my Rust app and it seems to me that config you provide to get_dep_graph
function doesn't do anything. It still retrieves the entire graph. I can see that nodes have fields for dev and build and so on, but they don't actually match.
When running cargo deps outside rust in the root of the directory, it seems to work fine. Is there a special way to use it like a lib? It's not really documented.
Hi @Algirdyz, thanks for the report. Can you provide specific steps and code to reproduce your issue, and a copy of the output you're seeing?
The main
function just uses get_dep_graph
behind the scenes. We do have some tests for get_dep_graph
as a stand-alone function which use custom configs, but they aren't comprehensive by any means.
Yes, sorry should have done that :D
let cfg = Config{
manifest_path: format!("{}/{}", path_to_crate.to_string_lossy(), "Cargo.toml"),
regular_deps: true,
build_deps: false,
dev_deps: false,
optional_deps: false,
transitive_deps: true,
include_versions: true,
depth: None,
dot_file: None,
filter: None,
include_orphans: false,
subgraph: None,
subgraph_name: None
};
let dep_graph = get_dep_graph(cfg).unwrap();
println!("{:?}", dep_graph.nodes);
Running this on serde_json package for example outputs what you can see below. If you search for packages like automod
or autocfg
or trybuild
they are all in there and their fields is_dev and is_build are false. In my mind it they should either not show up with the config I used, or those fields should be set to true so I can filter them out myself.
If I run this this package from terminal then it works fine and these do not show up. Is the filtering happening in render function?
[ResolvedDep { name: "autocfg", ver: "1.0.0", force_write_ver: false, depth: Some(1), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [], parents: [9] }, ResolvedDep { name: "automod", ver: "0.1.2", force_write_ver: false, depth: Some(0), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [2, 3, 4], parents: [] }, ResolvedDep { name: "proc-macro2", ver: "1.0.9", force_write_ver: false, depth: Some(3), is_regular: true, is_build: false, is_dev: false, is_optional: false, children: [13], parents: [1, 3, 15, 18, 4] }, ResolvedDep { name: "quote", ver: "1.0.2", force_write_ver: false, depth: Some(3), is_regular: true, is_build: false, is_dev: false, is_optional: false, children: [2], parents: [1, 15, 18, 4] }, ResolvedDep { name: "syn", ver: "1.0.16", force_write_ver: false, depth: Some(3), is_regular: true, is_build: false, is_dev: false, is_optional: false, children: [2, 3, 13], parents: [1, 15, 18] }, ResolvedDep { name: "cc", ver: "1.0.50", force_write_ver: false, depth: Some(2), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [], parents: [14, 22] }, ResolvedDep { name: "cfg-if", ver: "0.1.10", force_write_ver: false, depth: Some(2), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [], parents: [22] }, ResolvedDep { name: "dissimilar", ver: "1.0.1", force_write_ver: false, depth: Some(1), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [], parents: [27] }, ResolvedDep { name: "glob", ver: "0.3.0", force_write_ver: false, depth: Some(1), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [], parents: [27] }, ResolvedDep { name: "indexmap", ver: "1.3.2", force_write_ver: false, depth: Some(0), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [0], parents: [] }, ResolvedDep { name: "itoa", ver: "0.4.5", force_write_ver: false, depth: Some(2), is_regular: true, is_build: false, is_dev: false, is_optional: false, children: [], parents: [20, 20] }, ResolvedDep { name: "lazy_static", ver: "1.4.0", force_write_ver: false, depth: Some(1), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [], parents: [27] }, ResolvedDep { name: "libc", ver: "0.2.67", force_write_ver: false, depth: Some(2), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [], parents: [22] }, ResolvedDep { name: "unicode-xid", ver: "0.2.0", force_write_ver: false, depth: Some(4), is_regular: true, is_build: false, is_dev: false, is_optional: false, children: [], parents: [2, 4] }, ResolvedDep { name: "psm", ver: "0.1.6", force_write_ver: false, depth: Some(2), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [5], parents: [22] }, ResolvedDep { name: "rustversion", ver: "1.0.2", force_write_ver: false, depth: Some(0), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [2, 3, 4], parents: [] }, ResolvedDep { name: "ryu", ver: "1.0.2", force_write_ver: false, depth: Some(2), is_regular: true, is_build: false, is_dev: false, is_optional: false, children: [], parents: [20, 20] }, ResolvedDep { name: "serde", ver: "1.0.104", force_write_ver: false, depth: Some(1), is_regular: true, is_build: false, is_dev: false, is_optional: false, children: [18], parents: [19, 20, 20, 21, 26, 27] }, ResolvedDep { name: "serde_derive", ver: "1.0.104", force_write_ver: false, depth: Some(2), is_regular: true, is_build: false, is_dev: false, is_optional: false, children: [2, 3, 4], parents: [17] }, ResolvedDep { name: "serde_bytes", ver: "0.11.3", force_write_ver: false, depth: Some(0), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [17], parents: [] }, ResolvedDep { name: "serde_json", ver: "1.0.48", force_write_ver: false, depth: Some(1), is_regular: true, is_build: false, is_dev: false, is_optional: false, children: [10, 16, 17, 10, 16, 17], parents: [27] }, ResolvedDep { name: "serde_stacker", ver: "0.1.1", force_write_ver: false, depth: Some(0), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [17, 22], parents: [] }, ResolvedDep { name: "stacker", ver: "0.1.6", force_write_ver: false, depth: Some(1), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [5, 6, 12, 14, 23], parents: [21] }, ResolvedDep { name: "winapi", ver: "0.3.8", force_write_ver: false, depth: Some(3), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [28, 29], parents: [22, 25] }, ResolvedDep { name: "termcolor", ver: "1.1.0", force_write_ver: false, depth: Some(1), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [25], parents: [27] }, ResolvedDep { name: "winapi-util", ver: "0.1.3", force_write_ver: false, depth: Some(2), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [23], parents: [24] }, ResolvedDep { name: "toml", ver: "0.5.6", force_write_ver: false, depth: Some(1), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [17], parents: [27] }, ResolvedDep { name: "trybuild", ver: "1.0.23", force_write_ver: false, depth: Some(0), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [7, 8, 11, 17, 20, 24, 26], parents: [] }, ResolvedDep { name: "winapi-i686-pc-windows-gnu", ver: "0.4.0", force_write_ver: false, depth: Some(4), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [], parents: [23] }, ResolvedDep { name: "winapi-x86_64-pc-windows-gnu", ver: "0.4.0", force_write_ver: false, depth: Some(4), is_regular: false, is_build: false, is_dev: false, is_optional: false, children: [], parents: [23] }]
Gotcha. Yes, filtering happens in the render function. I forgot about that when we split out the logic into a library. This should definitely be fixed!