martine/ninja — pull request #521 by riannucci (2013-03-18 17:36:59+00:00)
Title: Fix duplicate edge Pool crash in the minimally invasive way

Another alternative to #519 and #516. Fixes the issue brought up here: https://groups.google.com/forum/?fromgroups=#!topic/ninja-build/CNqaIwlTgVo

Repro of problem is:
```
pool compile
depth = 1
rule gen_foo
command = touch foo.cpp
rule gen_bar
command = touch bar.cpp
rule echo
command = echo $out > $out
build foo.cpp.obj: echo foo.cpp || foo.cpp
pool = compile
build bar.cpp.obj: echo bar.cpp || bar.cpp
pool = compile
build libfoo.a: echo foo.cpp.obj bar.cpp.obj
build foo.cpp: gen_foo
build bar.cpp: gen_bar
build all: phony libfoo.a
```

(Note the addition of bar.* . This demonstrates the importance changing Pool's internal container to a set. Run with -j2+ to get this to crash reliably).

This fixes just the minimal amount to get Pools working again. The actual dependency graph still has duplicate edges, but that 'problem' saves us roughly a second in dependency parsing time (attempted fix was #519).

This pull parses chromium in exactly the same amount of time as before (since chromium doesn't use pools).