cylc/cylc — pull request #1011 by benfitzpatrick (2014-07-09 15:54:35+00:00)
Title: #983: restore runahead limit

Brought to you by #119.

This restores the `runahead limit` suite.rc option as an
ISO 8601 interval (together with integer hours for
backwards compatibility).

If the `runahead limit` is not specified, the automatic
runahead limit is now calculated as 2 x the smallest
interval between instances of the same task, as found
by comparing the first N points of each cycling sequence.
(N is hardcoded to 3 at the moment...).

Ideally, this would be adjusted automatically throughout,
maybe recomputed when a new cycle point becomes
present in the runahead pool. However, I think this kind
of dynamism is out of scope for #983 - it may have to wait
for the Great Refactor*.

This is different from the previous logic which used the
minimum cycling interval in the cycling sequences. This
is in order to avoid getting a different runahead limit
when writing:
```
[[[PT12H]]]
graph = foo => bar
```
vs:
```
[[[T00, T12]]]
graph = foo => bar
```
In the first example, the minimum sequence interval is clearly `PT12H`.
In the second, `T00` expands to `T00/P1D`, and the minimum sequence
interval is then `P1D`.

@hjoliver, please see if you agree, and review

* Like the [Great Attractor](http://en.wikipedia.org/wiki/Great_Attractor), the Great Refactor
tries to pull everything into its scope...