MCPcopy Create free account
hub / github.com/nodejs/node / BuildDependencyList

Function BuildDependencyList

tools/gyp/pylib/gyp/input.py:1929–1978  ·  view source on GitHub ↗
(targets)

Source from the content-addressed store, hash-verified

1927
1928
1929def BuildDependencyList(targets):
1930 # Create a DependencyGraphNode for each target. Put it into a dict for easy
1931 # access.
1932 dependency_nodes = {}
1933 for target, spec in targets.items():
1934 if target not in dependency_nodes:
1935 dependency_nodes[target] = DependencyGraphNode(target)
1936
1937 # Set up the dependency links. Targets that have no dependencies are treated
1938 # as dependent on root_node.
1939 root_node = DependencyGraphNode(None)
1940 for target, spec in targets.items():
1941 target_node = dependency_nodes[target]
1942 dependencies = spec.get("dependencies")
1943 if not dependencies:
1944 target_node.dependencies = [root_node]
1945 root_node.dependents.append(target_node)
1946 else:
1947 for dependency in dependencies:
1948 dependency_node = dependency_nodes.get(dependency)
1949 if not dependency_node:
1950 raise GypError(
1951 "Dependency '%s' not found while "
1952 "trying to load target %s" % (dependency, target)
1953 )
1954 target_node.dependencies.append(dependency_node)
1955 dependency_node.dependents.append(target_node)
1956
1957 flat_list = root_node.FlattenToList()
1958
1959 # If there's anything left unvisited, there must be a circular dependency
1960 # (cycle).
1961 if len(flat_list) != len(targets):
1962 if not root_node.dependents:
1963 # If all targets have dependencies, add the first target as a dependent
1964 # of root_node so that the cycle can be discovered from root_node.
1965 target = next(iter(targets))
1966 target_node = dependency_nodes[target]
1967 target_node.dependencies.append(root_node)
1968 root_node.dependents.append(target_node)
1969
1970 cycles = []
1971 for cycle in root_node.FindCycles():
1972 paths = [node.ref for node in cycle]
1973 cycles.append("Cycle: %s" % " -> ".join(paths))
1974 raise DependencyGraphNode.CircularException(
1975 "Cycles in dependency graph detected:\n" + "\n".join(cycles)
1976 )
1977
1978 return [dependency_nodes, flat_list]
1979
1980
1981def VerifyNoGYPFileCircularDependencies(targets):

Callers 1

LoadFunction · 0.85

Calls 9

FlattenToListMethod · 0.95
FindCyclesMethod · 0.95
GypErrorClass · 0.90
DependencyGraphNodeClass · 0.85
getMethod · 0.65
nextFunction · 0.50
itemsMethod · 0.45
appendMethod · 0.45
joinMethod · 0.45

Tested by

no test coverage detected