Problem
I noticed that when a dependency, example.one
, was removed from another namespace, example.two
, example.one
still showed up under [::track/deps :dependents 'example.two]
in the tracker after an invocation of repl/scan
.
After digging into this for some time, I saw that the implementation of remove-node
in MapDependencyGraph
didn't make any changes to the :dependents
attribute.
This seems like a mistake to me, as the remove-node
docstring reads:
Removes the node from the dependency graph without removing it as a
dependency of other nodes. That is, removes all outgoing edges from
node.
The implementation of remove-node
follows:
(remove-node [graph node]
(MapDependencyGraph.
(dissoc dependencies node)
dependents))
This removes outgoing edges from dependencies
, but if dependents
is effectively an inverse of dependencies
, then I'd expect to see some sort of removal from dependents
as well. Instead, dependents
remains unmodified.
Proposed Fix
If this is indeed a bug, and not a misunderstanding on my part, I have a fix here along with a couple tests on my behavioral-tests branch that removes node
from values in the dependents
map.
Does this align with the expected behavior of remove-node
, or am I misunderstanding the intended behavior of this function?