diff --git a/data/payloads/github_repos_dlang_phobos_issues?state=open&sort=updated&direction=asc b/data/payloads/github_repos_dlang_phobos_issues?state=open&sort=updated&direction=asc new file mode 100644 index 0000000..8571a86 --- /dev/null +++ b/data/payloads/github_repos_dlang_phobos_issues?state=open&sort=updated&direction=asc @@ -0,0 +1,1890 @@ +[ + { + "url": "https://api.github.com/repos/dlang/phobos/issues/2526", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/2526/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/2526/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/2526/events", + "html_url": "https://github.com/dlang/phobos/pull/2526", + "id": 43040386, + "number": 2526, + "title": "Simplify Visual C configuration for -m64/-m32mscoff builds", + "user": { + "login": "CyberShadow", + "id": 160894, + "avatar_url": "https://avatars.githubusercontent.com/u/160894?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/CyberShadow", + "html_url": "https://github.com/CyberShadow", + "followers_url": "https://api.github.com/users/CyberShadow/followers", + "following_url": "https://api.github.com/users/CyberShadow/following{/other_user}", + "gists_url": "https://api.github.com/users/CyberShadow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/CyberShadow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/CyberShadow/subscriptions", + "organizations_url": "https://api.github.com/users/CyberShadow/orgs", + "repos_url": "https://api.github.com/users/CyberShadow/repos", + "events_url": "https://api.github.com/users/CyberShadow/events{/privacy}", + "received_events_url": "https://api.github.com/users/CyberShadow/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 119492872, + "url": "https://api.github.com/repos/dlang/phobos/labels/blocked", + "name": "blocked", + "color": "e11d21", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 9, + "created_at": "2014-09-17T17:30:01Z", + "updated_at": "2016-03-30T06:19:52Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/2526", + "html_url": "https://github.com/dlang/phobos/pull/2526", + "diff_url": "https://github.com/dlang/phobos/pull/2526.diff", + "patch_url": "https://github.com/dlang/phobos/pull/2526.patch" + }, + "body": "Ping @rainers \n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/3534", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/3534/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/3534/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/3534/events", + "html_url": "https://github.com/dlang/phobos/pull/3534", + "id": 99674638, + "number": 3534, + "title": "Add Specializations for SortedRange", + "user": { + "login": "nordlow", + "id": 829407, + "avatar_url": "https://avatars.githubusercontent.com/u/829407?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nordlow", + "html_url": "https://github.com/nordlow", + "followers_url": "https://api.github.com/users/nordlow/followers", + "following_url": "https://api.github.com/users/nordlow/following{/other_user}", + "gists_url": "https://api.github.com/users/nordlow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nordlow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nordlow/subscriptions", + "organizations_url": "https://api.github.com/users/nordlow/orgs", + "repos_url": "https://api.github.com/users/nordlow/repos", + "events_url": "https://api.github.com/users/nordlow/events{/privacy}", + "received_events_url": "https://api.github.com/users/nordlow/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 119492872, + "url": "https://api.github.com/repos/dlang/phobos/labels/blocked", + "name": "blocked", + "color": "e11d21", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 34, + "created_at": "2015-08-07T15:45:09Z", + "updated_at": "2016-04-29T13:58:08Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/3534", + "html_url": "https://github.com/dlang/phobos/pull/3534", + "diff_url": "https://github.com/dlang/phobos/pull/3534.diff", + "patch_url": "https://github.com/dlang/phobos/pull/3534.patch" + }, + "body": "Add new predicate function `std.range.primitives.isSortedRange`: **DONE**\n\nAdd specializations for `SortedRange` in the followings algorithms:\n- `sort`: just return input argument if `pred` parameter matches: **DONE**\n- `sort`-alikes: just return input argument if `pred` parameter matches:\n- `isSorted`: return `true`: **DONE**\n- `find` and alikes, should do some kind of binary search. These could take an extra param `SearchPolicy` for sorted ranges that defaults to binary search.\n- Some of the functions that return a sub-range or a mutated range could probably be returning sorted ranges as well if its input is a sorted range, `remove`, `strip` and `split` at least could.\n- `minPos`: return input as is, if `pred` matches: **DONE**\n\nIn compliance with C++ STL also add\n- `minElement`: O(1) for `SortedRange`, O(n) otherwise: **DONE**\n- `maxElement`: O(1) for `SortedRange!BidirectionalRange`, O(n) otherwise: **DONE**\n- `minmaxElement`: O(1) for `SortedRange!BidirectionalRange`, O(n) otherwise.\n\nSee also: http://forum.dlang.org/post/yenezfjjteokzyvgmzcf@forum.dlang.org\nSee also: https://issues.dlang.org/show_bug.cgi?id=11667\nSee also: http://forum.dlang.org/post/mqskao$28vh$1@digitalmars.com\n\nSee also: http://en.cppreference.com/w/cpp/algorithm/min_element\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4551", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4551/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4551/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4551/events", + "html_url": "https://github.com/dlang/phobos/pull/4551", + "id": 163571319, + "number": 4551, + "title": "prepare for fix of druntime issue 16230", + "user": { + "login": "aG0aep6G", + "id": 9287500, + "avatar_url": "https://avatars.githubusercontent.com/u/9287500?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/aG0aep6G", + "html_url": "https://github.com/aG0aep6G", + "followers_url": "https://api.github.com/users/aG0aep6G/followers", + "following_url": "https://api.github.com/users/aG0aep6G/following{/other_user}", + "gists_url": "https://api.github.com/users/aG0aep6G/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aG0aep6G/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aG0aep6G/subscriptions", + "organizations_url": "https://api.github.com/users/aG0aep6G/orgs", + "repos_url": "https://api.github.com/users/aG0aep6G/repos", + "events_url": "https://api.github.com/users/aG0aep6G/events{/privacy}", + "received_events_url": "https://api.github.com/users/aG0aep6G/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 119492872, + "url": "https://api.github.com/repos/dlang/phobos/labels/blocked", + "name": "blocked", + "color": "e11d21", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 1, + "created_at": "2016-07-03T17:23:28Z", + "updated_at": "2016-07-05T21:04:06Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4551", + "html_url": "https://github.com/dlang/phobos/pull/4551", + "diff_url": "https://github.com/dlang/phobos/pull/4551.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4551.patch" + }, + "body": "[Issue 16230](https://issues.dlang.org/show_bug.cgi?id=16230) is being fixed in https://github.com/dlang/druntime/pull/1605. There, `atomicLoad`'s return type is changed to be `shared` for aggregates with indirections. So some casts need to be added where the result of `atomicLoad` used to be wrongly unshared.\n\n**https://github.com/dlang/druntime/pull/1605 should be reviewed and approved before this gets pulled.**\n\nI believe that the cast in std.experimental.logger.core is wrong. See [issue 16232](https://issues.dlang.org/show_bug.cgi?id=16232). But it's pre-existing condition, and I'm not sure how to fix it.\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/3620", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/3620/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/3620/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/3620/events", + "html_url": "https://github.com/dlang/phobos/pull/3620", + "id": 104221805, + "number": 3620, + "title": "fix Issue 13780 - Empty ParameterIdentifierTuple for function literal", + "user": { + "login": "luismarques", + "id": 171812, + "avatar_url": "https://avatars.githubusercontent.com/u/171812?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/luismarques", + "html_url": "https://github.com/luismarques", + "followers_url": "https://api.github.com/users/luismarques/followers", + "following_url": "https://api.github.com/users/luismarques/following{/other_user}", + "gists_url": "https://api.github.com/users/luismarques/gists{/gist_id}", + "starred_url": "https://api.github.com/users/luismarques/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/luismarques/subscriptions", + "organizations_url": "https://api.github.com/users/luismarques/orgs", + "repos_url": "https://api.github.com/users/luismarques/repos", + "events_url": "https://api.github.com/users/luismarques/events{/privacy}", + "received_events_url": "https://api.github.com/users/luismarques/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 416188102, + "url": "https://api.github.com/repos/dlang/phobos/labels/Bug%20Fix", + "name": "Bug Fix", + "color": "0052cc", + "default": false + }, + { + "id": 117785235, + "url": "https://api.github.com/repos/dlang/phobos/labels/decision%20block", + "name": "decision block", + "color": "009800", + "default": false + }, + { + "id": 416188433, + "url": "https://api.github.com/repos/dlang/phobos/labels/Enhancement", + "name": "Enhancement", + "color": "5319e7", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 15, + "created_at": "2015-09-01T09:12:34Z", + "updated_at": "2016-07-29T11:40:01Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/3620", + "html_url": "https://github.com/dlang/phobos/pull/3620", + "diff_url": "https://github.com/dlang/phobos/pull/3620.diff", + "patch_url": "https://github.com/dlang/phobos/pull/3620.patch" + }, + "body": "ParameterIdentifierTuple intentionally did not accept function pointers and delegates. This surprised people, particularly when using function literals, as indicated in issue 13780. This commit changes that, allowing the issue to be closed.\n\nhttps://issues.dlang.org/show_bug.cgi?id=13780\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/3952", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/3952/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/3952/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/3952/events", + "html_url": "https://github.com/dlang/phobos/pull/3952", + "id": 128763945, + "number": 3952, + "title": "Fix Issue 15604 - std.array.array of structs with template opAssign and default initialised 'new'ed class member", + "user": { + "login": "John-Colvin", + "id": 1867189, + "avatar_url": "https://avatars.githubusercontent.com/u/1867189?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/John-Colvin", + "html_url": "https://github.com/John-Colvin", + "followers_url": "https://api.github.com/users/John-Colvin/followers", + "following_url": "https://api.github.com/users/John-Colvin/following{/other_user}", + "gists_url": "https://api.github.com/users/John-Colvin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/John-Colvin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/John-Colvin/subscriptions", + "organizations_url": "https://api.github.com/users/John-Colvin/orgs", + "repos_url": "https://api.github.com/users/John-Colvin/repos", + "events_url": "https://api.github.com/users/John-Colvin/events{/privacy}", + "received_events_url": "https://api.github.com/users/John-Colvin/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 416188102, + "url": "https://api.github.com/repos/dlang/phobos/labels/Bug%20Fix", + "name": "Bug Fix", + "color": "0052cc", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 4, + "created_at": "2016-01-26T09:02:30Z", + "updated_at": "2016-07-29T11:49:06Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/3952", + "html_url": "https://github.com/dlang/phobos/pull/3952", + "diff_url": "https://github.com/dlang/phobos/pull/3952.diff", + "patch_url": "https://github.com/dlang/phobos/pull/3952.patch" + }, + "body": "15604 is indicative of a larger problem, but this works around the issue here.\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4294", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4294/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4294/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4294/events", + "html_url": "https://github.com/dlang/phobos/pull/4294", + "id": 153904476, + "number": 4294, + "title": "Fix Issue 16006 - Investigate adding fork() to std.process", + "user": { + "login": "CyberShadow", + "id": 160894, + "avatar_url": "https://avatars.githubusercontent.com/u/160894?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/CyberShadow", + "html_url": "https://github.com/CyberShadow", + "followers_url": "https://api.github.com/users/CyberShadow/followers", + "following_url": "https://api.github.com/users/CyberShadow/following{/other_user}", + "gists_url": "https://api.github.com/users/CyberShadow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/CyberShadow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/CyberShadow/subscriptions", + "organizations_url": "https://api.github.com/users/CyberShadow/orgs", + "repos_url": "https://api.github.com/users/CyberShadow/repos", + "events_url": "https://api.github.com/users/CyberShadow/events{/privacy}", + "received_events_url": "https://api.github.com/users/CyberShadow/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 416188102, + "url": "https://api.github.com/repos/dlang/phobos/labels/Bug%20Fix", + "name": "Bug Fix", + "color": "0052cc", + "default": false + }, + { + "id": 416200677, + "url": "https://api.github.com/repos/dlang/phobos/labels/needs%20rebase", + "name": "needs rebase", + "color": "b60205", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 16, + "created_at": "2016-05-10T01:20:00Z", + "updated_at": "2016-07-29T11:56:34Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4294", + "html_url": "https://github.com/dlang/phobos/pull/4294", + "diff_url": "https://github.com/dlang/phobos/pull/4294.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4294.patch" + }, + "body": "https://issues.dlang.org/show_bug.cgi?id=16006\n\nNeeds https://github.com/dlang/druntime/pull/1569\n\nCC @MartinNowak @schveiguy \n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4391", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4391/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4391/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4391/events", + "html_url": "https://github.com/dlang/phobos/pull/4391", + "id": 158020360, + "number": 4391, + "title": "std.parallelism with selective scoped imports", + "user": { + "login": "burner", + "id": 13327, + "avatar_url": "https://avatars.githubusercontent.com/u/13327?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/burner", + "html_url": "https://github.com/burner", + "followers_url": "https://api.github.com/users/burner/followers", + "following_url": "https://api.github.com/users/burner/following{/other_user}", + "gists_url": "https://api.github.com/users/burner/gists{/gist_id}", + "starred_url": "https://api.github.com/users/burner/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/burner/subscriptions", + "organizations_url": "https://api.github.com/users/burner/orgs", + "repos_url": "https://api.github.com/users/burner/repos", + "events_url": "https://api.github.com/users/burner/events{/privacy}", + "received_events_url": "https://api.github.com/users/burner/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 416200677, + "url": "https://api.github.com/repos/dlang/phobos/labels/needs%20rebase", + "name": "needs rebase", + "color": "b60205", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 3, + "created_at": "2016-06-01T22:22:34Z", + "updated_at": "2016-07-29T12:26:59Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4391", + "html_url": "https://github.com/dlang/phobos/pull/4391", + "diff_url": "https://github.com/dlang/phobos/pull/4391.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4391.patch" + }, + "body": "" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4399", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4399/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4399/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4399/events", + "html_url": "https://github.com/dlang/phobos/pull/4399", + "id": 158324131, + "number": 4399, + "title": "std.parallelism fatal flaw?", + "user": { + "login": "burner", + "id": 13327, + "avatar_url": "https://avatars.githubusercontent.com/u/13327?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/burner", + "html_url": "https://github.com/burner", + "followers_url": "https://api.github.com/users/burner/followers", + "following_url": "https://api.github.com/users/burner/following{/other_user}", + "gists_url": "https://api.github.com/users/burner/gists{/gist_id}", + "starred_url": "https://api.github.com/users/burner/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/burner/subscriptions", + "organizations_url": "https://api.github.com/users/burner/orgs", + "repos_url": "https://api.github.com/users/burner/repos", + "events_url": "https://api.github.com/users/burner/events{/privacy}", + "received_events_url": "https://api.github.com/users/burner/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 117785287, + "url": "https://api.github.com/repos/dlang/phobos/labels/needs%20work", + "name": "needs work", + "color": "f7c6c7", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 9, + "created_at": "2016-06-03T09:12:50Z", + "updated_at": "2016-07-29T12:27:54Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4399", + "html_url": "https://github.com/dlang/phobos/pull/4399", + "diff_url": "https://github.com/dlang/phobos/pull/4399.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4399.patch" + }, + "body": "Big parts of the std.parallelism unittests where not run for a very long time. \nApparently they do not even compile anymore. This PR refactors the unittests \nso they are at least run once by default. While refactoring I found a couple of\nproblems with the unittests. Such as, local unittest function being unable to \naccess the current stackframe. This destroyed some constructs used by \nstd.parallelism.\n\nI'm a noob when it comes to std.parallelism. I found this bug while scoping\nimports. I need help on this!\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4035", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4035/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4035/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4035/events", + "html_url": "https://github.com/dlang/phobos/pull/4035", + "id": 137747039, + "number": 4035, + "title": "Allow a generic function for std.variant.visit.", + "user": { + "login": "rcorre", + "id": 2496231, + "avatar_url": "https://avatars.githubusercontent.com/u/2496231?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/rcorre", + "html_url": "https://github.com/rcorre", + "followers_url": "https://api.github.com/users/rcorre/followers", + "following_url": "https://api.github.com/users/rcorre/following{/other_user}", + "gists_url": "https://api.github.com/users/rcorre/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rcorre/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rcorre/subscriptions", + "organizations_url": "https://api.github.com/users/rcorre/orgs", + "repos_url": "https://api.github.com/users/rcorre/repos", + "events_url": "https://api.github.com/users/rcorre/events{/privacy}", + "received_events_url": "https://api.github.com/users/rcorre/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 416188433, + "url": "https://api.github.com/repos/dlang/phobos/labels/Enhancement", + "name": "Enhancement", + "color": "5319e7", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 22, + "created_at": "2016-03-02T01:48:40Z", + "updated_at": "2016-07-29T12:38:15Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4035", + "html_url": "https://github.com/dlang/phobos/pull/4035", + "diff_url": "https://github.com/dlang/phobos/pull/4035.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4035.patch" + }, + "body": "If a lambda with a single generic parameter is provided as a handler\nto std.variant.visit, it is invoked for any type contained in the\nAlgebraic which does not have a handler for that type.\n\nThis allows something like:\n\n```\n// Assume Circle, Square, and Triangle all define center()\nAlgebraic!(Circle, Square, Triangle) someShape;\nauto center = someShape.visit!(x => x.center);\n```\n\nThis may be combined with explicitly typed handlers and a single\nfallback handler for an empty variant:\n\n```\nAlgebraic!(int, float, string) something;\nsomething.visit!((string s) => s.length, // called for string\n x => x, // called for int/float\n () => 0); // called if empty\n```\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4397", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4397/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4397/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4397/events", + "html_url": "https://github.com/dlang/phobos/pull/4397", + "id": 158322757, + "number": 4397, + "title": "Ddoc: add class \"simple-cheatsheet\"", + "user": { + "login": "aG0aep6G", + "id": 9287500, + "avatar_url": "https://avatars.githubusercontent.com/u/9287500?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/aG0aep6G", + "html_url": "https://github.com/aG0aep6G", + "followers_url": "https://api.github.com/users/aG0aep6G/followers", + "following_url": "https://api.github.com/users/aG0aep6G/following{/other_user}", + "gists_url": "https://api.github.com/users/aG0aep6G/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aG0aep6G/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aG0aep6G/subscriptions", + "organizations_url": "https://api.github.com/users/aG0aep6G/orgs", + "repos_url": "https://api.github.com/users/aG0aep6G/repos", + "events_url": "https://api.github.com/users/aG0aep6G/events{/privacy}", + "received_events_url": "https://api.github.com/users/aG0aep6G/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 364675155, + "url": "https://api.github.com/repos/dlang/phobos/labels/documentation", + "name": "documentation", + "color": "d4c5f9", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 10, + "created_at": "2016-06-03T09:05:15Z", + "updated_at": "2016-07-29T12:40:36Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4397", + "html_url": "https://github.com/dlang/phobos/pull/4397", + "diff_url": "https://github.com/dlang/phobos/pull/4397.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4397.patch" + }, + "body": "So that DDOX can choose not to display them.\n\n.simple-cheatsheet tables play the same role as the listings that DDOX\ngenerates. Having them both, and right after another, is confusing for\nthe reader, and doesn't add any value.\n\nThere are similar tables in\n- std.experimental.ndslice.{iteration,selection},\n- std.format,\n- std.net.curl, and\n- std.range.primitives,\n but they contain additional information or are embedded in text. So their\n presence should be less confusing.\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4363", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4363/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4363/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4363/events", + "html_url": "https://github.com/dlang/phobos/pull/4363", + "id": 156729373, + "number": 4363, + "title": "Add std.typecons.Rebindable!struct", + "user": { + "login": "ntrel", + "id": 1107820, + "avatar_url": "https://avatars.githubusercontent.com/u/1107820?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ntrel", + "html_url": "https://github.com/ntrel", + "followers_url": "https://api.github.com/users/ntrel/followers", + "following_url": "https://api.github.com/users/ntrel/following{/other_user}", + "gists_url": "https://api.github.com/users/ntrel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ntrel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ntrel/subscriptions", + "organizations_url": "https://api.github.com/users/ntrel/orgs", + "repos_url": "https://api.github.com/users/ntrel/repos", + "events_url": "https://api.github.com/users/ntrel/events{/privacy}", + "received_events_url": "https://api.github.com/users/ntrel/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 416188433, + "url": "https://api.github.com/repos/dlang/phobos/labels/Enhancement", + "name": "Enhancement", + "color": "5319e7", + "default": false + }, + { + "id": 117785393, + "url": "https://api.github.com/repos/dlang/phobos/labels/needs%20review", + "name": "needs review", + "color": "5319e7", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 7, + "created_at": "2016-05-25T11:43:05Z", + "updated_at": "2016-07-29T12:58:41Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4363", + "html_url": "https://github.com/dlang/phobos/pull/4363", + "diff_url": "https://github.com/dlang/phobos/pull/4363.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4363.patch" + }, + "body": "From the docs:\n\n\"Models safe reassignment of otherwise constant struct instances.\n\nA struct with a field of reference type cannot be assigned to a constant struct of the same type. `Rebindable!(const S)` allows assignment to a `const S` while enforcing only constant access to its fields.\n\n`Rebindable!(immutable S)` does the same but field access may create a temporary copy of `S` in order to enforce true immutability.\"\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4336", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4336/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4336/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4336/events", + "html_url": "https://github.com/dlang/phobos/pull/4336", + "id": 155395644, + "number": 4336, + "title": "Begin replacing floatTraits pointer math with RealRep union", + "user": { + "login": "tsbockman", + "id": 1332026, + "avatar_url": "https://avatars.githubusercontent.com/u/1332026?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/tsbockman", + "html_url": "https://github.com/tsbockman", + "followers_url": "https://api.github.com/users/tsbockman/followers", + "following_url": "https://api.github.com/users/tsbockman/following{/other_user}", + "gists_url": "https://api.github.com/users/tsbockman/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tsbockman/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tsbockman/subscriptions", + "organizations_url": "https://api.github.com/users/tsbockman/orgs", + "repos_url": "https://api.github.com/users/tsbockman/repos", + "events_url": "https://api.github.com/users/tsbockman/events{/privacy}", + "received_events_url": "https://api.github.com/users/tsbockman/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 236681734, + "url": "https://api.github.com/repos/dlang/phobos/labels/math", + "name": "math", + "color": "eb6420", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 9, + "created_at": "2016-05-18T01:00:51Z", + "updated_at": "2016-08-13T07:13:11Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4336", + "html_url": "https://github.com/dlang/phobos/pull/4336", + "diff_url": "https://github.com/dlang/phobos/pull/4336.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4336.patch" + }, + "body": "Pros:\n- Prepare the way for CTFE floating-point math by switching from explicit pointer reinterpretation to a `union`.\n- `union` code is easier to read and understand.\n- `union` code is also easier to write, thus freeing mental energy for performance optimizations.\n- Consolidate tons of near-duplicate code-paths into (usually) two: one for `ibmExtended`, and one for everything else.\n- Adding support for new IEEE-style floating-point types (such as `half` or `quad`) gets easier as more of `std.math` is converted to use `RealRep`. (`ucent` would help here, though.)\n- By the time all of `std.math` has been converted, I expect that (in net) `RealRep` will have reduced the total line count substantially.\n- It may be possible to replace some of the inline assembler with `RealRep` code; the codegen seems to be very clean, for the most part.\n\nCons:\n- Many large diffs (starting with this one) will be required to complete the conversion.\n- `std.math` will become substantially more dependant upon inlining for good performance.\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/3960", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/3960/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/3960/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/3960/events", + "html_url": "https://github.com/dlang/phobos/pull/3960", + "id": 129722763, + "number": 3960, + "title": "Issue 15621 - std.file.rename does not allow moving files to a different drive", + "user": { + "login": "yebblies", + "id": 580100, + "avatar_url": "https://avatars.githubusercontent.com/u/580100?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/yebblies", + "html_url": "https://github.com/yebblies", + "followers_url": "https://api.github.com/users/yebblies/followers", + "following_url": "https://api.github.com/users/yebblies/following{/other_user}", + "gists_url": "https://api.github.com/users/yebblies/gists{/gist_id}", + "starred_url": "https://api.github.com/users/yebblies/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/yebblies/subscriptions", + "organizations_url": "https://api.github.com/users/yebblies/orgs", + "repos_url": "https://api.github.com/users/yebblies/repos", + "events_url": "https://api.github.com/users/yebblies/events{/privacy}", + "received_events_url": "https://api.github.com/users/yebblies/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 416188102, + "url": "https://api.github.com/repos/dlang/phobos/labels/Bug%20Fix", + "name": "Bug Fix", + "color": "0052cc", + "default": false + }, + { + "id": 117785235, + "url": "https://api.github.com/repos/dlang/phobos/labels/decision%20block", + "name": "decision block", + "color": "009800", + "default": false + }, + { + "id": 416188433, + "url": "https://api.github.com/repos/dlang/phobos/labels/Enhancement", + "name": "Enhancement", + "color": "5319e7", + "default": false + }, + { + "id": 416200677, + "url": "https://api.github.com/repos/dlang/phobos/labels/needs%20rebase", + "name": "needs rebase", + "color": "b60205", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 16, + "created_at": "2016-01-29T10:09:07Z", + "updated_at": "2016-08-15T02:53:35Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/3960", + "html_url": "https://github.com/dlang/phobos/pull/3960", + "diff_url": "https://github.com/dlang/phobos/pull/3960.diff", + "patch_url": "https://github.com/dlang/phobos/pull/3960.patch" + }, + "body": "I don't think it's possible to unittest this without making excessive assumptions.\n\nhttps://issues.dlang.org/show_bug.cgi?id=15621\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/2995", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/2995/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/2995/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/2995/events", + "html_url": "https://github.com/dlang/phobos/pull/2995", + "id": 57837885, + "number": 2995, + "title": "Parameterized unittests and benchmarks", + "user": { + "login": "burner", + "id": 13327, + "avatar_url": "https://avatars.githubusercontent.com/u/13327?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/burner", + "html_url": "https://github.com/burner", + "followers_url": "https://api.github.com/users/burner/followers", + "following_url": "https://api.github.com/users/burner/following{/other_user}", + "gists_url": "https://api.github.com/users/burner/gists{/gist_id}", + "starred_url": "https://api.github.com/users/burner/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/burner/subscriptions", + "organizations_url": "https://api.github.com/users/burner/orgs", + "repos_url": "https://api.github.com/users/burner/repos", + "events_url": "https://api.github.com/users/burner/events{/privacy}", + "received_events_url": "https://api.github.com/users/burner/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 117785393, + "url": "https://api.github.com/repos/dlang/phobos/labels/needs%20review", + "name": "needs review", + "color": "5319e7", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "andralex", + "id": 566679, + "avatar_url": "https://avatars.githubusercontent.com/u/566679?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/andralex", + "html_url": "https://github.com/andralex", + "followers_url": "https://api.github.com/users/andralex/followers", + "following_url": "https://api.github.com/users/andralex/following{/other_user}", + "gists_url": "https://api.github.com/users/andralex/gists{/gist_id}", + "starred_url": "https://api.github.com/users/andralex/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/andralex/subscriptions", + "organizations_url": "https://api.github.com/users/andralex/orgs", + "repos_url": "https://api.github.com/users/andralex/repos", + "events_url": "https://api.github.com/users/andralex/events{/privacy}", + "received_events_url": "https://api.github.com/users/andralex/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "andralex", + "id": 566679, + "avatar_url": "https://avatars.githubusercontent.com/u/566679?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/andralex", + "html_url": "https://github.com/andralex", + "followers_url": "https://api.github.com/users/andralex/followers", + "following_url": "https://api.github.com/users/andralex/following{/other_user}", + "gists_url": "https://api.github.com/users/andralex/gists{/gist_id}", + "starred_url": "https://api.github.com/users/andralex/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/andralex/subscriptions", + "organizations_url": "https://api.github.com/users/andralex/orgs", + "repos_url": "https://api.github.com/users/andralex/repos", + "events_url": "https://api.github.com/users/andralex/events{/privacy}", + "received_events_url": "https://api.github.com/users/andralex/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": null, + "comments": 58, + "created_at": "2015-02-16T18:36:18Z", + "updated_at": "2016-08-24T18:21:21Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/2995", + "html_url": "https://github.com/dlang/phobos/pull/2995", + "diff_url": "https://github.com/dlang/phobos/pull/2995.diff", + "patch_url": "https://github.com/dlang/phobos/pull/2995.patch" + }, + "body": "Basically, Haskell Quickcheck with in build benchmarking for performance regression testing.\n\nIMO phobos is missing something like Quickfix (randomized test data generation). Additionally, it would be nice to use the tests as a way to measure the performance of the functions and the code generation over time. \n\nThe benchmark results are written to a file as csv. The program benchmarkplotter.d generates .dat and .gp files for all uniquely named benchmarks. gnuplot then generates a plot of the benchmark values over time. This could than be displayed on dlang.org to show our progress and be transparent about our performance.\n\nmake BUILD=benchmark enables all benchmarks. For more info see example in std/experimental/randomized_unittest_benchmark.d\n\n![alt text](http://s22.postimg.org/h62nvhnv5/string_last_Index_Of_wstring_dstring.png)\n\n``` d\n/// The following examples show an overview of the given functionalities.\nunittest\n{\n void theFunctionToTest(int a, float b, string c)\n {\n // super expensive operation\n auto rslt = (a + b) * c.length;\n\n /* Pass the result to doNotOptimizeAway so the compiler\n can not remove the expensive operation, and thereby falsify the\n benchmark.\n */\n doNotOptimizeAway(rslt);\n\n debug\n {\n /* As the paramters to the function assume random values,\n $(D benchmark) allows to quickly test function with various input\n values. As the verification of computed value or state will at to\n the runtime of the function to benchmark, it makes sense to only\n execute these verifications in debug mode.\n */\n assert(c.length ? true : true);\n }\n }\n\n /* $(D benchmark) will run the function $(D theFunctionToTest) as often as\n possible in 1 second. The function will be called with randomly selected\n values for its parameters.\n */\n benchmark!theFunctionToTest();\n}\n```\n\ndub: https://github.com/burner/std.benchmark\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4762", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4762/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4762/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4762/events", + "html_url": "https://github.com/dlang/phobos/pull/4762", + "id": 174887099, + "number": 4762, + "title": "add ADL example to std.traits.moduleName", + "user": { + "login": "WalterBright", + "id": 568298, + "avatar_url": "https://avatars.githubusercontent.com/u/568298?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/WalterBright", + "html_url": "https://github.com/WalterBright", + "followers_url": "https://api.github.com/users/WalterBright/followers", + "following_url": "https://api.github.com/users/WalterBright/following{/other_user}", + "gists_url": "https://api.github.com/users/WalterBright/gists{/gist_id}", + "starred_url": "https://api.github.com/users/WalterBright/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/WalterBright/subscriptions", + "organizations_url": "https://api.github.com/users/WalterBright/orgs", + "repos_url": "https://api.github.com/users/WalterBright/repos", + "events_url": "https://api.github.com/users/WalterBright/events{/privacy}", + "received_events_url": "https://api.github.com/users/WalterBright/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 364675155, + "url": "https://api.github.com/repos/dlang/phobos/labels/documentation", + "name": "documentation", + "color": "d4c5f9", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 1, + "created_at": "2016-09-03T08:54:52Z", + "updated_at": "2016-09-16T23:52:55Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4762", + "html_url": "https://github.com/dlang/phobos/pull/4762", + "diff_url": "https://github.com/dlang/phobos/pull/4762.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4762.patch" + }, + "body": "Example shows how to do ADL lookup for those who want it.\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4876", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4876/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4876/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4876/events", + "html_url": "https://github.com/dlang/phobos/pull/4876", + "id": 184712559, + "number": 4876, + "title": "Check for overflow in (make|extend|shrink)Array", + "user": { + "login": "JakobOvrum", + "id": 155856, + "avatar_url": "https://avatars.githubusercontent.com/u/155856?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/JakobOvrum", + "html_url": "https://github.com/JakobOvrum", + "followers_url": "https://api.github.com/users/JakobOvrum/followers", + "following_url": "https://api.github.com/users/JakobOvrum/following{/other_user}", + "gists_url": "https://api.github.com/users/JakobOvrum/gists{/gist_id}", + "starred_url": "https://api.github.com/users/JakobOvrum/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/JakobOvrum/subscriptions", + "organizations_url": "https://api.github.com/users/JakobOvrum/orgs", + "repos_url": "https://api.github.com/users/JakobOvrum/repos", + "events_url": "https://api.github.com/users/JakobOvrum/events{/privacy}", + "received_events_url": "https://api.github.com/users/JakobOvrum/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 415516756, + "url": "https://api.github.com/repos/dlang/phobos/labels/overflow", + "name": "overflow", + "color": "bfd4f2", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 2, + "created_at": "2016-10-23T20:10:06Z", + "updated_at": "2016-10-23T21:47:30Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4876", + "html_url": "https://github.com/dlang/phobos/pull/4876", + "diff_url": "https://github.com/dlang/phobos/pull/4876.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4876.patch" + }, + "body": "These functions still have potential for overflow, this patch simply factors out a common multiplication into helpers with overflow checking.\n\nThe helper functions are akin to OpenBSD's `reallocarray` function.\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4878", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4878/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4878/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4878/events", + "html_url": "https://github.com/dlang/phobos/pull/4878", + "id": 185189223, + "number": 4878, + "title": "[WIP] [DONOTPULL] Reference counted buffer", + "user": { + "login": "andralex", + "id": 566679, + "avatar_url": "https://avatars.githubusercontent.com/u/566679?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/andralex", + "html_url": "https://github.com/andralex", + "followers_url": "https://api.github.com/users/andralex/followers", + "following_url": "https://api.github.com/users/andralex/following{/other_user}", + "gists_url": "https://api.github.com/users/andralex/gists{/gist_id}", + "starred_url": "https://api.github.com/users/andralex/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/andralex/subscriptions", + "organizations_url": "https://api.github.com/users/andralex/orgs", + "repos_url": "https://api.github.com/users/andralex/repos", + "events_url": "https://api.github.com/users/andralex/events{/privacy}", + "received_events_url": "https://api.github.com/users/andralex/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 415595086, + "url": "https://api.github.com/repos/dlang/phobos/labels/WIP", + "name": "WIP", + "color": "fbca04", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2016-10-25T17:56:47Z", + "updated_at": "2016-11-04T15:59:48Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4878", + "html_url": "https://github.com/dlang/phobos/pull/4878", + "diff_url": "https://github.com/dlang/phobos/pull/4878.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4878.patch" + }, + "body": "This is a work in progress, currently aimed at studying how safe reference counting works.\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4204", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4204/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4204/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4204/events", + "html_url": "https://github.com/dlang/phobos/pull/4204", + "id": 148853180, + "number": 4204, + "title": "Fix Issue 10879 - std.variant Variant/Algebraic: Cant store static ar…", + "user": { + "login": "Biotronic", + "id": 253521, + "avatar_url": "https://avatars.githubusercontent.com/u/253521?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/Biotronic", + "html_url": "https://github.com/Biotronic", + "followers_url": "https://api.github.com/users/Biotronic/followers", + "following_url": "https://api.github.com/users/Biotronic/following{/other_user}", + "gists_url": "https://api.github.com/users/Biotronic/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Biotronic/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Biotronic/subscriptions", + "organizations_url": "https://api.github.com/users/Biotronic/orgs", + "repos_url": "https://api.github.com/users/Biotronic/repos", + "events_url": "https://api.github.com/users/Biotronic/events{/privacy}", + "received_events_url": "https://api.github.com/users/Biotronic/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 416188102, + "url": "https://api.github.com/repos/dlang/phobos/labels/Bug%20Fix", + "name": "Bug Fix", + "color": "0052cc", + "default": false + }, + { + "id": 117785235, + "url": "https://api.github.com/repos/dlang/phobos/labels/decision%20block", + "name": "decision block", + "color": "009800", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 6, + "created_at": "2016-04-16T13:38:09Z", + "updated_at": "2016-11-06T01:38:59Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4204", + "html_url": "https://github.com/dlang/phobos/pull/4204", + "diff_url": "https://github.com/dlang/phobos/pull/4204.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4204.patch" + }, + "body": "…rays > 32(/16) bytes\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4920", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4920/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4920/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4920/events", + "html_url": "https://github.com/dlang/phobos/pull/4920", + "id": 191503586, + "number": 4920, + "title": "Implement issue# 16744: TypeOf template helper.", + "user": { + "login": "jmdavis", + "id": 579956, + "avatar_url": "https://avatars.githubusercontent.com/u/579956?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/jmdavis", + "html_url": "https://github.com/jmdavis", + "followers_url": "https://api.github.com/users/jmdavis/followers", + "following_url": "https://api.github.com/users/jmdavis/following{/other_user}", + "gists_url": "https://api.github.com/users/jmdavis/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jmdavis/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jmdavis/subscriptions", + "organizations_url": "https://api.github.com/users/jmdavis/orgs", + "repos_url": "https://api.github.com/users/jmdavis/repos", + "events_url": "https://api.github.com/users/jmdavis/events{/privacy}", + "received_events_url": "https://api.github.com/users/jmdavis/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 4, + "created_at": "2016-11-24T12:02:56Z", + "updated_at": "2016-11-26T00:38:02Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4920", + "html_url": "https://github.com/dlang/phobos/pull/4920", + "diff_url": "https://github.com/dlang/phobos/pull/4920.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4920.patch" + }, + "body": "typeof cannot be used directly with templates such as staticMap, because\r\nwe don't have the template equivalent of lambda functions. TypeOf is\r\ntherefore a template wrapper around typeof so that it can be used in\r\ncontexts that require a template." + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4936", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4936/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4936/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4936/events", + "html_url": "https://github.com/dlang/phobos/pull/4936", + "id": 194224671, + "number": 4936, + "title": "Fix Issue 16745 - Add template helper for creating static arrays with the size inferred", + "user": { + "login": "John-Colvin", + "id": 1867189, + "avatar_url": "https://avatars.githubusercontent.com/u/1867189?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/John-Colvin", + "html_url": "https://github.com/John-Colvin", + "followers_url": "https://api.github.com/users/John-Colvin/followers", + "following_url": "https://api.github.com/users/John-Colvin/following{/other_user}", + "gists_url": "https://api.github.com/users/John-Colvin/gists{/gist_id}", + "starred_url": "https://api.github.com/users/John-Colvin/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/John-Colvin/subscriptions", + "organizations_url": "https://api.github.com/users/John-Colvin/orgs", + "repos_url": "https://api.github.com/users/John-Colvin/repos", + "events_url": "https://api.github.com/users/John-Colvin/events{/privacy}", + "received_events_url": "https://api.github.com/users/John-Colvin/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 311499730, + "url": "https://api.github.com/repos/dlang/phobos/labels/@andralex", + "name": "@andralex", + "color": "f7c6c7", + "default": false + }, + { + "id": 117785235, + "url": "https://api.github.com/repos/dlang/phobos/labels/decision%20block", + "name": "decision block", + "color": "009800", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 6, + "created_at": "2016-12-08T01:37:28Z", + "updated_at": "2016-12-08T23:27:37Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4936", + "html_url": "https://github.com/dlang/phobos/pull/4936", + "diff_url": "https://github.com/dlang/phobos/pull/4936.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4936.patch" + }, + "body": "" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4949", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4949/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4949/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4949/events", + "html_url": "https://github.com/dlang/phobos/pull/4949", + "id": 195070382, + "number": 4949, + "title": "Replace use of onRangeError", + "user": { + "login": "andralex", + "id": 566679, + "avatar_url": "https://avatars.githubusercontent.com/u/566679?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/andralex", + "html_url": "https://github.com/andralex", + "followers_url": "https://api.github.com/users/andralex/followers", + "following_url": "https://api.github.com/users/andralex/following{/other_user}", + "gists_url": "https://api.github.com/users/andralex/gists{/gist_id}", + "starred_url": "https://api.github.com/users/andralex/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/andralex/subscriptions", + "organizations_url": "https://api.github.com/users/andralex/orgs", + "repos_url": "https://api.github.com/users/andralex/repos", + "events_url": "https://api.github.com/users/andralex/events{/privacy}", + "received_events_url": "https://api.github.com/users/andralex/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2016-12-12T19:58:46Z", + "updated_at": "2016-12-12T19:58:46Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4949", + "html_url": "https://github.com/dlang/phobos/pull/4949", + "diff_url": "https://github.com/dlang/phobos/pull/4949.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4949.patch" + }, + "body": "This needs to be in in order to support non-pure onRangeError." + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4900", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4900/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4900/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4900/events", + "html_url": "https://github.com/dlang/phobos/pull/4900", + "id": 189117852, + "number": 4900, + "title": "[docs] Improve docs for std.conv.to", + "user": { + "login": "ntrel", + "id": 1107820, + "avatar_url": "https://avatars.githubusercontent.com/u/1107820?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/ntrel", + "html_url": "https://github.com/ntrel", + "followers_url": "https://api.github.com/users/ntrel/followers", + "following_url": "https://api.github.com/users/ntrel/following{/other_user}", + "gists_url": "https://api.github.com/users/ntrel/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ntrel/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ntrel/subscriptions", + "organizations_url": "https://api.github.com/users/ntrel/orgs", + "repos_url": "https://api.github.com/users/ntrel/repos", + "events_url": "https://api.github.com/users/ntrel/events{/privacy}", + "received_events_url": "https://api.github.com/users/ntrel/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 2, + "created_at": "2016-11-14T13:54:59Z", + "updated_at": "2016-12-15T12:07:55Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4900", + "html_url": "https://github.com/dlang/phobos/pull/4900", + "diff_url": "https://github.com/dlang/phobos/pull/4900.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4900.patch" + }, + "body": "* Document overloads of `to` which take a radix - see last commit.\r\n\r\nNote: This continues the work done in #4208." + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4954", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4954/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4954/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4954/events", + "html_url": "https://github.com/dlang/phobos/pull/4954", + "id": 195177809, + "number": 4954, + "title": "Update std.traits to reflect renaming of TypeTuple to AliasSeq", + "user": { + "login": "wilzbach", + "id": 4370550, + "avatar_url": "https://avatars.githubusercontent.com/u/4370550?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wilzbach", + "html_url": "https://github.com/wilzbach", + "followers_url": "https://api.github.com/users/wilzbach/followers", + "following_url": "https://api.github.com/users/wilzbach/following{/other_user}", + "gists_url": "https://api.github.com/users/wilzbach/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wilzbach/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wilzbach/subscriptions", + "organizations_url": "https://api.github.com/users/wilzbach/orgs", + "repos_url": "https://api.github.com/users/wilzbach/repos", + "events_url": "https://api.github.com/users/wilzbach/events{/privacy}", + "received_events_url": "https://api.github.com/users/wilzbach/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": { + "login": "MartinNowak", + "id": 288976, + "avatar_url": "https://avatars.githubusercontent.com/u/288976?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/MartinNowak", + "html_url": "https://github.com/MartinNowak", + "followers_url": "https://api.github.com/users/MartinNowak/followers", + "following_url": "https://api.github.com/users/MartinNowak/following{/other_user}", + "gists_url": "https://api.github.com/users/MartinNowak/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MartinNowak/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MartinNowak/subscriptions", + "organizations_url": "https://api.github.com/users/MartinNowak/orgs", + "repos_url": "https://api.github.com/users/MartinNowak/repos", + "events_url": "https://api.github.com/users/MartinNowak/events{/privacy}", + "received_events_url": "https://api.github.com/users/MartinNowak/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "MartinNowak", + "id": 288976, + "avatar_url": "https://avatars.githubusercontent.com/u/288976?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/MartinNowak", + "html_url": "https://github.com/MartinNowak", + "followers_url": "https://api.github.com/users/MartinNowak/followers", + "following_url": "https://api.github.com/users/MartinNowak/following{/other_user}", + "gists_url": "https://api.github.com/users/MartinNowak/gists{/gist_id}", + "starred_url": "https://api.github.com/users/MartinNowak/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/MartinNowak/subscriptions", + "organizations_url": "https://api.github.com/users/MartinNowak/orgs", + "repos_url": "https://api.github.com/users/MartinNowak/repos", + "events_url": "https://api.github.com/users/MartinNowak/events{/privacy}", + "received_events_url": "https://api.github.com/users/MartinNowak/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": null, + "comments": 6, + "created_at": "2016-12-13T07:05:30Z", + "updated_at": "2016-12-19T13:48:11Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4954", + "html_url": "https://github.com/dlang/phobos/pull/4954", + "diff_url": "https://github.com/dlang/phobos/pull/4954.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4954.patch" + }, + "body": "Revived #3756 as is (just rebased to latest Master)." + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4965", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4965/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4965/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4965/events", + "html_url": "https://github.com/dlang/phobos/pull/4965", + "id": 196290187, + "number": 4965, + "title": "[WIP] Big O attribute notation", + "user": { + "login": "andralex", + "id": 566679, + "avatar_url": "https://avatars.githubusercontent.com/u/566679?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/andralex", + "html_url": "https://github.com/andralex", + "followers_url": "https://api.github.com/users/andralex/followers", + "following_url": "https://api.github.com/users/andralex/following{/other_user}", + "gists_url": "https://api.github.com/users/andralex/gists{/gist_id}", + "starred_url": "https://api.github.com/users/andralex/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/andralex/subscriptions", + "organizations_url": "https://api.github.com/users/andralex/orgs", + "repos_url": "https://api.github.com/users/andralex/repos", + "events_url": "https://api.github.com/users/andralex/events{/privacy}", + "received_events_url": "https://api.github.com/users/andralex/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 2, + "created_at": "2016-12-18T18:19:14Z", + "updated_at": "2016-12-19T17:43:32Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4965", + "html_url": "https://github.com/dlang/phobos/pull/4965", + "diff_url": "https://github.com/dlang/phobos/pull/4965.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4965.patch" + }, + "body": "Associated article: http://erdani.com/d/bigo.html" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4257", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4257/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4257/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4257/events", + "html_url": "https://github.com/dlang/phobos/pull/4257", + "id": 151676492, + "number": 4257, + "title": "std.algorithm.search: expose extremum", + "user": { + "login": "wilzbach", + "id": 4370550, + "avatar_url": "https://avatars.githubusercontent.com/u/4370550?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wilzbach", + "html_url": "https://github.com/wilzbach", + "followers_url": "https://api.github.com/users/wilzbach/followers", + "following_url": "https://api.github.com/users/wilzbach/following{/other_user}", + "gists_url": "https://api.github.com/users/wilzbach/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wilzbach/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wilzbach/subscriptions", + "organizations_url": "https://api.github.com/users/wilzbach/orgs", + "repos_url": "https://api.github.com/users/wilzbach/repos", + "events_url": "https://api.github.com/users/wilzbach/events{/privacy}", + "received_events_url": "https://api.github.com/users/wilzbach/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 14, + "created_at": "2016-04-28T15:43:36Z", + "updated_at": "2016-12-24T14:56:54Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4257", + "html_url": "https://github.com/dlang/phobos/pull/4257", + "diff_url": "https://github.com/dlang/phobos/pull/4257.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4257.patch" + }, + "body": "On #4221 the consensus was that extremum is rarely needed, hence we set it to `private`.\n\nIt seems like @9il just found a nice use case for extremum, `std.math.cmp`:\n\n```\nassert([-2.0, 2, 4].reduce!`cmp(a, b) ? a : b` == -2.0);\nassert([-2.0, 2, 4].reduce!`cmp(a, b) ? b : a` == 4.0);\n```\n\nWell it's also possible to use `reduce`:\n\n```\nassert([-1., 0, 1].extremum!cmp == 1.0);\nassert([-1., 0, 1].extremum!`cmp(a, b) < 0` == -1.0);\n```\n\nHowever it gets neat, if map is needed:\n\n```\nassert([-1., 0, 1].enumerate.extremum!cmp == tuple(2, 1.0));\nassert([-1., 0, 1].enumerate.extremum!`cmp(a, b) < 0` == tuple(0, -1.0));\n```\n\nI added a small goodie that checks whether the first template function can be used as an mapping function (unary function) and otherwise it falls back to the selector (binary function).\n\nAdditionally I added more tests.\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/3948", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/3948/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/3948/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/3948/events", + "html_url": "https://github.com/dlang/phobos/pull/3948", + "id": 128023471, + "number": 3948, + "title": "new function: std.file.copyRecurse", + "user": { + "login": "aG0aep6G", + "id": 9287500, + "avatar_url": "https://avatars.githubusercontent.com/u/9287500?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/aG0aep6G", + "html_url": "https://github.com/aG0aep6G", + "followers_url": "https://api.github.com/users/aG0aep6G/followers", + "following_url": "https://api.github.com/users/aG0aep6G/following{/other_user}", + "gists_url": "https://api.github.com/users/aG0aep6G/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aG0aep6G/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aG0aep6G/subscriptions", + "organizations_url": "https://api.github.com/users/aG0aep6G/orgs", + "repos_url": "https://api.github.com/users/aG0aep6G/repos", + "events_url": "https://api.github.com/users/aG0aep6G/events{/privacy}", + "received_events_url": "https://api.github.com/users/aG0aep6G/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 117785287, + "url": "https://api.github.com/repos/dlang/phobos/labels/needs%20work", + "name": "needs work", + "color": "f7c6c7", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 17, + "created_at": "2016-01-21T21:28:56Z", + "updated_at": "2016-12-26T06:04:19Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/3948", + "html_url": "https://github.com/dlang/phobos/pull/3948", + "diff_url": "https://github.com/dlang/phobos/pull/3948.diff", + "patch_url": "https://github.com/dlang/phobos/pull/3948.patch" + }, + "body": "For when you need to copy a directory.\n\nPossible issues:\n- Timestamps and attributes are not copied for symlinks. See NOTEs in the code.\n- Copying stops on the first error. No way to ignore errors and just copy as much as possible.\n- Creation times are not preserved (Windows).\n- Asserting that there are no symlinks on Windows, because `symlink` is Posix-only. But `attrIsSymlink` can apparently be true on Windows.\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4953", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4953/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4953/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4953/events", + "html_url": "https://github.com/dlang/phobos/pull/4953", + "id": 195174240, + "number": 4953, + "title": "append to an array by emplacement", + "user": { + "login": "wilzbach", + "id": 4370550, + "avatar_url": "https://avatars.githubusercontent.com/u/4370550?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wilzbach", + "html_url": "https://github.com/wilzbach", + "followers_url": "https://api.github.com/users/wilzbach/followers", + "following_url": "https://api.github.com/users/wilzbach/following{/other_user}", + "gists_url": "https://api.github.com/users/wilzbach/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wilzbach/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wilzbach/subscriptions", + "organizations_url": "https://api.github.com/users/wilzbach/orgs", + "repos_url": "https://api.github.com/users/wilzbach/repos", + "events_url": "https://api.github.com/users/wilzbach/events{/privacy}", + "received_events_url": "https://api.github.com/users/wilzbach/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 2, + "created_at": "2016-12-13T06:37:47Z", + "updated_at": "2016-12-26T23:52:15Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4953", + "html_url": "https://github.com/dlang/phobos/pull/4953", + "diff_url": "https://github.com/dlang/phobos/pull/4953.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4953.patch" + }, + "body": "Reboot of @cyisfor's #4116 (with tabs -> spaces and smaller style fixes)" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4265", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4265/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4265/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4265/events", + "html_url": "https://github.com/dlang/phobos/pull/4265", + "id": 151909003, + "number": 4265, + "title": "std.algorithm.searching: no mapping-specialization for extremum", + "user": { + "login": "wilzbach", + "id": 4370550, + "avatar_url": "https://avatars.githubusercontent.com/u/4370550?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wilzbach", + "html_url": "https://github.com/wilzbach", + "followers_url": "https://api.github.com/users/wilzbach/followers", + "following_url": "https://api.github.com/users/wilzbach/following{/other_user}", + "gists_url": "https://api.github.com/users/wilzbach/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wilzbach/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wilzbach/subscriptions", + "organizations_url": "https://api.github.com/users/wilzbach/orgs", + "repos_url": "https://api.github.com/users/wilzbach/repos", + "events_url": "https://api.github.com/users/wilzbach/events{/privacy}", + "received_events_url": "https://api.github.com/users/wilzbach/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 311499730, + "url": "https://api.github.com/repos/dlang/phobos/labels/@andralex", + "name": "@andralex", + "color": "f7c6c7", + "default": false + }, + { + "id": 117785235, + "url": "https://api.github.com/repos/dlang/phobos/labels/decision%20block", + "name": "decision block", + "color": "009800", + "default": false + }, + { + "id": 416188433, + "url": "https://api.github.com/repos/dlang/phobos/labels/Enhancement", + "name": "Enhancement", + "color": "5319e7", + "default": false + }, + { + "id": 416187218, + "url": "https://api.github.com/repos/dlang/phobos/labels/optimization", + "name": "optimization", + "color": "1d76db", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": { + "login": "andralex", + "id": 566679, + "avatar_url": "https://avatars.githubusercontent.com/u/566679?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/andralex", + "html_url": "https://github.com/andralex", + "followers_url": "https://api.github.com/users/andralex/followers", + "following_url": "https://api.github.com/users/andralex/following{/other_user}", + "gists_url": "https://api.github.com/users/andralex/gists{/gist_id}", + "starred_url": "https://api.github.com/users/andralex/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/andralex/subscriptions", + "organizations_url": "https://api.github.com/users/andralex/orgs", + "repos_url": "https://api.github.com/users/andralex/repos", + "events_url": "https://api.github.com/users/andralex/events{/privacy}", + "received_events_url": "https://api.github.com/users/andralex/received_events", + "type": "User", + "site_admin": false + }, + "assignees": [ + { + "login": "andralex", + "id": 566679, + "avatar_url": "https://avatars.githubusercontent.com/u/566679?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/andralex", + "html_url": "https://github.com/andralex", + "followers_url": "https://api.github.com/users/andralex/followers", + "following_url": "https://api.github.com/users/andralex/following{/other_user}", + "gists_url": "https://api.github.com/users/andralex/gists{/gist_id}", + "starred_url": "https://api.github.com/users/andralex/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/andralex/subscriptions", + "organizations_url": "https://api.github.com/users/andralex/orgs", + "repos_url": "https://api.github.com/users/andralex/repos", + "events_url": "https://api.github.com/users/andralex/events{/privacy}", + "received_events_url": "https://api.github.com/users/andralex/received_events", + "type": "User", + "site_admin": false + } + ], + "milestone": null, + "comments": 28, + "created_at": "2016-04-29T16:15:33Z", + "updated_at": "2016-12-27T06:11:13Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4265", + "html_url": "https://github.com/dlang/phobos/pull/4265", + "diff_url": "https://github.com/dlang/phobos/pull/4265.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4265.patch" + }, + "body": "As #4257 (exposing the extremum function) depends on andralex, I thought I separate the optimization for the noop-function case in a separate PR. Here it goes. The idea is to reduce the unnecessary element and function call if no mapping is specifiecd, e.g. from:\n\n```\nMapType mapElement = mapFun(r[i]);\nif (selectorFun(mapElement, extremeElementMapped))\n{\n extremeElement = r[i];\n extremeElementMapped = mapElement;\n}\n```\n\nthis PR reduces it down to:\n\n```\nif (selectorFun(r[i], extremeElement))\n{\n extremeElement = r[i];\n}\n```\n\nMoreover a small goodie was added that checks whether the first template function can be used as an mapping function (unary function) and otherwise it falls back to the selector (binary function). Useful in terms of #4257\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/4248", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/4248/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4248/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/4248/events", + "html_url": "https://github.com/dlang/phobos/pull/4248", + "id": 151282568, + "number": 4248, + "title": "std.algorithm.searching: minmaxElement", + "user": { + "login": "wilzbach", + "id": 4370550, + "avatar_url": "https://avatars.githubusercontent.com/u/4370550?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/wilzbach", + "html_url": "https://github.com/wilzbach", + "followers_url": "https://api.github.com/users/wilzbach/followers", + "following_url": "https://api.github.com/users/wilzbach/following{/other_user}", + "gists_url": "https://api.github.com/users/wilzbach/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wilzbach/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wilzbach/subscriptions", + "organizations_url": "https://api.github.com/users/wilzbach/orgs", + "repos_url": "https://api.github.com/users/wilzbach/repos", + "events_url": "https://api.github.com/users/wilzbach/events{/privacy}", + "received_events_url": "https://api.github.com/users/wilzbach/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 119492872, + "url": "https://api.github.com/repos/dlang/phobos/labels/blocked", + "name": "blocked", + "color": "e11d21", + "default": false + }, + { + "id": 117785236, + "url": "https://api.github.com/repos/dlang/phobos/labels/dependency", + "name": "dependency", + "color": "fbca04", + "default": false + }, + { + "id": 416188433, + "url": "https://api.github.com/repos/dlang/phobos/labels/Enhancement", + "name": "Enhancement", + "color": "5319e7", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 27, + "created_at": "2016-04-27T02:17:08Z", + "updated_at": "2016-12-27T22:01:11Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/4248", + "html_url": "https://github.com/dlang/phobos/pull/4248", + "diff_url": "https://github.com/dlang/phobos/pull/4248.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4248.patch" + }, + "body": "follow-up to #4221 \nAn efficient combination of `{min,max}Element`.\n\nCan be found in C++ as well:\n\nhttp://en.cppreference.com/w/cpp/algorithm/minmax_element\n\nPing @nordlow.\n" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/issues/3373", + "repository_url": "https://api.github.com/repos/dlang/phobos", + "labels_url": "https://api.github.com/repos/dlang/phobos/issues/3373/labels{/name}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/3373/comments", + "events_url": "https://api.github.com/repos/dlang/phobos/issues/3373/events", + "html_url": "https://github.com/dlang/phobos/pull/3373", + "id": 85483473, + "number": 3373, + "title": "Variadic std.algorithm.comparison.equal()", + "user": { + "login": "nordlow", + "id": 829407, + "avatar_url": "https://avatars.githubusercontent.com/u/829407?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nordlow", + "html_url": "https://github.com/nordlow", + "followers_url": "https://api.github.com/users/nordlow/followers", + "following_url": "https://api.github.com/users/nordlow/following{/other_user}", + "gists_url": "https://api.github.com/users/nordlow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nordlow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nordlow/subscriptions", + "organizations_url": "https://api.github.com/users/nordlow/orgs", + "repos_url": "https://api.github.com/users/nordlow/repos", + "events_url": "https://api.github.com/users/nordlow/events{/privacy}", + "received_events_url": "https://api.github.com/users/nordlow/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + { + "id": 416200677, + "url": "https://api.github.com/repos/dlang/phobos/labels/needs%20rebase", + "name": "needs rebase", + "color": "b60205", + "default": false + }, + { + "id": 117785393, + "url": "https://api.github.com/repos/dlang/phobos/labels/needs%20review", + "name": "needs review", + "color": "5319e7", + "default": false + }, + { + "id": 117785287, + "url": "https://api.github.com/repos/dlang/phobos/labels/needs%20work", + "name": "needs work", + "color": "f7c6c7", + "default": false + } + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 16, + "created_at": "2015-06-05T09:37:17Z", + "updated_at": "2016-12-30T00:22:51Z", + "closed_at": null, + "pull_request": { + "url": "https://api.github.com/repos/dlang/phobos/pulls/3373", + "html_url": "https://github.com/dlang/phobos/pull/3373", + "diff_url": "https://github.com/dlang/phobos/pull/3373.diff", + "patch_url": "https://github.com/dlang/phobos/pull/3373.patch" + }, + "body": "All unittests in `std/algorithm/comparison.d` pass.\n\nExtra set of unittests tests all variants of this new variadic implementation when number of arguments >= 2.\n\nHowever one unittest in `std/exception.d` fails.\n\nCan anybody explain why?\n\nSee also: http://forum.dlang.org/post/ovzgklbezgdkxhljfshj@forum.dlang.org\n" + } +] diff --git a/data/payloads/github_repos_dlang_phobos_pulls_2526 b/data/payloads/github_repos_dlang_phobos_pulls_2526 new file mode 100644 index 0000000..7e5d5af --- /dev/null +++ b/data/payloads/github_repos_dlang_phobos_pulls_2526 @@ -0,0 +1,308 @@ +{ + "url": "https://api.github.com/repos/dlang/phobos/pulls/2526", + "id": 21382345, + "html_url": "https://github.com/dlang/phobos/pull/2526", + "diff_url": "https://github.com/dlang/phobos/pull/2526.diff", + "patch_url": "https://github.com/dlang/phobos/pull/2526.patch", + "issue_url": "https://api.github.com/repos/dlang/phobos/issues/2526", + "number": 2526, + "state": "open", + "locked": false, + "title": "Simplify Visual C configuration for -m64/-m32mscoff builds", + "user": { + "login": "CyberShadow", + "id": 160894, + "avatar_url": "https://avatars.githubusercontent.com/u/160894?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/CyberShadow", + "html_url": "https://github.com/CyberShadow", + "followers_url": "https://api.github.com/users/CyberShadow/followers", + "following_url": "https://api.github.com/users/CyberShadow/following{/other_user}", + "gists_url": "https://api.github.com/users/CyberShadow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/CyberShadow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/CyberShadow/subscriptions", + "organizations_url": "https://api.github.com/users/CyberShadow/orgs", + "repos_url": "https://api.github.com/users/CyberShadow/repos", + "events_url": "https://api.github.com/users/CyberShadow/events{/privacy}", + "received_events_url": "https://api.github.com/users/CyberShadow/received_events", + "type": "User", + "site_admin": false + }, + "body": "Ping @rainers \n", + "created_at": "2014-09-17T17:30:01Z", + "updated_at": "2016-03-30T06:19:52Z", + "closed_at": null, + "merged_at": null, + "merge_commit_sha": "045933eeae8733a7ad693f425cd3705ad3eb91a9", + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "commits_url": "https://api.github.com/repos/dlang/phobos/pulls/2526/commits", + "review_comments_url": "https://api.github.com/repos/dlang/phobos/pulls/2526/comments", + "review_comment_url": "https://api.github.com/repos/dlang/phobos/pulls/comments{/number}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/2526/comments", + "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/a04acd6a2813fb344d3e47369cf7fd64523ece44", + "head": { + "label": "CyberShadow:pull-20140917-172747", + "ref": "pull-20140917-172747", + "sha": "a04acd6a2813fb344d3e47369cf7fd64523ece44", + "user": { + "login": "CyberShadow", + "id": 160894, + "avatar_url": "https://avatars.githubusercontent.com/u/160894?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/CyberShadow", + "html_url": "https://github.com/CyberShadow", + "followers_url": "https://api.github.com/users/CyberShadow/followers", + "following_url": "https://api.github.com/users/CyberShadow/following{/other_user}", + "gists_url": "https://api.github.com/users/CyberShadow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/CyberShadow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/CyberShadow/subscriptions", + "organizations_url": "https://api.github.com/users/CyberShadow/orgs", + "repos_url": "https://api.github.com/users/CyberShadow/repos", + "events_url": "https://api.github.com/users/CyberShadow/events{/privacy}", + "received_events_url": "https://api.github.com/users/CyberShadow/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 1737052, + "name": "phobos", + "full_name": "CyberShadow/phobos", + "owner": { + "login": "CyberShadow", + "id": 160894, + "avatar_url": "https://avatars.githubusercontent.com/u/160894?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/CyberShadow", + "html_url": "https://github.com/CyberShadow", + "followers_url": "https://api.github.com/users/CyberShadow/followers", + "following_url": "https://api.github.com/users/CyberShadow/following{/other_user}", + "gists_url": "https://api.github.com/users/CyberShadow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/CyberShadow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/CyberShadow/subscriptions", + "organizations_url": "https://api.github.com/users/CyberShadow/orgs", + "repos_url": "https://api.github.com/users/CyberShadow/repos", + "events_url": "https://api.github.com/users/CyberShadow/events{/privacy}", + "received_events_url": "https://api.github.com/users/CyberShadow/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/CyberShadow/phobos", + "description": "Runtime library for the D programming language", + "fork": true, + "url": "https://api.github.com/repos/CyberShadow/phobos", + "forks_url": "https://api.github.com/repos/CyberShadow/phobos/forks", + "keys_url": "https://api.github.com/repos/CyberShadow/phobos/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/CyberShadow/phobos/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/CyberShadow/phobos/teams", + "hooks_url": "https://api.github.com/repos/CyberShadow/phobos/hooks", + "issue_events_url": "https://api.github.com/repos/CyberShadow/phobos/issues/events{/number}", + "events_url": "https://api.github.com/repos/CyberShadow/phobos/events", + "assignees_url": "https://api.github.com/repos/CyberShadow/phobos/assignees{/user}", + "branches_url": "https://api.github.com/repos/CyberShadow/phobos/branches{/branch}", + "tags_url": "https://api.github.com/repos/CyberShadow/phobos/tags", + "blobs_url": "https://api.github.com/repos/CyberShadow/phobos/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/CyberShadow/phobos/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/CyberShadow/phobos/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/CyberShadow/phobos/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/CyberShadow/phobos/statuses/{sha}", + "languages_url": "https://api.github.com/repos/CyberShadow/phobos/languages", + "stargazers_url": "https://api.github.com/repos/CyberShadow/phobos/stargazers", + "contributors_url": "https://api.github.com/repos/CyberShadow/phobos/contributors", + "subscribers_url": "https://api.github.com/repos/CyberShadow/phobos/subscribers", + "subscription_url": "https://api.github.com/repos/CyberShadow/phobos/subscription", + "commits_url": "https://api.github.com/repos/CyberShadow/phobos/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/CyberShadow/phobos/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/CyberShadow/phobos/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/CyberShadow/phobos/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/CyberShadow/phobos/contents/{+path}", + "compare_url": "https://api.github.com/repos/CyberShadow/phobos/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/CyberShadow/phobos/merges", + "archive_url": "https://api.github.com/repos/CyberShadow/phobos/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/CyberShadow/phobos/downloads", + "issues_url": "https://api.github.com/repos/CyberShadow/phobos/issues{/number}", + "pulls_url": "https://api.github.com/repos/CyberShadow/phobos/pulls{/number}", + "milestones_url": "https://api.github.com/repos/CyberShadow/phobos/milestones{/number}", + "notifications_url": "https://api.github.com/repos/CyberShadow/phobos/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/CyberShadow/phobos/labels{/name}", + "releases_url": "https://api.github.com/repos/CyberShadow/phobos/releases{/id}", + "deployments_url": "https://api.github.com/repos/CyberShadow/phobos/deployments", + "created_at": "2011-05-12T06:16:01Z", + "updated_at": "2016-05-22T10:49:41Z", + "pushed_at": "2016-10-13T08:27:10Z", + "git_url": "git://github.com/CyberShadow/phobos.git", + "ssh_url": "git@github.com:CyberShadow/phobos.git", + "clone_url": "https://github.com/CyberShadow/phobos.git", + "svn_url": "https://github.com/CyberShadow/phobos", + "homepage": "d-programming-language.org", + "size": 47511, + "stargazers_count": 1, + "watchers_count": 1, + "language": "D", + "has_issues": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master" + } + }, + "base": { + "label": "dlang:master", + "ref": "master", + "sha": "5bbdc63721095a25411f8841fd8011e517c27e06", + "user": { + "login": "dlang", + "id": 565913, + "avatar_url": "https://avatars.githubusercontent.com/u/565913?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dlang", + "html_url": "https://github.com/dlang", + "followers_url": "https://api.github.com/users/dlang/followers", + "following_url": "https://api.github.com/users/dlang/following{/other_user}", + "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", + "organizations_url": "https://api.github.com/users/dlang/orgs", + "repos_url": "https://api.github.com/users/dlang/repos", + "events_url": "https://api.github.com/users/dlang/events{/privacy}", + "received_events_url": "https://api.github.com/users/dlang/received_events", + "type": "Organization", + "site_admin": false + }, + "repo": { + "id": 1257084, + "name": "phobos", + "full_name": "dlang/phobos", + "owner": { + "login": "dlang", + "id": 565913, + "avatar_url": "https://avatars.githubusercontent.com/u/565913?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dlang", + "html_url": "https://github.com/dlang", + "followers_url": "https://api.github.com/users/dlang/followers", + "following_url": "https://api.github.com/users/dlang/following{/other_user}", + "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", + "organizations_url": "https://api.github.com/users/dlang/orgs", + "repos_url": "https://api.github.com/users/dlang/repos", + "events_url": "https://api.github.com/users/dlang/events{/privacy}", + "received_events_url": "https://api.github.com/users/dlang/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dlang/phobos", + "description": "The standard library of the D programming language", + "fork": false, + "url": "https://api.github.com/repos/dlang/phobos", + "forks_url": "https://api.github.com/repos/dlang/phobos/forks", + "keys_url": "https://api.github.com/repos/dlang/phobos/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dlang/phobos/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dlang/phobos/teams", + "hooks_url": "https://api.github.com/repos/dlang/phobos/hooks", + "issue_events_url": "https://api.github.com/repos/dlang/phobos/issues/events{/number}", + "events_url": "https://api.github.com/repos/dlang/phobos/events", + "assignees_url": "https://api.github.com/repos/dlang/phobos/assignees{/user}", + "branches_url": "https://api.github.com/repos/dlang/phobos/branches{/branch}", + "tags_url": "https://api.github.com/repos/dlang/phobos/tags", + "blobs_url": "https://api.github.com/repos/dlang/phobos/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dlang/phobos/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dlang/phobos/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dlang/phobos/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dlang/phobos/languages", + "stargazers_url": "https://api.github.com/repos/dlang/phobos/stargazers", + "contributors_url": "https://api.github.com/repos/dlang/phobos/contributors", + "subscribers_url": "https://api.github.com/repos/dlang/phobos/subscribers", + "subscription_url": "https://api.github.com/repos/dlang/phobos/subscription", + "commits_url": "https://api.github.com/repos/dlang/phobos/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dlang/phobos/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dlang/phobos/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dlang/phobos/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dlang/phobos/contents/{+path}", + "compare_url": "https://api.github.com/repos/dlang/phobos/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dlang/phobos/merges", + "archive_url": "https://api.github.com/repos/dlang/phobos/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dlang/phobos/downloads", + "issues_url": "https://api.github.com/repos/dlang/phobos/issues{/number}", + "pulls_url": "https://api.github.com/repos/dlang/phobos/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dlang/phobos/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dlang/phobos/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dlang/phobos/labels{/name}", + "releases_url": "https://api.github.com/repos/dlang/phobos/releases{/id}", + "deployments_url": "https://api.github.com/repos/dlang/phobos/deployments", + "created_at": "2011-01-15T07:00:06Z", + "updated_at": "2017-02-17T04:10:03Z", + "pushed_at": "2017-02-17T18:06:46Z", + "git_url": "git://github.com/dlang/phobos.git", + "ssh_url": "git@github.com:dlang/phobos.git", + "clone_url": "https://github.com/dlang/phobos.git", + "svn_url": "https://github.com/dlang/phobos", + "homepage": "dlang.org/phobos", + "size": 50089, + "stargazers_count": 782, + "watchers_count": 782, + "language": "D", + "has_issues": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "forks_count": 534, + "mirror_url": null, + "open_issues_count": 85, + "forks": 534, + "open_issues": 85, + "watchers": 782, + "default_branch": "master" + } + }, + "_links": { + "self": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/2526" + }, + "html": { + "href": "https://github.com/dlang/phobos/pull/2526" + }, + "issue": { + "href": "https://api.github.com/repos/dlang/phobos/issues/2526" + }, + "comments": { + "href": "https://api.github.com/repos/dlang/phobos/issues/2526/comments" + }, + "review_comments": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/2526/comments" + }, + "review_comment": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/comments{/number}" + }, + "commits": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/2526/commits" + }, + "statuses": { + "href": "https://api.github.com/repos/dlang/phobos/statuses/a04acd6a2813fb344d3e47369cf7fd64523ece44" + } + }, + "merged": false, + "mergeable": true, + "mergeable_state": "unstable", + "merged_by": null, + "comments": 9, + "review_comments": 0, + "maintainer_can_modify": false, + "commits": 1, + "additions": 14, + "deletions": 8, + "changed_files": 1 +} diff --git a/data/payloads/github_repos_dlang_phobos_pulls_3534 b/data/payloads/github_repos_dlang_phobos_pulls_3534 new file mode 100644 index 0000000..a54fae0 --- /dev/null +++ b/data/payloads/github_repos_dlang_phobos_pulls_3534 @@ -0,0 +1,308 @@ +{ + "url": "https://api.github.com/repos/dlang/phobos/pulls/3534", + "id": 41905331, + "html_url": "https://github.com/dlang/phobos/pull/3534", + "diff_url": "https://github.com/dlang/phobos/pull/3534.diff", + "patch_url": "https://github.com/dlang/phobos/pull/3534.patch", + "issue_url": "https://api.github.com/repos/dlang/phobos/issues/3534", + "number": 3534, + "state": "open", + "locked": false, + "title": "Add Specializations for SortedRange", + "user": { + "login": "nordlow", + "id": 829407, + "avatar_url": "https://avatars.githubusercontent.com/u/829407?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nordlow", + "html_url": "https://github.com/nordlow", + "followers_url": "https://api.github.com/users/nordlow/followers", + "following_url": "https://api.github.com/users/nordlow/following{/other_user}", + "gists_url": "https://api.github.com/users/nordlow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nordlow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nordlow/subscriptions", + "organizations_url": "https://api.github.com/users/nordlow/orgs", + "repos_url": "https://api.github.com/users/nordlow/repos", + "events_url": "https://api.github.com/users/nordlow/events{/privacy}", + "received_events_url": "https://api.github.com/users/nordlow/received_events", + "type": "User", + "site_admin": false + }, + "body": "Add new predicate function `std.range.primitives.isSortedRange`: **DONE**\n\nAdd specializations for `SortedRange` in the followings algorithms:\n- `sort`: just return input argument if `pred` parameter matches: **DONE**\n- `sort`-alikes: just return input argument if `pred` parameter matches:\n- `isSorted`: return `true`: **DONE**\n- `find` and alikes, should do some kind of binary search. These could take an extra param `SearchPolicy` for sorted ranges that defaults to binary search.\n- Some of the functions that return a sub-range or a mutated range could probably be returning sorted ranges as well if its input is a sorted range, `remove`, `strip` and `split` at least could.\n- `minPos`: return input as is, if `pred` matches: **DONE**\n\nIn compliance with C++ STL also add\n- `minElement`: O(1) for `SortedRange`, O(n) otherwise: **DONE**\n- `maxElement`: O(1) for `SortedRange!BidirectionalRange`, O(n) otherwise: **DONE**\n- `minmaxElement`: O(1) for `SortedRange!BidirectionalRange`, O(n) otherwise.\n\nSee also: http://forum.dlang.org/post/yenezfjjteokzyvgmzcf@forum.dlang.org\nSee also: https://issues.dlang.org/show_bug.cgi?id=11667\nSee also: http://forum.dlang.org/post/mqskao$28vh$1@digitalmars.com\n\nSee also: http://en.cppreference.com/w/cpp/algorithm/min_element\n", + "created_at": "2015-08-07T15:45:09Z", + "updated_at": "2016-04-29T13:58:08Z", + "closed_at": null, + "merged_at": null, + "merge_commit_sha": "437305c77182e1ecffa3138c6289e9d7e11aa251", + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "commits_url": "https://api.github.com/repos/dlang/phobos/pulls/3534/commits", + "review_comments_url": "https://api.github.com/repos/dlang/phobos/pulls/3534/comments", + "review_comment_url": "https://api.github.com/repos/dlang/phobos/pulls/comments{/number}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/3534/comments", + "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/b7bf452ca52c2a529e79a830eee97310233e3a9c", + "head": { + "label": "nordlow:sortedrange-specializations", + "ref": "sortedrange-specializations", + "sha": "b7bf452ca52c2a529e79a830eee97310233e3a9c", + "user": { + "login": "nordlow", + "id": 829407, + "avatar_url": "https://avatars.githubusercontent.com/u/829407?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nordlow", + "html_url": "https://github.com/nordlow", + "followers_url": "https://api.github.com/users/nordlow/followers", + "following_url": "https://api.github.com/users/nordlow/following{/other_user}", + "gists_url": "https://api.github.com/users/nordlow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nordlow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nordlow/subscriptions", + "organizations_url": "https://api.github.com/users/nordlow/orgs", + "repos_url": "https://api.github.com/users/nordlow/repos", + "events_url": "https://api.github.com/users/nordlow/events{/privacy}", + "received_events_url": "https://api.github.com/users/nordlow/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 17300435, + "name": "phobos", + "full_name": "nordlow/phobos", + "owner": { + "login": "nordlow", + "id": 829407, + "avatar_url": "https://avatars.githubusercontent.com/u/829407?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/nordlow", + "html_url": "https://github.com/nordlow", + "followers_url": "https://api.github.com/users/nordlow/followers", + "following_url": "https://api.github.com/users/nordlow/following{/other_user}", + "gists_url": "https://api.github.com/users/nordlow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/nordlow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/nordlow/subscriptions", + "organizations_url": "https://api.github.com/users/nordlow/orgs", + "repos_url": "https://api.github.com/users/nordlow/repos", + "events_url": "https://api.github.com/users/nordlow/events{/privacy}", + "received_events_url": "https://api.github.com/users/nordlow/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/nordlow/phobos", + "description": "The standard library of the D programming language", + "fork": true, + "url": "https://api.github.com/repos/nordlow/phobos", + "forks_url": "https://api.github.com/repos/nordlow/phobos/forks", + "keys_url": "https://api.github.com/repos/nordlow/phobos/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/nordlow/phobos/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/nordlow/phobos/teams", + "hooks_url": "https://api.github.com/repos/nordlow/phobos/hooks", + "issue_events_url": "https://api.github.com/repos/nordlow/phobos/issues/events{/number}", + "events_url": "https://api.github.com/repos/nordlow/phobos/events", + "assignees_url": "https://api.github.com/repos/nordlow/phobos/assignees{/user}", + "branches_url": "https://api.github.com/repos/nordlow/phobos/branches{/branch}", + "tags_url": "https://api.github.com/repos/nordlow/phobos/tags", + "blobs_url": "https://api.github.com/repos/nordlow/phobos/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/nordlow/phobos/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/nordlow/phobos/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/nordlow/phobos/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/nordlow/phobos/statuses/{sha}", + "languages_url": "https://api.github.com/repos/nordlow/phobos/languages", + "stargazers_url": "https://api.github.com/repos/nordlow/phobos/stargazers", + "contributors_url": "https://api.github.com/repos/nordlow/phobos/contributors", + "subscribers_url": "https://api.github.com/repos/nordlow/phobos/subscribers", + "subscription_url": "https://api.github.com/repos/nordlow/phobos/subscription", + "commits_url": "https://api.github.com/repos/nordlow/phobos/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/nordlow/phobos/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/nordlow/phobos/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/nordlow/phobos/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/nordlow/phobos/contents/{+path}", + "compare_url": "https://api.github.com/repos/nordlow/phobos/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/nordlow/phobos/merges", + "archive_url": "https://api.github.com/repos/nordlow/phobos/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/nordlow/phobos/downloads", + "issues_url": "https://api.github.com/repos/nordlow/phobos/issues{/number}", + "pulls_url": "https://api.github.com/repos/nordlow/phobos/pulls{/number}", + "milestones_url": "https://api.github.com/repos/nordlow/phobos/milestones{/number}", + "notifications_url": "https://api.github.com/repos/nordlow/phobos/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/nordlow/phobos/labels{/name}", + "releases_url": "https://api.github.com/repos/nordlow/phobos/releases{/id}", + "deployments_url": "https://api.github.com/repos/nordlow/phobos/deployments", + "created_at": "2014-02-28T21:33:26Z", + "updated_at": "2016-10-13T11:27:09Z", + "pushed_at": "2017-01-31T15:43:48Z", + "git_url": "git://github.com/nordlow/phobos.git", + "ssh_url": "git@github.com:nordlow/phobos.git", + "clone_url": "https://github.com/nordlow/phobos.git", + "svn_url": "https://github.com/nordlow/phobos", + "homepage": "dlang.org/phobos", + "size": 49507, + "stargazers_count": 1, + "watchers_count": 1, + "language": "D", + "has_issues": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 1, + "default_branch": "master" + } + }, + "base": { + "label": "dlang:master", + "ref": "master", + "sha": "531d986c6f19762f2ddca326519298d43b0c2c8e", + "user": { + "login": "dlang", + "id": 565913, + "avatar_url": "https://avatars.githubusercontent.com/u/565913?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dlang", + "html_url": "https://github.com/dlang", + "followers_url": "https://api.github.com/users/dlang/followers", + "following_url": "https://api.github.com/users/dlang/following{/other_user}", + "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", + "organizations_url": "https://api.github.com/users/dlang/orgs", + "repos_url": "https://api.github.com/users/dlang/repos", + "events_url": "https://api.github.com/users/dlang/events{/privacy}", + "received_events_url": "https://api.github.com/users/dlang/received_events", + "type": "Organization", + "site_admin": false + }, + "repo": { + "id": 1257084, + "name": "phobos", + "full_name": "dlang/phobos", + "owner": { + "login": "dlang", + "id": 565913, + "avatar_url": "https://avatars.githubusercontent.com/u/565913?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dlang", + "html_url": "https://github.com/dlang", + "followers_url": "https://api.github.com/users/dlang/followers", + "following_url": "https://api.github.com/users/dlang/following{/other_user}", + "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", + "organizations_url": "https://api.github.com/users/dlang/orgs", + "repos_url": "https://api.github.com/users/dlang/repos", + "events_url": "https://api.github.com/users/dlang/events{/privacy}", + "received_events_url": "https://api.github.com/users/dlang/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dlang/phobos", + "description": "The standard library of the D programming language", + "fork": false, + "url": "https://api.github.com/repos/dlang/phobos", + "forks_url": "https://api.github.com/repos/dlang/phobos/forks", + "keys_url": "https://api.github.com/repos/dlang/phobos/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dlang/phobos/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dlang/phobos/teams", + "hooks_url": "https://api.github.com/repos/dlang/phobos/hooks", + "issue_events_url": "https://api.github.com/repos/dlang/phobos/issues/events{/number}", + "events_url": "https://api.github.com/repos/dlang/phobos/events", + "assignees_url": "https://api.github.com/repos/dlang/phobos/assignees{/user}", + "branches_url": "https://api.github.com/repos/dlang/phobos/branches{/branch}", + "tags_url": "https://api.github.com/repos/dlang/phobos/tags", + "blobs_url": "https://api.github.com/repos/dlang/phobos/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dlang/phobos/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dlang/phobos/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dlang/phobos/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dlang/phobos/languages", + "stargazers_url": "https://api.github.com/repos/dlang/phobos/stargazers", + "contributors_url": "https://api.github.com/repos/dlang/phobos/contributors", + "subscribers_url": "https://api.github.com/repos/dlang/phobos/subscribers", + "subscription_url": "https://api.github.com/repos/dlang/phobos/subscription", + "commits_url": "https://api.github.com/repos/dlang/phobos/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dlang/phobos/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dlang/phobos/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dlang/phobos/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dlang/phobos/contents/{+path}", + "compare_url": "https://api.github.com/repos/dlang/phobos/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dlang/phobos/merges", + "archive_url": "https://api.github.com/repos/dlang/phobos/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dlang/phobos/downloads", + "issues_url": "https://api.github.com/repos/dlang/phobos/issues{/number}", + "pulls_url": "https://api.github.com/repos/dlang/phobos/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dlang/phobos/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dlang/phobos/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dlang/phobos/labels{/name}", + "releases_url": "https://api.github.com/repos/dlang/phobos/releases{/id}", + "deployments_url": "https://api.github.com/repos/dlang/phobos/deployments", + "created_at": "2011-01-15T07:00:06Z", + "updated_at": "2017-02-17T04:10:03Z", + "pushed_at": "2017-02-17T18:06:46Z", + "git_url": "git://github.com/dlang/phobos.git", + "ssh_url": "git@github.com:dlang/phobos.git", + "clone_url": "https://github.com/dlang/phobos.git", + "svn_url": "https://github.com/dlang/phobos", + "homepage": "dlang.org/phobos", + "size": 50089, + "stargazers_count": 782, + "watchers_count": 782, + "language": "D", + "has_issues": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "forks_count": 534, + "mirror_url": null, + "open_issues_count": 85, + "forks": 534, + "open_issues": 85, + "watchers": 782, + "default_branch": "master" + } + }, + "_links": { + "self": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/3534" + }, + "html": { + "href": "https://github.com/dlang/phobos/pull/3534" + }, + "issue": { + "href": "https://api.github.com/repos/dlang/phobos/issues/3534" + }, + "comments": { + "href": "https://api.github.com/repos/dlang/phobos/issues/3534/comments" + }, + "review_comments": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/3534/comments" + }, + "review_comment": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/comments{/number}" + }, + "commits": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/3534/commits" + }, + "statuses": { + "href": "https://api.github.com/repos/dlang/phobos/statuses/b7bf452ca52c2a529e79a830eee97310233e3a9c" + } + }, + "merged": false, + "mergeable": false, + "mergeable_state": "dirty", + "merged_by": null, + "comments": 34, + "review_comments": 3, + "maintainer_can_modify": false, + "commits": 22, + "additions": 290, + "deletions": 53, + "changed_files": 4 +} diff --git a/data/payloads/github_repos_dlang_phobos_pulls_3620 b/data/payloads/github_repos_dlang_phobos_pulls_3620 new file mode 100644 index 0000000..b6373b8 --- /dev/null +++ b/data/payloads/github_repos_dlang_phobos_pulls_3620 @@ -0,0 +1,308 @@ +{ + "url": "https://api.github.com/repos/dlang/phobos/pulls/3620", + "id": 43853257, + "html_url": "https://github.com/dlang/phobos/pull/3620", + "diff_url": "https://github.com/dlang/phobos/pull/3620.diff", + "patch_url": "https://github.com/dlang/phobos/pull/3620.patch", + "issue_url": "https://api.github.com/repos/dlang/phobos/issues/3620", + "number": 3620, + "state": "open", + "locked": false, + "title": "fix Issue 13780 - Empty ParameterIdentifierTuple for function literal", + "user": { + "login": "luismarques", + "id": 171812, + "avatar_url": "https://avatars.githubusercontent.com/u/171812?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/luismarques", + "html_url": "https://github.com/luismarques", + "followers_url": "https://api.github.com/users/luismarques/followers", + "following_url": "https://api.github.com/users/luismarques/following{/other_user}", + "gists_url": "https://api.github.com/users/luismarques/gists{/gist_id}", + "starred_url": "https://api.github.com/users/luismarques/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/luismarques/subscriptions", + "organizations_url": "https://api.github.com/users/luismarques/orgs", + "repos_url": "https://api.github.com/users/luismarques/repos", + "events_url": "https://api.github.com/users/luismarques/events{/privacy}", + "received_events_url": "https://api.github.com/users/luismarques/received_events", + "type": "User", + "site_admin": false + }, + "body": "ParameterIdentifierTuple intentionally did not accept function pointers and delegates. This surprised people, particularly when using function literals, as indicated in issue 13780. This commit changes that, allowing the issue to be closed.\n\nhttps://issues.dlang.org/show_bug.cgi?id=13780\n", + "created_at": "2015-09-01T09:12:34Z", + "updated_at": "2016-07-29T11:40:01Z", + "closed_at": null, + "merged_at": null, + "merge_commit_sha": "70dafcc72fb98735cdaa26901737d571c30fca22", + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "commits_url": "https://api.github.com/repos/dlang/phobos/pulls/3620/commits", + "review_comments_url": "https://api.github.com/repos/dlang/phobos/pulls/3620/comments", + "review_comment_url": "https://api.github.com/repos/dlang/phobos/pulls/comments{/number}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/3620/comments", + "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/5b8b90e1824cb90635719f6d3b1f6c195a95a47e", + "head": { + "label": "luismarques:fix14947", + "ref": "fix14947", + "sha": "5b8b90e1824cb90635719f6d3b1f6c195a95a47e", + "user": { + "login": "luismarques", + "id": 171812, + "avatar_url": "https://avatars.githubusercontent.com/u/171812?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/luismarques", + "html_url": "https://github.com/luismarques", + "followers_url": "https://api.github.com/users/luismarques/followers", + "following_url": "https://api.github.com/users/luismarques/following{/other_user}", + "gists_url": "https://api.github.com/users/luismarques/gists{/gist_id}", + "starred_url": "https://api.github.com/users/luismarques/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/luismarques/subscriptions", + "organizations_url": "https://api.github.com/users/luismarques/orgs", + "repos_url": "https://api.github.com/users/luismarques/repos", + "events_url": "https://api.github.com/users/luismarques/events{/privacy}", + "received_events_url": "https://api.github.com/users/luismarques/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 40482209, + "name": "phobos", + "full_name": "luismarques/phobos", + "owner": { + "login": "luismarques", + "id": 171812, + "avatar_url": "https://avatars.githubusercontent.com/u/171812?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/luismarques", + "html_url": "https://github.com/luismarques", + "followers_url": "https://api.github.com/users/luismarques/followers", + "following_url": "https://api.github.com/users/luismarques/following{/other_user}", + "gists_url": "https://api.github.com/users/luismarques/gists{/gist_id}", + "starred_url": "https://api.github.com/users/luismarques/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/luismarques/subscriptions", + "organizations_url": "https://api.github.com/users/luismarques/orgs", + "repos_url": "https://api.github.com/users/luismarques/repos", + "events_url": "https://api.github.com/users/luismarques/events{/privacy}", + "received_events_url": "https://api.github.com/users/luismarques/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/luismarques/phobos", + "description": "The standard library of the D programming language", + "fork": true, + "url": "https://api.github.com/repos/luismarques/phobos", + "forks_url": "https://api.github.com/repos/luismarques/phobos/forks", + "keys_url": "https://api.github.com/repos/luismarques/phobos/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/luismarques/phobos/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/luismarques/phobos/teams", + "hooks_url": "https://api.github.com/repos/luismarques/phobos/hooks", + "issue_events_url": "https://api.github.com/repos/luismarques/phobos/issues/events{/number}", + "events_url": "https://api.github.com/repos/luismarques/phobos/events", + "assignees_url": "https://api.github.com/repos/luismarques/phobos/assignees{/user}", + "branches_url": "https://api.github.com/repos/luismarques/phobos/branches{/branch}", + "tags_url": "https://api.github.com/repos/luismarques/phobos/tags", + "blobs_url": "https://api.github.com/repos/luismarques/phobos/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/luismarques/phobos/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/luismarques/phobos/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/luismarques/phobos/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/luismarques/phobos/statuses/{sha}", + "languages_url": "https://api.github.com/repos/luismarques/phobos/languages", + "stargazers_url": "https://api.github.com/repos/luismarques/phobos/stargazers", + "contributors_url": "https://api.github.com/repos/luismarques/phobos/contributors", + "subscribers_url": "https://api.github.com/repos/luismarques/phobos/subscribers", + "subscription_url": "https://api.github.com/repos/luismarques/phobos/subscription", + "commits_url": "https://api.github.com/repos/luismarques/phobos/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/luismarques/phobos/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/luismarques/phobos/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/luismarques/phobos/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/luismarques/phobos/contents/{+path}", + "compare_url": "https://api.github.com/repos/luismarques/phobos/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/luismarques/phobos/merges", + "archive_url": "https://api.github.com/repos/luismarques/phobos/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/luismarques/phobos/downloads", + "issues_url": "https://api.github.com/repos/luismarques/phobos/issues{/number}", + "pulls_url": "https://api.github.com/repos/luismarques/phobos/pulls{/number}", + "milestones_url": "https://api.github.com/repos/luismarques/phobos/milestones{/number}", + "notifications_url": "https://api.github.com/repos/luismarques/phobos/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/luismarques/phobos/labels{/name}", + "releases_url": "https://api.github.com/repos/luismarques/phobos/releases{/id}", + "deployments_url": "https://api.github.com/repos/luismarques/phobos/deployments", + "created_at": "2015-08-10T12:49:46Z", + "updated_at": "2015-08-10T12:49:48Z", + "pushed_at": "2015-09-03T15:22:51Z", + "git_url": "git://github.com/luismarques/phobos.git", + "ssh_url": "git@github.com:luismarques/phobos.git", + "clone_url": "https://github.com/luismarques/phobos.git", + "svn_url": "https://github.com/luismarques/phobos", + "homepage": "dlang.org/phobos", + "size": 44440, + "stargazers_count": 0, + "watchers_count": 0, + "language": "D", + "has_issues": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master" + } + }, + "base": { + "label": "dlang:master", + "ref": "master", + "sha": "1272c1a494db5f639b9bc169a1aa7131e3b4c5b7", + "user": { + "login": "dlang", + "id": 565913, + "avatar_url": "https://avatars.githubusercontent.com/u/565913?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dlang", + "html_url": "https://github.com/dlang", + "followers_url": "https://api.github.com/users/dlang/followers", + "following_url": "https://api.github.com/users/dlang/following{/other_user}", + "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", + "organizations_url": "https://api.github.com/users/dlang/orgs", + "repos_url": "https://api.github.com/users/dlang/repos", + "events_url": "https://api.github.com/users/dlang/events{/privacy}", + "received_events_url": "https://api.github.com/users/dlang/received_events", + "type": "Organization", + "site_admin": false + }, + "repo": { + "id": 1257084, + "name": "phobos", + "full_name": "dlang/phobos", + "owner": { + "login": "dlang", + "id": 565913, + "avatar_url": "https://avatars.githubusercontent.com/u/565913?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dlang", + "html_url": "https://github.com/dlang", + "followers_url": "https://api.github.com/users/dlang/followers", + "following_url": "https://api.github.com/users/dlang/following{/other_user}", + "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", + "organizations_url": "https://api.github.com/users/dlang/orgs", + "repos_url": "https://api.github.com/users/dlang/repos", + "events_url": "https://api.github.com/users/dlang/events{/privacy}", + "received_events_url": "https://api.github.com/users/dlang/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dlang/phobos", + "description": "The standard library of the D programming language", + "fork": false, + "url": "https://api.github.com/repos/dlang/phobos", + "forks_url": "https://api.github.com/repos/dlang/phobos/forks", + "keys_url": "https://api.github.com/repos/dlang/phobos/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dlang/phobos/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dlang/phobos/teams", + "hooks_url": "https://api.github.com/repos/dlang/phobos/hooks", + "issue_events_url": "https://api.github.com/repos/dlang/phobos/issues/events{/number}", + "events_url": "https://api.github.com/repos/dlang/phobos/events", + "assignees_url": "https://api.github.com/repos/dlang/phobos/assignees{/user}", + "branches_url": "https://api.github.com/repos/dlang/phobos/branches{/branch}", + "tags_url": "https://api.github.com/repos/dlang/phobos/tags", + "blobs_url": "https://api.github.com/repos/dlang/phobos/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dlang/phobos/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dlang/phobos/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dlang/phobos/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dlang/phobos/languages", + "stargazers_url": "https://api.github.com/repos/dlang/phobos/stargazers", + "contributors_url": "https://api.github.com/repos/dlang/phobos/contributors", + "subscribers_url": "https://api.github.com/repos/dlang/phobos/subscribers", + "subscription_url": "https://api.github.com/repos/dlang/phobos/subscription", + "commits_url": "https://api.github.com/repos/dlang/phobos/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dlang/phobos/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dlang/phobos/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dlang/phobos/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dlang/phobos/contents/{+path}", + "compare_url": "https://api.github.com/repos/dlang/phobos/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dlang/phobos/merges", + "archive_url": "https://api.github.com/repos/dlang/phobos/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dlang/phobos/downloads", + "issues_url": "https://api.github.com/repos/dlang/phobos/issues{/number}", + "pulls_url": "https://api.github.com/repos/dlang/phobos/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dlang/phobos/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dlang/phobos/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dlang/phobos/labels{/name}", + "releases_url": "https://api.github.com/repos/dlang/phobos/releases{/id}", + "deployments_url": "https://api.github.com/repos/dlang/phobos/deployments", + "created_at": "2011-01-15T07:00:06Z", + "updated_at": "2017-02-17T04:10:03Z", + "pushed_at": "2017-02-17T18:06:46Z", + "git_url": "git://github.com/dlang/phobos.git", + "ssh_url": "git@github.com:dlang/phobos.git", + "clone_url": "https://github.com/dlang/phobos.git", + "svn_url": "https://github.com/dlang/phobos", + "homepage": "dlang.org/phobos", + "size": 50089, + "stargazers_count": 782, + "watchers_count": 782, + "language": "D", + "has_issues": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "forks_count": 534, + "mirror_url": null, + "open_issues_count": 85, + "forks": 534, + "open_issues": 85, + "watchers": 782, + "default_branch": "master" + } + }, + "_links": { + "self": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/3620" + }, + "html": { + "href": "https://github.com/dlang/phobos/pull/3620" + }, + "issue": { + "href": "https://api.github.com/repos/dlang/phobos/issues/3620" + }, + "comments": { + "href": "https://api.github.com/repos/dlang/phobos/issues/3620/comments" + }, + "review_comments": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/3620/comments" + }, + "review_comment": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/comments{/number}" + }, + "commits": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/3620/commits" + }, + "statuses": { + "href": "https://api.github.com/repos/dlang/phobos/statuses/5b8b90e1824cb90635719f6d3b1f6c195a95a47e" + } + }, + "merged": false, + "mergeable": false, + "mergeable_state": "dirty", + "merged_by": null, + "comments": 15, + "review_comments": 0, + "maintainer_can_modify": false, + "commits": 1, + "additions": 5, + "deletions": 8, + "changed_files": 1 +} diff --git a/data/payloads/github_repos_dlang_phobos_pulls_4551 b/data/payloads/github_repos_dlang_phobos_pulls_4551 new file mode 100644 index 0000000..25036a4 --- /dev/null +++ b/data/payloads/github_repos_dlang_phobos_pulls_4551 @@ -0,0 +1,308 @@ +{ + "url": "https://api.github.com/repos/dlang/phobos/pulls/4551", + "id": 76093979, + "html_url": "https://github.com/dlang/phobos/pull/4551", + "diff_url": "https://github.com/dlang/phobos/pull/4551.diff", + "patch_url": "https://github.com/dlang/phobos/pull/4551.patch", + "issue_url": "https://api.github.com/repos/dlang/phobos/issues/4551", + "number": 4551, + "state": "open", + "locked": false, + "title": "prepare for fix of druntime issue 16230", + "user": { + "login": "aG0aep6G", + "id": 9287500, + "avatar_url": "https://avatars.githubusercontent.com/u/9287500?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/aG0aep6G", + "html_url": "https://github.com/aG0aep6G", + "followers_url": "https://api.github.com/users/aG0aep6G/followers", + "following_url": "https://api.github.com/users/aG0aep6G/following{/other_user}", + "gists_url": "https://api.github.com/users/aG0aep6G/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aG0aep6G/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aG0aep6G/subscriptions", + "organizations_url": "https://api.github.com/users/aG0aep6G/orgs", + "repos_url": "https://api.github.com/users/aG0aep6G/repos", + "events_url": "https://api.github.com/users/aG0aep6G/events{/privacy}", + "received_events_url": "https://api.github.com/users/aG0aep6G/received_events", + "type": "User", + "site_admin": false + }, + "body": "[Issue 16230](https://issues.dlang.org/show_bug.cgi?id=16230) is being fixed in https://github.com/dlang/druntime/pull/1605. There, `atomicLoad`'s return type is changed to be `shared` for aggregates with indirections. So some casts need to be added where the result of `atomicLoad` used to be wrongly unshared.\n\n**https://github.com/dlang/druntime/pull/1605 should be reviewed and approved before this gets pulled.**\n\nI believe that the cast in std.experimental.logger.core is wrong. See [issue 16232](https://issues.dlang.org/show_bug.cgi?id=16232). But it's pre-existing condition, and I'm not sure how to fix it.\n", + "created_at": "2016-07-03T17:23:28Z", + "updated_at": "2016-07-05T21:04:06Z", + "closed_at": null, + "merged_at": null, + "merge_commit_sha": "b5a0914d365909210b667463ba622e443a80f963", + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "commits_url": "https://api.github.com/repos/dlang/phobos/pulls/4551/commits", + "review_comments_url": "https://api.github.com/repos/dlang/phobos/pulls/4551/comments", + "review_comment_url": "https://api.github.com/repos/dlang/phobos/pulls/comments{/number}", + "comments_url": "https://api.github.com/repos/dlang/phobos/issues/4551/comments", + "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/c4224ad203f5497569452ff05284124eb7030602", + "head": { + "label": "aG0aep6G:16230", + "ref": "16230", + "sha": "c4224ad203f5497569452ff05284124eb7030602", + "user": { + "login": "aG0aep6G", + "id": 9287500, + "avatar_url": "https://avatars.githubusercontent.com/u/9287500?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/aG0aep6G", + "html_url": "https://github.com/aG0aep6G", + "followers_url": "https://api.github.com/users/aG0aep6G/followers", + "following_url": "https://api.github.com/users/aG0aep6G/following{/other_user}", + "gists_url": "https://api.github.com/users/aG0aep6G/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aG0aep6G/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aG0aep6G/subscriptions", + "organizations_url": "https://api.github.com/users/aG0aep6G/orgs", + "repos_url": "https://api.github.com/users/aG0aep6G/repos", + "events_url": "https://api.github.com/users/aG0aep6G/events{/privacy}", + "received_events_url": "https://api.github.com/users/aG0aep6G/received_events", + "type": "User", + "site_admin": false + }, + "repo": { + "id": 25407404, + "name": "phobos", + "full_name": "aG0aep6G/phobos", + "owner": { + "login": "aG0aep6G", + "id": 9287500, + "avatar_url": "https://avatars.githubusercontent.com/u/9287500?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/aG0aep6G", + "html_url": "https://github.com/aG0aep6G", + "followers_url": "https://api.github.com/users/aG0aep6G/followers", + "following_url": "https://api.github.com/users/aG0aep6G/following{/other_user}", + "gists_url": "https://api.github.com/users/aG0aep6G/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aG0aep6G/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aG0aep6G/subscriptions", + "organizations_url": "https://api.github.com/users/aG0aep6G/orgs", + "repos_url": "https://api.github.com/users/aG0aep6G/repos", + "events_url": "https://api.github.com/users/aG0aep6G/events{/privacy}", + "received_events_url": "https://api.github.com/users/aG0aep6G/received_events", + "type": "User", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/aG0aep6G/phobos", + "description": "The standard library of the D programming language", + "fork": true, + "url": "https://api.github.com/repos/aG0aep6G/phobos", + "forks_url": "https://api.github.com/repos/aG0aep6G/phobos/forks", + "keys_url": "https://api.github.com/repos/aG0aep6G/phobos/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/aG0aep6G/phobos/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/aG0aep6G/phobos/teams", + "hooks_url": "https://api.github.com/repos/aG0aep6G/phobos/hooks", + "issue_events_url": "https://api.github.com/repos/aG0aep6G/phobos/issues/events{/number}", + "events_url": "https://api.github.com/repos/aG0aep6G/phobos/events", + "assignees_url": "https://api.github.com/repos/aG0aep6G/phobos/assignees{/user}", + "branches_url": "https://api.github.com/repos/aG0aep6G/phobos/branches{/branch}", + "tags_url": "https://api.github.com/repos/aG0aep6G/phobos/tags", + "blobs_url": "https://api.github.com/repos/aG0aep6G/phobos/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/aG0aep6G/phobos/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/aG0aep6G/phobos/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/aG0aep6G/phobos/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/aG0aep6G/phobos/statuses/{sha}", + "languages_url": "https://api.github.com/repos/aG0aep6G/phobos/languages", + "stargazers_url": "https://api.github.com/repos/aG0aep6G/phobos/stargazers", + "contributors_url": "https://api.github.com/repos/aG0aep6G/phobos/contributors", + "subscribers_url": "https://api.github.com/repos/aG0aep6G/phobos/subscribers", + "subscription_url": "https://api.github.com/repos/aG0aep6G/phobos/subscription", + "commits_url": "https://api.github.com/repos/aG0aep6G/phobos/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/aG0aep6G/phobos/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/aG0aep6G/phobos/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/aG0aep6G/phobos/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/aG0aep6G/phobos/contents/{+path}", + "compare_url": "https://api.github.com/repos/aG0aep6G/phobos/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/aG0aep6G/phobos/merges", + "archive_url": "https://api.github.com/repos/aG0aep6G/phobos/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/aG0aep6G/phobos/downloads", + "issues_url": "https://api.github.com/repos/aG0aep6G/phobos/issues{/number}", + "pulls_url": "https://api.github.com/repos/aG0aep6G/phobos/pulls{/number}", + "milestones_url": "https://api.github.com/repos/aG0aep6G/phobos/milestones{/number}", + "notifications_url": "https://api.github.com/repos/aG0aep6G/phobos/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/aG0aep6G/phobos/labels{/name}", + "releases_url": "https://api.github.com/repos/aG0aep6G/phobos/releases{/id}", + "deployments_url": "https://api.github.com/repos/aG0aep6G/phobos/deployments", + "created_at": "2014-10-18T19:18:29Z", + "updated_at": "2014-10-17T14:57:26Z", + "pushed_at": "2017-02-12T12:27:28Z", + "git_url": "git://github.com/aG0aep6G/phobos.git", + "ssh_url": "git@github.com:aG0aep6G/phobos.git", + "clone_url": "https://github.com/aG0aep6G/phobos.git", + "svn_url": "https://github.com/aG0aep6G/phobos", + "homepage": "dlang.org/phobos", + "size": 44355, + "stargazers_count": 0, + "watchers_count": 0, + "language": null, + "has_issues": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "open_issues_count": 0, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master" + } + }, + "base": { + "label": "dlang:master", + "ref": "master", + "sha": "fbccadbc5e2fd8628423be24d961ff0db90c01e7", + "user": { + "login": "dlang", + "id": 565913, + "avatar_url": "https://avatars.githubusercontent.com/u/565913?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dlang", + "html_url": "https://github.com/dlang", + "followers_url": "https://api.github.com/users/dlang/followers", + "following_url": "https://api.github.com/users/dlang/following{/other_user}", + "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", + "organizations_url": "https://api.github.com/users/dlang/orgs", + "repos_url": "https://api.github.com/users/dlang/repos", + "events_url": "https://api.github.com/users/dlang/events{/privacy}", + "received_events_url": "https://api.github.com/users/dlang/received_events", + "type": "Organization", + "site_admin": false + }, + "repo": { + "id": 1257084, + "name": "phobos", + "full_name": "dlang/phobos", + "owner": { + "login": "dlang", + "id": 565913, + "avatar_url": "https://avatars.githubusercontent.com/u/565913?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dlang", + "html_url": "https://github.com/dlang", + "followers_url": "https://api.github.com/users/dlang/followers", + "following_url": "https://api.github.com/users/dlang/following{/other_user}", + "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", + "organizations_url": "https://api.github.com/users/dlang/orgs", + "repos_url": "https://api.github.com/users/dlang/repos", + "events_url": "https://api.github.com/users/dlang/events{/privacy}", + "received_events_url": "https://api.github.com/users/dlang/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dlang/phobos", + "description": "The standard library of the D programming language", + "fork": false, + "url": "https://api.github.com/repos/dlang/phobos", + "forks_url": "https://api.github.com/repos/dlang/phobos/forks", + "keys_url": "https://api.github.com/repos/dlang/phobos/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dlang/phobos/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dlang/phobos/teams", + "hooks_url": "https://api.github.com/repos/dlang/phobos/hooks", + "issue_events_url": "https://api.github.com/repos/dlang/phobos/issues/events{/number}", + "events_url": "https://api.github.com/repos/dlang/phobos/events", + "assignees_url": "https://api.github.com/repos/dlang/phobos/assignees{/user}", + "branches_url": "https://api.github.com/repos/dlang/phobos/branches{/branch}", + "tags_url": "https://api.github.com/repos/dlang/phobos/tags", + "blobs_url": "https://api.github.com/repos/dlang/phobos/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dlang/phobos/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dlang/phobos/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dlang/phobos/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dlang/phobos/languages", + "stargazers_url": "https://api.github.com/repos/dlang/phobos/stargazers", + "contributors_url": "https://api.github.com/repos/dlang/phobos/contributors", + "subscribers_url": "https://api.github.com/repos/dlang/phobos/subscribers", + "subscription_url": "https://api.github.com/repos/dlang/phobos/subscription", + "commits_url": "https://api.github.com/repos/dlang/phobos/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dlang/phobos/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dlang/phobos/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dlang/phobos/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dlang/phobos/contents/{+path}", + "compare_url": "https://api.github.com/repos/dlang/phobos/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dlang/phobos/merges", + "archive_url": "https://api.github.com/repos/dlang/phobos/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dlang/phobos/downloads", + "issues_url": "https://api.github.com/repos/dlang/phobos/issues{/number}", + "pulls_url": "https://api.github.com/repos/dlang/phobos/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dlang/phobos/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dlang/phobos/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dlang/phobos/labels{/name}", + "releases_url": "https://api.github.com/repos/dlang/phobos/releases{/id}", + "deployments_url": "https://api.github.com/repos/dlang/phobos/deployments", + "created_at": "2011-01-15T07:00:06Z", + "updated_at": "2017-02-17T04:10:03Z", + "pushed_at": "2017-02-17T18:06:46Z", + "git_url": "git://github.com/dlang/phobos.git", + "ssh_url": "git@github.com:dlang/phobos.git", + "clone_url": "https://github.com/dlang/phobos.git", + "svn_url": "https://github.com/dlang/phobos", + "homepage": "dlang.org/phobos", + "size": 50089, + "stargazers_count": 782, + "watchers_count": 782, + "language": "D", + "has_issues": false, + "has_downloads": true, + "has_wiki": false, + "has_pages": false, + "forks_count": 534, + "mirror_url": null, + "open_issues_count": 85, + "forks": 534, + "open_issues": 85, + "watchers": 782, + "default_branch": "master" + } + }, + "_links": { + "self": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/4551" + }, + "html": { + "href": "https://github.com/dlang/phobos/pull/4551" + }, + "issue": { + "href": "https://api.github.com/repos/dlang/phobos/issues/4551" + }, + "comments": { + "href": "https://api.github.com/repos/dlang/phobos/issues/4551/comments" + }, + "review_comments": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/4551/comments" + }, + "review_comment": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/comments{/number}" + }, + "commits": { + "href": "https://api.github.com/repos/dlang/phobos/pulls/4551/commits" + }, + "statuses": { + "href": "https://api.github.com/repos/dlang/phobos/statuses/c4224ad203f5497569452ff05284124eb7030602" + } + }, + "merged": false, + "mergeable": false, + "mergeable_state": "dirty", + "merged_by": null, + "comments": 1, + "review_comments": 0, + "maintainer_can_modify": false, + "commits": 1, + "additions": 4, + "deletions": 3, + "changed_files": 2 +} diff --git a/data/payloads/github_repos_dlang_phobos_status_5b8b90e1824cb90635719f6d3b1f6c195a95a47e b/data/payloads/github_repos_dlang_phobos_status_5b8b90e1824cb90635719f6d3b1f6c195a95a47e new file mode 100644 index 0000000..2a627fe --- /dev/null +++ b/data/payloads/github_repos_dlang_phobos_status_5b8b90e1824cb90635719f6d3b1f6c195a95a47e @@ -0,0 +1,94 @@ +{ + "state": "pending", + "statuses": [ + { + "url": "https://api.github.com/repos/dlang/phobos/statuses/5b8b90e1824cb90635719f6d3b1f6c195a95a47e", + "id": 375428776, + "state": "pending", + "description": "Pass: 7, In Progress: 1, Pending: 2", + "target_url": "https://auto-tester.puremagic.com/pull-history.ghtml?projectid=1&repoid=3&pullid=3620", + "context": "auto-tester", + "created_at": "2015-11-28T14:08:20Z", + "updated_at": "2015-11-28T14:08:20Z" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/statuses/5b8b90e1824cb90635719f6d3b1f6c195a95a47e", + "id": 501347549, + "state": "pending", + "description": "Building documentation", + "target_url": "http://dtest.thecybershadow.net/results/e625a94a01da76d252929b31ad8afc8a829d3a43/5b8b90e1824cb90635719f6d3b1f6c195a95a47e/", + "context": "CyberShadow/DAutoTest", + "created_at": "2016-03-26T23:31:10Z", + "updated_at": "2016-03-26T23:31:10Z" + } + ], + "sha": "5b8b90e1824cb90635719f6d3b1f6c195a95a47e", + "total_count": 2, + "repository": { + "id": 1257084, + "name": "phobos", + "full_name": "dlang/phobos", + "owner": { + "login": "dlang", + "id": 565913, + "avatar_url": "https://avatars.githubusercontent.com/u/565913?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dlang", + "html_url": "https://github.com/dlang", + "followers_url": "https://api.github.com/users/dlang/followers", + "following_url": "https://api.github.com/users/dlang/following{/other_user}", + "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", + "organizations_url": "https://api.github.com/users/dlang/orgs", + "repos_url": "https://api.github.com/users/dlang/repos", + "events_url": "https://api.github.com/users/dlang/events{/privacy}", + "received_events_url": "https://api.github.com/users/dlang/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dlang/phobos", + "description": "The standard library of the D programming language", + "fork": false, + "url": "https://api.github.com/repos/dlang/phobos", + "forks_url": "https://api.github.com/repos/dlang/phobos/forks", + "keys_url": "https://api.github.com/repos/dlang/phobos/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dlang/phobos/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dlang/phobos/teams", + "hooks_url": "https://api.github.com/repos/dlang/phobos/hooks", + "issue_events_url": "https://api.github.com/repos/dlang/phobos/issues/events{/number}", + "events_url": "https://api.github.com/repos/dlang/phobos/events", + "assignees_url": "https://api.github.com/repos/dlang/phobos/assignees{/user}", + "branches_url": "https://api.github.com/repos/dlang/phobos/branches{/branch}", + "tags_url": "https://api.github.com/repos/dlang/phobos/tags", + "blobs_url": "https://api.github.com/repos/dlang/phobos/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dlang/phobos/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dlang/phobos/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dlang/phobos/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dlang/phobos/languages", + "stargazers_url": "https://api.github.com/repos/dlang/phobos/stargazers", + "contributors_url": "https://api.github.com/repos/dlang/phobos/contributors", + "subscribers_url": "https://api.github.com/repos/dlang/phobos/subscribers", + "subscription_url": "https://api.github.com/repos/dlang/phobos/subscription", + "commits_url": "https://api.github.com/repos/dlang/phobos/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dlang/phobos/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dlang/phobos/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dlang/phobos/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dlang/phobos/contents/{+path}", + "compare_url": "https://api.github.com/repos/dlang/phobos/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dlang/phobos/merges", + "archive_url": "https://api.github.com/repos/dlang/phobos/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dlang/phobos/downloads", + "issues_url": "https://api.github.com/repos/dlang/phobos/issues{/number}", + "pulls_url": "https://api.github.com/repos/dlang/phobos/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dlang/phobos/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dlang/phobos/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dlang/phobos/labels{/name}", + "releases_url": "https://api.github.com/repos/dlang/phobos/releases{/id}", + "deployments_url": "https://api.github.com/repos/dlang/phobos/deployments" + }, + "commit_url": "https://api.github.com/repos/dlang/phobos/commits/5b8b90e1824cb90635719f6d3b1f6c195a95a47e", + "url": "https://api.github.com/repos/dlang/phobos/commits/5b8b90e1824cb90635719f6d3b1f6c195a95a47e/status" +} diff --git a/data/payloads/github_repos_dlang_phobos_status_a04acd6a2813fb344d3e47369cf7fd64523ece44 b/data/payloads/github_repos_dlang_phobos_status_a04acd6a2813fb344d3e47369cf7fd64523ece44 new file mode 100644 index 0000000..5ee95d0 --- /dev/null +++ b/data/payloads/github_repos_dlang_phobos_status_a04acd6a2813fb344d3e47369cf7fd64523ece44 @@ -0,0 +1,104 @@ +{ + "state": "pending", + "statuses": [ + { + "url": "https://api.github.com/repos/dlang/phobos/statuses/a04acd6a2813fb344d3e47369cf7fd64523ece44", + "id": 124525297, + "state": "pending", + "description": "Pass: 8, In Progress: 1, Pending: 1", + "target_url": "https://auto-tester.puremagic.com/pull-history.ghtml?projectid=1&repoid=3&pullid=2526", + "context": "default", + "created_at": "2014-11-05T01:07:42Z", + "updated_at": "2014-11-05T01:07:42Z" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/statuses/a04acd6a2813fb344d3e47369cf7fd64523ece44", + "id": 273239622, + "state": "pending", + "description": "Pass: 3, In Progress: 1, Pending: 6", + "target_url": "https://auto-tester.puremagic.com/pull-history.ghtml?projectid=1&repoid=3&pullid=2526", + "context": "auto-tester", + "created_at": "2015-07-28T22:34:14Z", + "updated_at": "2015-07-28T22:34:14Z" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/statuses/a04acd6a2813fb344d3e47369cf7fd64523ece44", + "id": 466682029, + "state": "pending", + "description": "Building documentation", + "target_url": "http://dtest.thecybershadow.net/results/debc1228130b04de02579766e48d46df3726e67b/a04acd6a2813fb344d3e47369cf7fd64523ece44/", + "context": "CyberShadow/DAutoTest", + "created_at": "2016-02-27T00:06:47Z", + "updated_at": "2016-02-27T00:06:47Z" + } + ], + "sha": "a04acd6a2813fb344d3e47369cf7fd64523ece44", + "total_count": 3, + "repository": { + "id": 1257084, + "name": "phobos", + "full_name": "dlang/phobos", + "owner": { + "login": "dlang", + "id": 565913, + "avatar_url": "https://avatars.githubusercontent.com/u/565913?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dlang", + "html_url": "https://github.com/dlang", + "followers_url": "https://api.github.com/users/dlang/followers", + "following_url": "https://api.github.com/users/dlang/following{/other_user}", + "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", + "organizations_url": "https://api.github.com/users/dlang/orgs", + "repos_url": "https://api.github.com/users/dlang/repos", + "events_url": "https://api.github.com/users/dlang/events{/privacy}", + "received_events_url": "https://api.github.com/users/dlang/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dlang/phobos", + "description": "The standard library of the D programming language", + "fork": false, + "url": "https://api.github.com/repos/dlang/phobos", + "forks_url": "https://api.github.com/repos/dlang/phobos/forks", + "keys_url": "https://api.github.com/repos/dlang/phobos/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dlang/phobos/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dlang/phobos/teams", + "hooks_url": "https://api.github.com/repos/dlang/phobos/hooks", + "issue_events_url": "https://api.github.com/repos/dlang/phobos/issues/events{/number}", + "events_url": "https://api.github.com/repos/dlang/phobos/events", + "assignees_url": "https://api.github.com/repos/dlang/phobos/assignees{/user}", + "branches_url": "https://api.github.com/repos/dlang/phobos/branches{/branch}", + "tags_url": "https://api.github.com/repos/dlang/phobos/tags", + "blobs_url": "https://api.github.com/repos/dlang/phobos/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dlang/phobos/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dlang/phobos/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dlang/phobos/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dlang/phobos/languages", + "stargazers_url": "https://api.github.com/repos/dlang/phobos/stargazers", + "contributors_url": "https://api.github.com/repos/dlang/phobos/contributors", + "subscribers_url": "https://api.github.com/repos/dlang/phobos/subscribers", + "subscription_url": "https://api.github.com/repos/dlang/phobos/subscription", + "commits_url": "https://api.github.com/repos/dlang/phobos/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dlang/phobos/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dlang/phobos/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dlang/phobos/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dlang/phobos/contents/{+path}", + "compare_url": "https://api.github.com/repos/dlang/phobos/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dlang/phobos/merges", + "archive_url": "https://api.github.com/repos/dlang/phobos/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dlang/phobos/downloads", + "issues_url": "https://api.github.com/repos/dlang/phobos/issues{/number}", + "pulls_url": "https://api.github.com/repos/dlang/phobos/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dlang/phobos/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dlang/phobos/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dlang/phobos/labels{/name}", + "releases_url": "https://api.github.com/repos/dlang/phobos/releases{/id}", + "deployments_url": "https://api.github.com/repos/dlang/phobos/deployments" + }, + "commit_url": "https://api.github.com/repos/dlang/phobos/commits/a04acd6a2813fb344d3e47369cf7fd64523ece44", + "url": "https://api.github.com/repos/dlang/phobos/commits/a04acd6a2813fb344d3e47369cf7fd64523ece44/status" +} diff --git a/data/payloads/github_repos_dlang_phobos_status_b7bf452ca52c2a529e79a830eee97310233e3a9c b/data/payloads/github_repos_dlang_phobos_status_b7bf452ca52c2a529e79a830eee97310233e3a9c new file mode 100644 index 0000000..ea5adb5 --- /dev/null +++ b/data/payloads/github_repos_dlang_phobos_status_b7bf452ca52c2a529e79a830eee97310233e3a9c @@ -0,0 +1,94 @@ +{ + "state": "failure", + "statuses": [ + { + "url": "https://api.github.com/repos/dlang/phobos/statuses/b7bf452ca52c2a529e79a830eee97310233e3a9c", + "id": 484411227, + "state": "error", + "description": "Merge failed", + "target_url": "http://dtest.thecybershadow.net/results/a50cf0a25a2d7f98236612575424d2817254bf15/b7bf452ca52c2a529e79a830eee97310233e3a9c/", + "context": "CyberShadow/DAutoTest", + "created_at": "2016-03-12T18:48:01Z", + "updated_at": "2016-03-12T18:48:01Z" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/statuses/b7bf452ca52c2a529e79a830eee97310233e3a9c", + "id": 728186443, + "state": "failure", + "description": "Fail: 7, Pending: 3", + "target_url": "https://auto-tester.puremagic.com/pull-history.ghtml?projectid=1&repoid=3&pullid=3534", + "context": "auto-tester", + "created_at": "2016-08-31T11:01:45Z", + "updated_at": "2016-08-31T11:01:45Z" + } + ], + "sha": "b7bf452ca52c2a529e79a830eee97310233e3a9c", + "total_count": 2, + "repository": { + "id": 1257084, + "name": "phobos", + "full_name": "dlang/phobos", + "owner": { + "login": "dlang", + "id": 565913, + "avatar_url": "https://avatars.githubusercontent.com/u/565913?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dlang", + "html_url": "https://github.com/dlang", + "followers_url": "https://api.github.com/users/dlang/followers", + "following_url": "https://api.github.com/users/dlang/following{/other_user}", + "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", + "organizations_url": "https://api.github.com/users/dlang/orgs", + "repos_url": "https://api.github.com/users/dlang/repos", + "events_url": "https://api.github.com/users/dlang/events{/privacy}", + "received_events_url": "https://api.github.com/users/dlang/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dlang/phobos", + "description": "The standard library of the D programming language", + "fork": false, + "url": "https://api.github.com/repos/dlang/phobos", + "forks_url": "https://api.github.com/repos/dlang/phobos/forks", + "keys_url": "https://api.github.com/repos/dlang/phobos/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dlang/phobos/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dlang/phobos/teams", + "hooks_url": "https://api.github.com/repos/dlang/phobos/hooks", + "issue_events_url": "https://api.github.com/repos/dlang/phobos/issues/events{/number}", + "events_url": "https://api.github.com/repos/dlang/phobos/events", + "assignees_url": "https://api.github.com/repos/dlang/phobos/assignees{/user}", + "branches_url": "https://api.github.com/repos/dlang/phobos/branches{/branch}", + "tags_url": "https://api.github.com/repos/dlang/phobos/tags", + "blobs_url": "https://api.github.com/repos/dlang/phobos/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dlang/phobos/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dlang/phobos/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dlang/phobos/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dlang/phobos/languages", + "stargazers_url": "https://api.github.com/repos/dlang/phobos/stargazers", + "contributors_url": "https://api.github.com/repos/dlang/phobos/contributors", + "subscribers_url": "https://api.github.com/repos/dlang/phobos/subscribers", + "subscription_url": "https://api.github.com/repos/dlang/phobos/subscription", + "commits_url": "https://api.github.com/repos/dlang/phobos/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dlang/phobos/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dlang/phobos/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dlang/phobos/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dlang/phobos/contents/{+path}", + "compare_url": "https://api.github.com/repos/dlang/phobos/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dlang/phobos/merges", + "archive_url": "https://api.github.com/repos/dlang/phobos/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dlang/phobos/downloads", + "issues_url": "https://api.github.com/repos/dlang/phobos/issues{/number}", + "pulls_url": "https://api.github.com/repos/dlang/phobos/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dlang/phobos/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dlang/phobos/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dlang/phobos/labels{/name}", + "releases_url": "https://api.github.com/repos/dlang/phobos/releases{/id}", + "deployments_url": "https://api.github.com/repos/dlang/phobos/deployments" + }, + "commit_url": "https://api.github.com/repos/dlang/phobos/commits/b7bf452ca52c2a529e79a830eee97310233e3a9c", + "url": "https://api.github.com/repos/dlang/phobos/commits/b7bf452ca52c2a529e79a830eee97310233e3a9c/status" +} diff --git a/data/payloads/github_repos_dlang_phobos_status_c4224ad203f5497569452ff05284124eb7030602 b/data/payloads/github_repos_dlang_phobos_status_c4224ad203f5497569452ff05284124eb7030602 new file mode 100644 index 0000000..14c1854 --- /dev/null +++ b/data/payloads/github_repos_dlang_phobos_status_c4224ad203f5497569452ff05284124eb7030602 @@ -0,0 +1,104 @@ +{ + "state": "failure", + "statuses": [ + { + "url": "https://api.github.com/repos/dlang/phobos/statuses/c4224ad203f5497569452ff05284124eb7030602", + "id": 634076202, + "state": "success", + "description": "The Travis CI build passed", + "target_url": "https://travis-ci.org/dlang/phobos/builds/142033548", + "context": "continuous-integration/travis-ci/pr", + "created_at": "2016-07-03T17:26:31Z", + "updated_at": "2016-07-03T17:26:31Z" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/statuses/c4224ad203f5497569452ff05284124eb7030602", + "id": 1027031561, + "state": "error", + "description": "Merge failed", + "target_url": "http://dtest.dlang.io/results/e5a69cd48efa3f00d0534db8cf381268ce548b5f/c4224ad203f5497569452ff05284124eb7030602/", + "context": "CyberShadow/DAutoTest", + "created_at": "2017-02-17T11:50:37Z", + "updated_at": "2017-02-17T11:50:37Z" + }, + { + "url": "https://api.github.com/repos/dlang/phobos/statuses/c4224ad203f5497569452ff05284124eb7030602", + "id": 1027172108, + "state": "failure", + "description": "Fail: 1, Pending: 9", + "target_url": "https://auto-tester.puremagic.com/pull-history.ghtml?projectid=1&repoid=3&pullid=4551", + "context": "auto-tester", + "created_at": "2017-02-17T13:11:43Z", + "updated_at": "2017-02-17T13:11:43Z" + } + ], + "sha": "c4224ad203f5497569452ff05284124eb7030602", + "total_count": 3, + "repository": { + "id": 1257084, + "name": "phobos", + "full_name": "dlang/phobos", + "owner": { + "login": "dlang", + "id": 565913, + "avatar_url": "https://avatars.githubusercontent.com/u/565913?v=3", + "gravatar_id": "", + "url": "https://api.github.com/users/dlang", + "html_url": "https://github.com/dlang", + "followers_url": "https://api.github.com/users/dlang/followers", + "following_url": "https://api.github.com/users/dlang/following{/other_user}", + "gists_url": "https://api.github.com/users/dlang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dlang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dlang/subscriptions", + "organizations_url": "https://api.github.com/users/dlang/orgs", + "repos_url": "https://api.github.com/users/dlang/repos", + "events_url": "https://api.github.com/users/dlang/events{/privacy}", + "received_events_url": "https://api.github.com/users/dlang/received_events", + "type": "Organization", + "site_admin": false + }, + "private": false, + "html_url": "https://github.com/dlang/phobos", + "description": "The standard library of the D programming language", + "fork": false, + "url": "https://api.github.com/repos/dlang/phobos", + "forks_url": "https://api.github.com/repos/dlang/phobos/forks", + "keys_url": "https://api.github.com/repos/dlang/phobos/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/dlang/phobos/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/dlang/phobos/teams", + "hooks_url": "https://api.github.com/repos/dlang/phobos/hooks", + "issue_events_url": "https://api.github.com/repos/dlang/phobos/issues/events{/number}", + "events_url": "https://api.github.com/repos/dlang/phobos/events", + "assignees_url": "https://api.github.com/repos/dlang/phobos/assignees{/user}", + "branches_url": "https://api.github.com/repos/dlang/phobos/branches{/branch}", + "tags_url": "https://api.github.com/repos/dlang/phobos/tags", + "blobs_url": "https://api.github.com/repos/dlang/phobos/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/dlang/phobos/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/dlang/phobos/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/dlang/phobos/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/dlang/phobos/statuses/{sha}", + "languages_url": "https://api.github.com/repos/dlang/phobos/languages", + "stargazers_url": "https://api.github.com/repos/dlang/phobos/stargazers", + "contributors_url": "https://api.github.com/repos/dlang/phobos/contributors", + "subscribers_url": "https://api.github.com/repos/dlang/phobos/subscribers", + "subscription_url": "https://api.github.com/repos/dlang/phobos/subscription", + "commits_url": "https://api.github.com/repos/dlang/phobos/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/dlang/phobos/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/dlang/phobos/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/dlang/phobos/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/dlang/phobos/contents/{+path}", + "compare_url": "https://api.github.com/repos/dlang/phobos/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/dlang/phobos/merges", + "archive_url": "https://api.github.com/repos/dlang/phobos/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/dlang/phobos/downloads", + "issues_url": "https://api.github.com/repos/dlang/phobos/issues{/number}", + "pulls_url": "https://api.github.com/repos/dlang/phobos/pulls{/number}", + "milestones_url": "https://api.github.com/repos/dlang/phobos/milestones{/number}", + "notifications_url": "https://api.github.com/repos/dlang/phobos/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/dlang/phobos/labels{/name}", + "releases_url": "https://api.github.com/repos/dlang/phobos/releases{/id}", + "deployments_url": "https://api.github.com/repos/dlang/phobos/deployments" + }, + "commit_url": "https://api.github.com/repos/dlang/phobos/commits/c4224ad203f5497569452ff05284124eb7030602", + "url": "https://api.github.com/repos/dlang/phobos/commits/c4224ad203f5497569452ff05284124eb7030602/status" +} diff --git a/source/dlangbot/app.d b/source/dlangbot/app.d index 281b001..90cfcd2 100644 --- a/source/dlangbot/app.d +++ b/source/dlangbot/app.d @@ -8,12 +8,14 @@ public import dlangbot.github : githubAPIURL, githubAuth, hookSecret; public import dlangbot.travis : travisAPIURL; public import dlangbot.trello : trelloAPIURL, trelloAuth, trelloSecret; -import std.datetime : Clock, Duration, minutes, seconds, SysTime; +string cronDailySecret; + +import std.datetime : Clock, days, Duration, minutes, seconds, SysTime; import vibe.core.log; import vibe.data.json; import vibe.http.client : HTTPClient; -import vibe.http.common : HTTPMethod; +import vibe.http.common : enforceBadRequest, enforceHTTP, HTTPMethod, HTTPStatus; import vibe.http.router : URLRouter; import vibe.http.server : HTTPServerRequest, HTTPServerResponse, HTTPServerSettings; import vibe.stream.operations : readAllUTF8; @@ -24,6 +26,8 @@ bool runTrello = true; Duration timeBetweenFullPRChecks = 5.minutes; // this should never be larger 30 mins on heroku Throttler!(typeof(&searchForAutoMergePrs)) prThrottler; +Duration prInactivityDur = 90.days; // PRs with no activity within X days will get flagged + enum trelloHookURL = "https://dlang-bot.herokuapp.com/trello_hook"; version(unittest){} else @@ -42,6 +46,7 @@ shared static this() trelloAuth = "key="~environment["TRELLO_KEY"]~"&token="~environment["TRELLO_TOKEN"]; hookSecret = environment["GH_HOOK_SECRET"]; travisAuth = "token " ~ environment["TRAVIS_TOKEN"]; + cronDailySecret = environment["CRON_DAILY_SECRET"]; // workaround for stupid openssl.conf on Heroku if (environment.get("DYNO") !is null) @@ -68,6 +73,7 @@ void startServer(HTTPServerSettings settings) .post("/github_hook", &githubHook) .match(HTTPMethod.HEAD, "/trello_hook", (req, res) => res.writeVoidBody) .post("/trello_hook", &trelloHook) + .get("/cron_daily", &cronDaily) ; HTTPClient.setUserAgentString("dlang-bot vibe.d/"~vibeVersionString); @@ -155,7 +161,7 @@ void githubHook(HTTPServerRequest req, HTTPServerResponse res) case "opened", "reopened", "synchronize", "labeled", "edited": auto pullRequest = json["pull_request"].deserializeJson!PullRequest; - runTaskHelper(toDelegate(&handlePR), action, pullRequest); + runTaskHelper(&handlePR, action, &pullRequest); return res.writeBody("handled"); default: return res.writeBody("ignored"); @@ -167,11 +173,30 @@ void githubHook(HTTPServerRequest req, HTTPServerResponse res) //============================================================================== -void handlePR(string action, PullRequest pr) +void cronDaily(HTTPServerRequest req, HTTPServerResponse res) +{ + enforceBadRequest(req.query.length > 0, "No repo slugs provided"); + enforceHTTP(req.query.get("secret") == cronDailySecret, + HTTPStatus.unauthorized, "Invalid or no secret provided"); + + foreach (ref slug; req.query.getAll("repo")) + { + logInfo("running cron.daily for: %s", slug); + runTaskHelper(&searchForInactivePrs, slug, prInactivityDur); + } + + return res.writeBody("OK"); +} + +//============================================================================== + +void handlePR(string action, PullRequest* _pr) { import std.algorithm : any; import vibe.core.core : setTimer; + const PullRequest pr = *_pr; + Json[] commits; if (action == "labeled" || action == "synchronize") diff --git a/source/dlangbot/github.d b/source/dlangbot/github.d index bb388cf..825529d 100644 --- a/source/dlangbot/github.d +++ b/source/dlangbot/github.d @@ -6,6 +6,7 @@ string githubAuth, hookSecret; import dlangbot.bugzilla : bugzillaURL, Issue, IssueRef; import std.algorithm, std.range; +import std.datetime; import std.format : format; import std.typecons : Tuple; @@ -38,17 +39,15 @@ string formatComment(R1, R2)(R1 refs, R2 descs) return app.data; } -struct Comment { string url, body_; } - -Comment getBotComment(in ref PullRequest pr) +GHComment getBotComment(in ref PullRequest pr) { // the bot may post multiple comments (mention-bot & bugzilla links) auto res = ghGetRequest(pr.commentsURL) .readJson[] .find!(c => c["user"]["login"] == "dlang-bot" && c["body"].get!string.canFind("Bugzilla")); if (res.length) - return deserializeJson!Comment(res[0]); - return Comment(); + return deserializeJson!GHComment(res[0]); + return GHComment(); } auto ghGetRequest(string url) @@ -58,7 +57,15 @@ auto ghGetRequest(string url) }); } -void ghSendRequest(scope void delegate(scope HTTPClientRequest req) userReq, string url) +auto ghGetRequest(scope void delegate(scope HTTPClientRequest req) userReq, string url) +{ + return requestHTTP(url, (scope req) { + req.headers["Authorization"] = githubAuth; + userReq(req); + }); +} + +auto ghSendRequest(scope void delegate(scope HTTPClientRequest req) userReq, string url) { HTTPMethod method; requestHTTP(url, (scope req) { @@ -87,14 +94,12 @@ auto ghSendRequest(T...)(HTTPMethod method, string url, T arg) }, url); } -void updateGithubComment(in ref PullRequest pr, in ref Comment comment, string action, IssueRef[] refs, Issue[] descs) +void updateGithubComment(in ref PullRequest pr, in ref GHComment comment, string action, IssueRef[] refs, Issue[] descs) { logDebug("%s", refs); if (refs.empty) { - if (comment.url.length) // delete any existing comment - ghSendRequest(HTTPMethod.DELETE, comment.url); - return; + return comment.remove(); } logDebug("%s", descs); assert(refs.map!(r => r.id).equal(descs.map!(d => d.id))); @@ -105,9 +110,9 @@ void updateGithubComment(in ref PullRequest pr, in ref Comment comment, string a if (msg != comment.body_) { if (comment.url.length) - ghSendRequest(HTTPMethod.PATCH, comment.url, ["body" : msg]); + comment.update(msg); else if (action != "closed" && action != "merged") - ghSendRequest(HTTPMethod.POST, pr.commentsURL, ["body" : msg]); + comment.post(pr, msg); } } @@ -116,35 +121,6 @@ void updateGithubComment(in ref PullRequest pr, in ref Comment comment, string a // Github Auto-merge //============================================================================== -struct PullRequest -{ - import std.typecons : Nullable; - - static struct Repo - { - @name("full_name") string fullName; - } - static struct Branch - { - Repo repo; - } - Branch base, head; - enum State { open, closed } - @byName State state; - uint number; - string title; - Nullable!bool mergeable; - - string baseRepoSlug() const { return base.repo.fullName; } - string headRepoSlug() const { return head.repo.fullName; } - alias repoSlug = baseRepoSlug; - bool isOpen() const { return state == State.open; } - string commentsURL() const { return "%s/repos/%s/issues/%d/comments".format(githubAPIURL, repoSlug, number); } - string commitsURL() const { return "%s/repos/%s/pulls/%d/commits".format(githubAPIURL, repoSlug, number); } - string eventsURL() const { return "%s/repos/%s/issues/%d/events".format(githubAPIURL, repoSlug, number); } - string htmlURL() const { return "https://github.com/%s/pull/%d".format(repoSlug, number); } -} - alias LabelsAndCommits = Tuple!(Json[], "labels", Json[], "commits"); enum MergeMethod { none = 0, merge, squash, rebase } @@ -173,8 +149,7 @@ MergeMethod autoMergeMethod(Json[] labels) auto handleGithubLabel(in ref PullRequest pr) { - auto url = "%s/repos/%s/issues/%d/labels".format(githubAPIURL, pr.repoSlug, pr.number); - auto labels = ghGetRequest(url).readJson[]; + auto labels = ghGetRequest(pr.labelsURL).readJson[]; Json[] commits; if (auto method = labels.autoMergeMethod) @@ -210,21 +185,12 @@ Json[] tryMerge(in ref PullRequest pr, MergeMethod method) if (!events.empty) author = getUserEmail(events.front["actor"]["login"].get!string); - auto reqInput = [ - "commit_message": "%s\nmerged-on-behalf-of: %s".format(pr.title, author), - "sha": commits[$ - 1]["sha"].get!string, - "merge_method": method.to!string, - ]; - - - auto prUrl = "%s/repos/%s/pulls/%d/merge".format(githubAPIURL, pr.repoSlug, pr.number); - ghSendRequest((scope req){ - req.method = HTTPMethod.PUT; - // custom media type is required during preview period: - // https://developer.github.com/changes/2016-09-26-pull-request-merge-api-update/ - req.headers["Accept"] = "application/vnd.github.polaris-preview+json"; - req.writeJsonBody(reqInput); - }, prUrl); + GHMerge mergeInput = { + commitMessage: "%s\nmerged-on-behalf-of: %s".format(pr.title, author), + sha: commits[$ - 1]["sha"].get!string, + mergeMethod: method + }; + pr.postMerge(mergeInput); return commits; } @@ -239,16 +205,17 @@ void checkAndRemoveLabels(Json[] labels, in ref PullRequest pr, in string[] toRe void addLabels(in ref PullRequest pr, inout string[] labels) { - auto labelUrl = "%s/repos/%s/issues/%d/labels" - .format(githubAPIURL, pr.repoSlug, pr.number); - ghSendRequest(HTTPMethod.POST, labelUrl, labels); + ghSendRequest(HTTPMethod.POST, pr.labelsURL, labels); } void removeLabel(in ref PullRequest pr, string label) { - auto labelUrl = "%s/repos/%s/issues/%d/labels/%s" - .format(githubAPIURL, pr.repoSlug, pr.number, label); - ghSendRequest(HTTPMethod.DELETE, labelUrl); + ghSendRequest(HTTPMethod.DELETE, pr.labelsURL ~ "/" ~ label); +} + +void replaceLabels(in ref PullRequest pr, string[] labels) +{ + ghSendRequest(HTTPMethod.PUT, pr.labelsURL, labels); } string getUserEmail(string login) @@ -265,12 +232,20 @@ Json[] getIssuesForLabel(string repoSlug, string label) .format(githubAPIURL, repoSlug, label)).readJson[]; } -void searchForAutoMergePrs(string repoSlug) +auto getIssuesForLabels(string repoSlug, const string[] labels) { // the GitHub API doesn't allow a logical OR - auto issues = getIssuesForLabel(repoSlug, "auto-merge").chain(getIssuesForLabel(repoSlug, "auto-merge-squash")); + Json[] issues; + foreach (label; labels) + issues ~= getIssuesForLabel(repoSlug, label); issues.sort!((a, b) => a["number"].get!int < b["number"].get!int); - foreach (issue; issues.uniq!((a, b) => a["number"].get!int == b["number"].get!int)) + return issues.uniq!((a, b) => a["number"].get!int == b["number"].get!int); +} + +void searchForAutoMergePrs(string repoSlug) +{ + static immutable labels = ["auto-merge", "auto-merge-squash"]; + foreach (issue; getIssuesForLabels(repoSlug, labels)) { auto prNumber = issue["number"].get!uint; if ("pull_request" !in issue) @@ -322,3 +297,268 @@ void checkTitleForLabels(in ref PullRequest pr) if (mappedLabels.length) pr.addLabels(mappedLabels); } + +//============================================================================== +// Search for inactive PRs +//============================================================================== + +// range-based page loader for the GH API +private struct AllPages +{ + private string url; + private string link = "next"; + + // does not cache + Json front() { + scope req = ghGetRequest(url); + link = req.headers.get("Link"); + return req.readJson; + } + void popFront() + { + import std.utf : byCodeUnit; + url = link[1..$].byCodeUnit.until(">").array; + } + bool empty() + { + return !link.canFind("next"); + } +} + +auto ghGetAllPages(string url) +{ + return AllPages(url); +} + +void searchForInactivePrs(string repoSlug, Duration dur) +{ + auto now = Clock.currTime; + // "updated" sorting is broken for PRs + // As we need to load the PR itself anyways, we load all issues as + // (1) the GitHubIssue object is smaller + // (2) the GitHubIssue object contains respective labels of an issue + auto pages = ghGetAllPages("%s/repos/%s/issues?state=open&sort=updated&direction=asc" + .format(githubAPIURL, repoSlug)); + + int loadedPages; + foreach (page; pages) + { + foreach (i, issue; page[]) + { + auto labels = issue["labels"][].map!(l => l["name"].get!string).array.sort(); + string[] sendLabels; + string[] removeLabels; + + // only the detailed PR page contains the mergeable state + const pr = ghGetRequest(issue["pull_request"]["url"].get!string) + .readJson.deserializeJson!PullRequest; + auto timeDiff = now - pr.updatedAt; + + // label inactive PR + if (timeDiff > dur) + sendLabels ~= "stalled"; + else + removeLabels ~= "stalled"; + + // label PR with merge-conflicts + if (!pr.mergeable.isNull && !pr.mergeable.get) + sendLabels ~= "needs rebase"; + else + removeLabels ~= "needs rebase"; + + // label PR with persistent CI failures + auto status = pr.status; + auto failCount = status.filter!((e){ + if (e.state == GHCiStatus.State.failure || + e.state == GHCiStatus.State.error) + switch (e.context) { + case "auto-tester": + case "CyberShadow/DAutoTest": + case "continuous-integration/travis-ci/pr": + case "ci/circleci": + return true; + default: + return false; + } + return false; + }).walkLength; + if (failCount >= 2) + sendLabels ~= "needs work"; + + auto putLabels = labels.chain(sendLabels).sort.uniq + .filter!(l => !removeLabels.canFind(l)).array; + + if (!labels.equal(putLabels)) + pr.replaceLabels(putLabels); + + // limit search for local testing + version(unittest) + if (i >= 3) + return; + } + loadedPages += page[].length; + } + logInfo("ended cron.daily for repo: %s (pages: %d)", repoSlug, loadedPages); +} + +//============================================================================== +// Github API objects +//============================================================================== + +struct PullRequest +{ + import std.typecons : Nullable; + + static struct Repo + { + @name("full_name") string fullName; + } + static struct Branch + { + string sha; + Repo repo; + } + Branch base, head; + enum State { open, closed } + enum MergeableState { clean, dirty, unstable, unknown } + @byName State state; + uint number; + string title; + @optional Nullable!bool mergeable; + @optional @byName Nullable!MergeableState mergeable_state; + @name("created_at") SysTime createdAt; + @name("updated_at") SysTime updatedAt; + bool locked; + + GHUser user; + Nullable!GHUser assignee; + GHUser[] assignees; + + string baseRepoSlug() const { return base.repo.fullName; } + string headRepoSlug() const { return head.repo.fullName; } + alias repoSlug = baseRepoSlug; + bool isOpen() const { return state == State.open; } + + string htmlURL() const { return "https://github.com/%s/pull/%d".format(repoSlug, number); } + string commentsURL() const { return "%s/repos/%s/issues/%d/comments".format(githubAPIURL, repoSlug, number); } + string commitsURL() const { return "%s/repos/%s/pulls/%d/commits".format(githubAPIURL, repoSlug, number); } + string eventsURL() const { return "%s/repos/%s/issues/%d/events".format(githubAPIURL, repoSlug, number); } + string labelsURL() const { return "%s/repos/%s/issues/%d/labels".format(githubAPIURL, repoSlug, number); } + string reviewsURL() const { return "%s/repos/%s/pulls/%d/reviews".format(githubAPIURL, repoSlug, number); } + string mergeURL() const { return "%s/repos/%s/pulls/%d/merge".format(githubAPIURL, repoSlug, number); } + string statusURL() const { return "%s/repos/%s/status/%s".format(githubAPIURL, repoSlug, head.sha); } + + GHComment[] comments() const { + return ghGetRequest(commentsURL) + .readJson + .deserializeJson!(GHComment[]); + } + GHCommit[] commits() const { + return ghGetRequest(commitsURL) + .readJson + .deserializeJson!(GHCommit[]); + } + GHReview[] reviews() const { + return ghGetRequest((scope req) { + // custom media type is required during preview period: + // preview review api: https://developer.github.com/changes/2016-12-14-reviews-api + req.headers["Accept"] = "application/vnd.github.black-cat-preview+json"; + }, reviewsURL) + .readJson + .deserializeJson!(GHReview[]); + } + GHCiStatus[] status() const { + return ghGetRequest(statusURL) + .readJson["statuses"] + .deserializeJson!(GHCiStatus[]); + } + + void postMerge(in ref GHMerge merge) const + { + ghSendRequest((scope req){ + req.method = HTTPMethod.PUT; + // custom media type is required during preview period: + // https://developer.github.com/changes/2016-09-26-pull-request-merge-api-update/ + req.headers["Accept"] = "application/vnd.github.polaris-preview+json"; + req.writeJsonBody(merge); + }, mergeURL); + } +} + +static struct GHUser +{ + string login; + ulong id; +} + +struct GHComment +{ + @name("created_at") SysTime createdAt; + @name("updated_at") SysTime updatedAt; + GHUser user; + string body_; + string url; + + static void post(in ref PullRequest pr, string msg) + { + ghSendRequest(HTTPMethod.POST, pr.commentsURL, ["body" : msg]); + } + + void update(string msg) const + { + ghSendRequest(HTTPMethod.PATCH, url, ["body" : msg]); + } + + void remove() const + { + if (url.length) // delete any existing comment + ghSendRequest(HTTPMethod.DELETE, url); + } +} + +struct GHReview +{ + GHUser user; + @name("commit_id") string commitId; + string body_; + enum State { APPROVED, CHANGES_REQUESTED, COMMENTED } + @byName State state; +} + +struct GHCommit +{ + string sha; + static struct CommitAuthor + { + string name; + string email; + SysTime date; + } + static struct Commit + { + CommitAuthor author; + CommitAuthor committer; + string message; + } + Commit commit; + GHUser author; + GHUser committer; +} + +struct GHCiStatus +{ + enum State { success, error, failure, pending } + @byName State state; + string description; + @name("target_url") string targetUrl; + string context; // "CyberShadow/DAutoTest", "Project Tester", + // "ci/circleci", "auto-tester", "codecov/project", + // "codecov/patch", "continuous-integration/travis-ci/pr" +} + +struct GHMerge +{ + @name("commit_message") string commitMessage; + string sha; + @name("merge_method") @byName MergeMethod mergeMethod; +} diff --git a/source/dlangbot/trello.d b/source/dlangbot/trello.d index f9c3285..ac5dfbd 100644 --- a/source/dlangbot/trello.d +++ b/source/dlangbot/trello.d @@ -4,8 +4,6 @@ string trelloAPIURL = "https://api.trello.com"; string trelloSecret, trelloAuth; import dlangbot.bugzilla : Issue, IssueRef; -import dlangbot.github : Comment; - import std.algorithm, std.range; import std.format : format; @@ -86,6 +84,8 @@ auto findTrelloCards(int issueID) .map!(c => TrelloCard(c["id"].get!string, issueID)); } +struct Comment { string url, body_; } + Comment getTrelloBotComment(string cardID) { auto res = trelloAPI("/1/cards/%s/actions?filter=commentCard", cardID) diff --git a/source/dlangbot/utils.d b/source/dlangbot/utils.d index c6343b4..a35a684 100644 --- a/source/dlangbot/utils.d +++ b/source/dlangbot/utils.d @@ -4,7 +4,7 @@ import dlangbot.app : runAsync; import std.datetime : Duration; -auto runTaskHelper(Fun, Args...)(Fun fun, Args args) +auto runTaskHelper(Fun, Args...)(Fun fun, auto ref Args args) { import std.functional : toDelegate; import vibe.core.core : runTask; diff --git a/test/comments.d b/test/comments.d index 682b4f0..b17dbed 100644 --- a/test/comments.d +++ b/test/comments.d @@ -19,7 +19,6 @@ unittest ✗ | [8573](%s/show_bug.cgi?id=8573) | A simpler Phobos function that returns the index of the mix or max item `.format(bugzillaURL); assert(req.json["body"].get!string == expectedComment); - res.writeVoidBody; }, "/trello/1/search?query=name:%22Issue%208573%22&"~trelloAuth, ); @@ -68,7 +67,6 @@ unittest "/github/repos/dlang/phobos/issues/comments/262784442", (scope HTTPServerRequest req, scope HTTPServerResponse res){ assert(req.method == HTTPMethod.DELETE); - res.writeVoidBody; } ); @@ -90,13 +88,11 @@ unittest (scope HTTPServerRequest req, scope HTTPServerResponse res){ assert(req.method == HTTPMethod.DELETE); res.statusCode = 200; - res.writeVoidBody; }, "/github/repos/dlang/phobos/issues/4921/comments", "/github/repos/dlang/phobos/issues/comments/262784442", (scope HTTPServerRequest req, scope HTTPServerResponse res){ assert(req.method == HTTPMethod.DELETE); - res.writeVoidBody; } ); diff --git a/test/cronjob.d b/test/cronjob.d new file mode 100644 index 0000000..d94dfab --- /dev/null +++ b/test/cronjob.d @@ -0,0 +1,51 @@ +import utils; + +import std.format : format; + +// test the first items of the cron job +unittest +{ + import std.stdio; + setAPIExpectations( + "/github/repos/dlang/phobos/issues?state=open&sort=updated&direction=asc", + (scope HTTPServerRequest req, scope HTTPServerResponse res){ + res.headers["Link"] = `; rel="next", ; rel="last"`; + }, + "/github/repos/dlang/phobos/pulls/2526", + "/github/repos/dlang/phobos/status/a04acd6a2813fb344d3e47369cf7fd64523ece44", + "/github/repos/dlang/phobos/issues/2526/labels", + (scope HTTPServerRequest req, scope HTTPServerResponse res){ + assert(req.method == HTTPMethod.PUT); + assert(req.json[].map!(e => e.get!string).equal(["blocked", "stalled"])); + }, + "/github/repos/dlang/phobos/pulls/3534", + "/github/repos/dlang/phobos/status/b7bf452ca52c2a529e79a830eee97310233e3a9c", + "/github/repos/dlang/phobos/issues/3534/labels", + (scope HTTPServerRequest req, scope HTTPServerResponse res){ + assert(req.method == HTTPMethod.PUT); + assert(req.json[].map!(e => e.get!string).equal( + ["blocked", "needs rebase", "needs work", "stalled"] + )); + }, + "/github/repos/dlang/phobos/pulls/4551", + "/github/repos/dlang/phobos/status/c4224ad203f5497569452ff05284124eb7030602", + "/github/repos/dlang/phobos/issues/4551/labels", + (scope HTTPServerRequest req, scope HTTPServerResponse res){ + assert(req.method == HTTPMethod.PUT); + assert(req.json[].map!(e => e.get!string).equal( + ["blocked", "needs rebase", "needs work", "stalled"] + )); + }, + "/github/repos/dlang/phobos/pulls/3620", + "/github/repos/dlang/phobos/status/5b8b90e1824cb90635719f6d3b1f6c195a95a47e", + "/github/repos/dlang/phobos/issues/3620/labels", + (scope HTTPServerRequest req, scope HTTPServerResponse res){ + assert(req.method == HTTPMethod.PUT); + assert(req.json[].map!(e => e.get!string).equal( + ["Bug Fix", "Enhancement","decision block", "needs rebase", "stalled"] + )); + }, + ); + + openUrl("/cron_daily?repo=dlang/phobos&secret=" ~ cronDailySecret, "OK"); +} diff --git a/test/labels.d b/test/labels.d index 5cb4c45..e747ad7 100644 --- a/test/labels.d +++ b/test/labels.d @@ -46,7 +46,6 @@ unittest assert(req.json["commit_message"] == "Issue 8573 - A simpler Phobos function that returns the index of the …\n"~ "merged-on-behalf-of: Ilya Yaroshenko "); res.statusCode = 405; - res.writeVoidBody; } ); @@ -76,7 +75,6 @@ unittest assert(req.json["commit_message"] == "Issue 8573 - A simpler Phobos function that returns the index of the …\n"~ "merged-on-behalf-of: Ilya Yaroshenko "); res.statusCode = 200; - res.writeVoidBody; } ); diff --git a/test/status.d b/test/status.d index 92f9e6e..d32e73e 100644 --- a/test/status.d +++ b/test/status.d @@ -71,7 +71,6 @@ unittest assert(req.json["commit_message"] == "Fix issue 16977 - bad debug info for function default arguments\n"~ "merged-on-behalf-of: unknown"); res.statusCode = 200; - res.writeVoidBody; } ); @@ -103,7 +102,6 @@ unittest assert(req.json["commit_message"] == "taking address of local means it cannot be 'scope' later\n"~ "merged-on-behalf-of: Martin Nowak "); res.statusCode = 200; - res.writeVoidBody; } ); @@ -133,7 +131,6 @@ unittest assert(req.json["commit_message"] == "Fix issue 16977 - bad debug info for function default arguments\n"~ "merged-on-behalf-of: unknown"); res.statusCode = 200; - res.writeVoidBody; }, "/github/repos/dlang/dmd/pulls/6328/commits", "/github/repos/dlang/dmd/issues/6328/events", @@ -145,7 +142,6 @@ unittest assert(req.json["commit_message"] == "taking address of local means it cannot be 'scope' later\n"~ "merged-on-behalf-of: Martin Nowak "); res.statusCode = 200; - res.writeVoidBody; } ); diff --git a/test/trello.d b/test/trello.d index 2b9dc07..7db8d40 100644 --- a/test/trello.d +++ b/test/trello.d @@ -15,7 +15,6 @@ unittest assert(req.json["text"] == `- [Issue 16794 - dmd not working on Ubuntu 16.10 because of default PIE linking](https://issues.dlang.org/show_bug.cgi?id=16794) `); - res.writeVoidBody; } ); @@ -35,7 +34,6 @@ unittest assert(req.json["text"] == `- [Issue 16794 - dmd not working on Ubuntu 16.10 because of default PIE linking](https://issues.dlang.org/show_bug.cgi?id=16794) `); - res.writeVoidBody; } ); @@ -55,7 +53,6 @@ unittest (scope HTTPServerRequest req, scope HTTPServerResponse res){ assert(req.method == HTTPMethod.POST); assert(req.json[0].get!string == "Bug fix"); - res.writeVoidBody; }, "/trello/1/search?query=name:%22Issue%2016794%22&"~trelloAuth, "/trello/1/cards/583f517a333add7c28e0cec7/actions?filter=commentCard&"~trelloAuth, @@ -66,7 +63,6 @@ unittest `- [Issue 16794 - dmd not working on Ubuntu 16.10 because of default PIE linking](https://issues.dlang.org/show_bug.cgi?id=16794) - https://github.com/dlang/dmd/pull/6359 `); - res.writeVoidBody; }, "/trello/1/cards/583f517a333add7c28e0cec7?"~trelloAuth, "/trello/1/board/55586bf9fd02d8c66074321a/lists?"~trelloAuth, @@ -90,7 +86,6 @@ unittest (scope HTTPServerRequest req, scope HTTPServerResponse res){ assert(req.method == HTTPMethod.POST); assert(req.json[0].get!string == "Bug fix"); - res.writeVoidBody; }, "/trello/1/search?query=name:%22Issue%2016794%22&"~trelloAuth, "/trello/1/cards/583f517a333add7c28e0cec7/actions?filter=commentCard&"~trelloAuth, @@ -99,7 +94,6 @@ unittest (scope HTTPServerRequest req, scope HTTPServerResponse res){ assert(req.method == HTTPMethod.POST); assert(req.json["text"] == "- https://github.com/dlang/dmd/pull/6359\n"); - res.writeVoidBody; }, "/trello/1/cards/583f517a333add7c28e0cec7?"~trelloAuth, (ref Json j) { j["idList"] = "55586d9b810fb97f9459df7d"; }, diff --git a/test/utils.d b/test/utils.d index 30a02be..1dff589 100644 --- a/test/utils.d +++ b/test/utils.d @@ -11,6 +11,7 @@ public import vibe.http.server : HTTPServerRequest, HTTPServerResponse; public import std.functional : toDelegate; public import vibe.data.json : deserializeJson, Json; public import std.datetime : SysTime; +public import std.algorithm; // existing dlang bot comment -> update comment @@ -28,6 +29,7 @@ shared static this() githubAuth = "GH_DUMMY_AUTH_TOKEN"; hookSecret = "GH_DUMMY_HOOK_SECRET"; trelloAuth = "key=01234&token=abcde"; + cronDailySecret = "dummyCronSecret"; // start our hook server auto settings = new HTTPServerSettings; @@ -91,10 +93,21 @@ auto payloadServer(scope HTTPServerRequest req, scope HTTPServerResponse res) assert(0, "Request for unexpected URL received: " ~ req.requestURL); } + string filePath = buildPath(payloadDir, req.requestURL[1 .. $].replace("/", "_")); + if (expectation.reqHandler !is null) - return expectation.reqHandler(req, res); + { + scope(failure) { + writefln("Method: %s", req.method); + writefln("Json: %s", req.json); + } + expectation.reqHandler(req, res); + if (res.headerWritten) + return; + if (!filePath.exists) + return res.writeVoidBody; + } - string filePath = buildPath(payloadDir, req.requestURL[1 .. $].replace("/", "_")); if (!filePath.exists) { assert(0, "Please create payload: " ~ filePath); @@ -268,3 +281,26 @@ void postTrelloHook(string payload, } assert(apiExpectations.length == 0); } + +void openUrl(string url, string expectedResponse, + int line = __LINE__, string file = __FILE__) +{ + import std.file : readText; + import std.path : buildPath; + + logInfo("Starting test in %s:%d with url: %s", file, line, url); + + auto req = requestHTTP(testServerURL ~ url, (scope req) { + req.method = HTTPMethod.GET; + }); + scope(failure) { + if (req.statusCode != 200) + writeln(req.bodyReader.readAllUTF8); + } + assert(req.statusCode == 200); + scope(failure) { + writefln("Didn't request: %s", apiExpectations.map!(x => x.url)); + } + assert(apiExpectations.length == 0); + assert(req.bodyReader.readAllUTF8 == expectedResponse); +}