private int dfsVisit(PackInfo u, Map names, Map edges) {
    u.colour = PackInfo.GREY;
    List deps = u.getDependencies();
    if (deps != null) {
      for (int i = 0; i < deps.size(); i++) {
        String name = (String) deps.get(i);
        PackInfo v = (PackInfo) names.get(name);
        if (v == null) {
          System.out.println("Failed to find dependency: " + name);
          return -1;
        }
        Edge edge = new Edge(u, v);
        if (edges.get(edge) == null) edges.put(edge, new Integer(v.colour));

        if (v.colour == PackInfo.WHITE) {

          final int result = dfsVisit(v, names, edges);
          if (result != 0) return result;
        }
      }
    }
    u.colour = PackInfo.BLACK;
    return 0;
  }