{"action":"created","issue":{"url":"https://api.github.com/repos/haskell/cabal/issues/3472","repository_url":"https://api.github.com/repos/haskell/cabal","labels_url":"https://api.github.com/repos/haskell/cabal/issues/3472/labels{/name}","comments_url":"https://api.github.com/repos/haskell/cabal/issues/3472/comments","events_url":"https://api.github.com/repos/haskell/cabal/issues/3472/events","html_url":"https://github.com/haskell/cabal/pull/3472","id":157684297,"number":3472,"title":"Stop installing as soon as possible after a build failure","user":{"login":"dcoutts","id":1339423,"avatar_url":"https://avatars.githubusercontent.com/u/1339423?v=3","gravatar_id":"","url":"https://api.github.com/users/dcoutts","html_url":"https://github.com/dcoutts","followers_url":"https://api.github.com/users/dcoutts/followers","following_url":"https://api.github.com/users/dcoutts/following{/other_user}","gists_url":"https://api.github.com/users/dcoutts/gists{/gist_id}","starred_url":"https://api.github.com/users/dcoutts/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dcoutts/subscriptions","organizations_url":"https://api.github.com/users/dcoutts/orgs","repos_url":"https://api.github.com/users/dcoutts/repos","events_url":"https://api.github.com/users/dcoutts/events{/privacy}","received_events_url":"https://api.github.com/users/dcoutts/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2016-05-31T14:22:56Z","updated_at":"2016-06-01T13:41:59Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/haskell/cabal/pulls/3472","html_url":"https://github.com/haskell/cabal/pull/3472","diff_url":"https://github.com/haskell/cabal/pull/3472.diff","patch_url":"https://github.com/haskell/cabal/pull/3472.patch"},"body":"The goal here is to support an install mode where we stop as soon as possible after one package fails, rather than going on as far as possible with other packages.\r\n\r\nThis is the first patch in a series. More patches will be pushed to this branch. It's here now for early feedback. Subsequent patched will add tests and make use of these new features to stop the install process as soon as possible after a failure, with a new `--keep-going` flag to get the existing behaviour.\r\n\r\nFirst patch: extend the `JobControl` interface\r\n---------------\r\n\r\nTo properly support this we need to be able to cancel jobs that have been submitted but that have not yet been started. This is easy for the serial JobControl but requires re-implementing the paralle JobControl.\r\n\r\nIn the previous impl we simply fork a thread immediately for each job (and use a JobLimit externally to limit parallelim). The problem with that is that all submitted jobs are actually executing, so there's no way to cancel jobs that have not started yet (there are none). Combined with the executeInstallPlan behaviour of exposing the maximum possible paralleism this means that there can be a lot of jobs in progress (though most waiting on the JobLimit), and none of them can be sanely cancelled.\r\n\r\nSo in this impl we have a built-in maximum parallelism, so we're executing at most that many jobs at once, while all others are waiting to be executed. The ones that are waiting can be cancelled.\r\n\r\nBecause it's unspecified how many jobs can be cancelled, users can no longer rely on counting the number of outstanding jobs so we add a new method to check if there are any jobs remaining."},"comment":{"url":"https://api.github.com/repos/haskell/cabal/issues/comments/222995704","html_url":"https://github.com/haskell/cabal/pull/3472#issuecomment-222995704","issue_url":"https://api.github.com/repos/haskell/cabal/issues/3472","id":222995704,"user":{"login":"dcoutts","id":1339423,"avatar_url":"https://avatars.githubusercontent.com/u/1339423?v=3","gravatar_id":"","url":"https://api.github.com/users/dcoutts","html_url":"https://github.com/dcoutts","followers_url":"https://api.github.com/users/dcoutts/followers","following_url":"https://api.github.com/users/dcoutts/following{/other_user}","gists_url":"https://api.github.com/users/dcoutts/gists{/gist_id}","starred_url":"https://api.github.com/users/dcoutts/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dcoutts/subscriptions","organizations_url":"https://api.github.com/users/dcoutts/orgs","repos_url":"https://api.github.com/users/dcoutts/repos","events_url":"https://api.github.com/users/dcoutts/events{/privacy}","received_events_url":"https://api.github.com/users/dcoutts/received_events","type":"User","site_admin":false},"created_at":"2016-06-01T13:41:58Z","updated_at":"2016-06-01T13:41:58Z","body":"Did the AppVeyor one fail? There's no indication of failure. Is it a timeout?"}}
{"actor":{"display_login":"dcoutts"}}