private static function visit(&$ordering, &$tempMarked, $nodes, $curNode)
 {
     // if $curNode is not in $nodes then it is not a package we care about.
     if (!isset($nodes[$curNode])) {
         $tempMarked[$curNode] = false;
         return;
     }
     if (isset($tempMarked[$curNode]) && $tempMarked[$curNode]) {
         throw new \UnexpectedValueException('Cycle in the dependencies of the project');
     }
     if (!isset($tempMarked[$curNode])) {
         $tempMarked[$curNode] = true;
         foreach ($nodes[$curNode] as $node) {
             TopologicalSort::visit($ordering, $tempMarked, $nodes, $node);
         }
         $tempMarked[$curNode] = false;
         $ordering[] = $curNode;
     }
 }