Package hudson.model
Class DependencyGraph
java.lang.Object
hudson.model.DependencyGraph
- All Implemented Interfaces:
Comparator<AbstractProject>
Maintains the build dependencies between
AbstractProject
s
for efficient dependency computation.
The "master" data of dependencies are owned/persisted/maintained by
individual AbstractProject
s, but because of that, it's relatively
slow to compute backward edges.
This class builds the complete bi-directional dependency graph
by collecting information from all AbstractProject
s.
Once built, DependencyGraph
is immutable, and every time
there's a change (which is relatively rare), a new instance
will be created. This eliminates the need of synchronization.
- Author:
- Kohsuke Kawaguchi
- See Also:
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
Represents an edge in the dependency graph. -
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
addDependency
(AbstractProject upstream, AbstractProject downstream) Deprecated.void
addDependency
(AbstractProject upstream, Collection<? extends AbstractProject> downstream) Deprecated.since 1.341void
Called during the dependency graph build phase to add a dependency edge.void
addDependency
(Collection<? extends AbstractProject> upstream, AbstractProject downstream) Deprecated.since 1.341void
addDependencyDeclarers
(AbstractProject upstream, Collection<?> possibleDependecyDeclarers) Lists upDependencyDeclarer
from the collection and let them builds dependencies.void
build()
int
compare
(AbstractProject o1, AbstractProject o2) Compare two Projects based on the topological order defined by this Dependency Graph<T> T
getComputationalData
(Class<T> key) Gets temporary data which is needed for building up the dependency graph.Gets all the immediate downstream projects (IOW forward edges) of the given project.List<AbstractProject<?,
?>> Returns all the projects in the topological order of the dependency.Gets all the direct and indirect downstream dependencies of the given project.Gets all the direct and indirect upstream dependencies of the given project.Gets all the immediate upstream projects (IOW backward edges) of the given project.boolean
Returns true if a project has a non-direct dependency to another project.<T> void
putComputationalData
(Class<T> key, T value) Adds data which is useful for the time when the dependency graph is built up.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface java.util.Comparator
equals, reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
-
Field Details
-
EMPTY
-
-
Constructor Details
-
DependencyGraph
public DependencyGraph()Builds the dependency graph.
-
-
Method Details
-
build
public void build() -
putComputationalData
Adds data which is useful for the time when the dependency graph is built up. All this data will be cleaned once the dependency graph creation has finished. -
getComputationalData
Gets temporary data which is needed for building up the dependency graph. -
getDownstream
Gets all the immediate downstream projects (IOW forward edges) of the given project.- Returns:
- can be empty but never null.
-
getUpstream
Gets all the immediate upstream projects (IOW backward edges) of the given project.- Returns:
- can be empty but never null.
-
getDownstreamDependencies
- Since:
- 1.341
-
getUpstreamDependencies
- Since:
- 1.341
-
addDependency
Deprecated.since 1.341; useaddDependency(Dependency)
-
addDependency
Called during the dependency graph build phase to add a dependency edge. -
addDependency
@Deprecated public void addDependency(AbstractProject upstream, Collection<? extends AbstractProject> downstream) Deprecated.since 1.341 -
addDependency
@Deprecated public void addDependency(Collection<? extends AbstractProject> upstream, AbstractProject downstream) Deprecated.since 1.341 -
addDependencyDeclarers
public void addDependencyDeclarers(AbstractProject upstream, Collection<?> possibleDependecyDeclarers) Lists upDependencyDeclarer
from the collection and let them builds dependencies. -
hasIndirectDependencies
Returns true if a project has a non-direct dependency to another project.A non-direct dependency is a path of dependency "edge"s from the source to the destination, where the length is greater than 1.
-
getTransitiveUpstream
Gets all the direct and indirect upstream dependencies of the given project. -
getTransitiveDownstream
Gets all the direct and indirect downstream dependencies of the given project. -
compare
Compare two Projects based on the topological order defined by this Dependency Graph- Specified by:
compare
in interfaceComparator<AbstractProject>
-
getTopologicallySorted
Returns all the projects in the topological order of the dependency. Intuitively speaking, the first one in the list is the source of the dependency graph, and the last one is the sink.- Since:
- 1.521
-
addDependency(Dependency)