pub fn is_head<G>(graph: &G, node_id: NodeId) -> boolwhere
    G: SwhBackwardGraph + SwhGraphWithProperties,
    <G as SwhGraphWithProperties>::Maps: Maps,
Expand description

Returns whether the node is a release or a revision with a release/snapshot predecessor

Example

use swh_graph::graph_builder::GraphBuilder;
use swh_graph::swhid;

use swh_graph_provenance::filters::is_head;
let mut builder = GraphBuilder::default();
let rev0 = builder
    .node(swhid!(swh:1:rev:0000000000000000000000000000000000000000))
    .unwrap()
    .done();
let rev1 = builder
    .node(swhid!(swh:1:rev:0000000000000000000000000000000000000001))
    .unwrap()
    .done();
let rev2 = builder
    .node(swhid!(swh:1:rev:0000000000000000000000000000000000000002))
    .unwrap()
    .done();
let rev3 = builder
    .node(swhid!(swh:1:rev:0000000000000000000000000000000000000003))
    .unwrap()
    .done();
let rel4 = builder
    .node(swhid!(swh:1:rel:0000000000000000000000000000000000000004))
    .unwrap()
    .done();
let rel5 = builder
    .node(swhid!(swh:1:rel:0000000000000000000000000000000000000005))
    .unwrap()
    .done();
let snp6 = builder
    .node(swhid!(swh:1:snp:0000000000000000000000000000000000000006))
    .unwrap()
    .done();

/*
 *  snp6 -> rev1 -> rev0
 *    \
 *     +--> rel5
 *
 *  rel4 -> rev3 -> rev2
 */

builder.arc(snp6, rev1); // snp6 has rev1 as branch tip
builder.arc(rev1, rev0); // rev0 is parent of rev1
builder.arc(snp6, rel5); // snp6 has rel5 as branch tip

builder.arc(rel4, rev3); // rel4 points to rev3
builder.arc(rev3, rev2); // rev2 is parent of rev3

let graph = builder.done().unwrap();

assert!(!is_head(&graph, rev0), "rev0 should not be a head revision");
assert!(is_head(&graph, rev1), "rev1 should be a head revision (pointed by a snapshot)");
assert!(!is_head(&graph, rev2), "rev2 should not be a head revision");
assert!(is_head(&graph, rev3), "rev3 should be a head revision (pointed by a release)");
assert!(is_head(&graph, rel4), "rev4 should be a head (it's a release)");
assert!(is_head(&graph, rel5), "rel5 should be a head (it's a release)");