cargo-deps icon indicating copy to clipboard operation
cargo-deps copied to clipboard

Config not working when using as a library

Open Algirdyz opened this issue 4 years ago • 3 comments

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.

Algirdyz avatar Feb 27 '20 17:02 Algirdyz

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.

mrcnski avatar Feb 27 '20 18:02 mrcnski

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] }]

Algirdyz avatar Mar 02 '20 12:03 Algirdyz

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!

mrcnski avatar Mar 14 '20 11:03 mrcnski