def _verify_manifest_graph()

in appengine/runtime_builders/verify_manifest.py [0:0]


def _verify_manifest_graph(node_graph):
    for _, node in node_graph.items():
        seen = set()
        child = node
        while True:
            seen.add(child)
            if not child.child:
                break
            elif child.child not in node_graph.keys():
                logging.error('Non-existent alias provided for {0}: {1}'
                              .format(child.name, child.child))
                sys.exit(1)
            child = node_graph[child.child]
            if child in seen:
                logging.error('Circular dependency found in manifest! '
                              'Check node {0}'.format(child))
                sys.exit(1)
        if not child.isBuilder:
            logging.error('No terminating builder for alias {0}'
                          .format(node.name))
            sys.exit(1)