{"action":"closed","number":729,"pull_request":{"url":"https://api.github.com/repos/rakudo/rakudo/pulls/729","id":64411525,"html_url":"https://github.com/rakudo/rakudo/pull/729","diff_url":"https://github.com/rakudo/rakudo/pull/729.diff","patch_url":"https://github.com/rakudo/rakudo/pull/729.patch","issue_url":"https://api.github.com/repos/rakudo/rakudo/issues/729","number":729,"state":"closed","locked":false,"title":"Proposal and/or Implementation: Distribution interface","user":{"login":"ugexe","id":239748,"avatar_url":"https://avatars.githubusercontent.com/u/239748?v=3","gravatar_id":"","url":"https://api.github.com/users/ugexe","html_url":"https://github.com/ugexe","followers_url":"https://api.github.com/users/ugexe/followers","following_url":"https://api.github.com/users/ugexe/following{/other_user}","gists_url":"https://api.github.com/users/ugexe/gists{/gist_id}","starred_url":"https://api.github.com/users/ugexe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ugexe/subscriptions","organizations_url":"https://api.github.com/users/ugexe/orgs","repos_url":"https://api.github.com/users/ugexe/repos","events_url":"https://api.github.com/users/ugexe/events{/privacy}","received_events_url":"https://api.github.com/users/ugexe/received_events","type":"User","site_admin":false},"body":"**Implement Distribution as an interface**\r\n_See [s22](https://design.perl6.org/S22.html) for more details_\r\n\r\n(single) Broken roast test:\r\nhttps://github.com/perl6/roast/blob/f9ff1b30719c7cbb846a452e675a79c7a41ed5c4/S11-repository/curli-install.t#L19\r\n\r\n**Allows**:\r\n\r\n* Custom Distribution objects (.content just needs to return an IO::Handle)\r\n\r\n* One liner installers: `perl6 -e 'CompUnit::RepositoryRegistry.repository-for-name(\"site\").install: Distribution::Path.new($*CWD);'`\r\n\r\n* To get content for `lib/Foo/Bar.pm6` of a Distribution you would do `$dist.content('lib/Foo/Bar.pm6').open.slurp-rest`. Maybe thats abstracting a file, maybe thats abstracting a pipe... it doesn't matter. (note this differs from s22 where one could call the entire `provides` chain: `.content(<provides Foo::Bar lib/Foo/Bar.pm6>)`)\r\n\r\n**Changes**:\r\n\r\n* `provides` section of meta6 now gets extended during precompilation instead of changing earlier parts of the hash structure.\r\n\r\n* `resources/` is prefixed before being hashed into a content-id\r\n\r\n* `Distribution` is no longer a class (poorly) representing a hash\r\n\r\n**Things that still need to change**:\r\n\r\n* Passing around a Distribution object with the CompUnit does not make sense now that Distribution is not just a glorified data struct. Instead [%?META](https://design.perl6.org/S02.html#Magical_lexically_scoped_values) could be passed around in its place, from which a user can make a Distribution from whatever distribution object can handle their meta6 file structure\r\n\r\n* hooks (or special directories in general) - ?\r\n\r\n* bin wrappers need to have their variations indexed somewhere for uninstall\r\n\r\n\r\n**Notes**:\r\n\r\n* .install code can be improved, but has been written in this fashion to change the structure as little as possible due to CUR precomp changes that may be coming soon. A quick (working) example of such improvements can be seen here: https://gist.github.com/ugexe/c5a74134164bcaabd756\r\n\r\n* Some/none of the actual Distribution implementations may need to actually be included, and may be left to the user to implement\r\n\r\nAlso see [Distribution Thoughts and Proposals](http://ugexe.com/perl6-distribution-thoughts-and-proposals/) for some of the thoughts leading to this","created_at":"2016-03-29T04:12:45Z","updated_at":"2016-06-29T18:21:30Z","closed_at":"2016-06-29T18:21:30Z","merged_at":"2016-06-29T18:21:30Z","merge_commit_sha":"fc8c7afc1d08b0d70ef8d495a0f0a971d04ac2ba","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/rakudo/rakudo/pulls/729/commits","review_comments_url":"https://api.github.com/repos/rakudo/rakudo/pulls/729/comments","review_comment_url":"https://api.github.com/repos/rakudo/rakudo/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rakudo/rakudo/issues/729/comments","statuses_url":"https://api.github.com/repos/rakudo/rakudo/statuses/fc8c7afc1d08b0d70ef8d495a0f0a971d04ac2ba","head":{"label":"ugexe:dist-interface","ref":"dist-interface","sha":"fc8c7afc1d08b0d70ef8d495a0f0a971d04ac2ba","user":{"login":"ugexe","id":239748,"avatar_url":"https://avatars.githubusercontent.com/u/239748?v=3","gravatar_id":"","url":"https://api.github.com/users/ugexe","html_url":"https://github.com/ugexe","followers_url":"https://api.github.com/users/ugexe/followers","following_url":"https://api.github.com/users/ugexe/following{/other_user}","gists_url":"https://api.github.com/users/ugexe/gists{/gist_id}","starred_url":"https://api.github.com/users/ugexe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ugexe/subscriptions","organizations_url":"https://api.github.com/users/ugexe/orgs","repos_url":"https://api.github.com/users/ugexe/repos","events_url":"https://api.github.com/users/ugexe/events{/privacy}","received_events_url":"https://api.github.com/users/ugexe/received_events","type":"User","site_admin":false},"repo":{"id":50546332,"name":"rakudo","full_name":"ugexe/rakudo","owner":{"login":"ugexe","id":239748,"avatar_url":"https://avatars.githubusercontent.com/u/239748?v=3","gravatar_id":"","url":"https://api.github.com/users/ugexe","html_url":"https://github.com/ugexe","followers_url":"https://api.github.com/users/ugexe/followers","following_url":"https://api.github.com/users/ugexe/following{/other_user}","gists_url":"https://api.github.com/users/ugexe/gists{/gist_id}","starred_url":"https://api.github.com/users/ugexe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ugexe/subscriptions","organizations_url":"https://api.github.com/users/ugexe/orgs","repos_url":"https://api.github.com/users/ugexe/repos","events_url":"https://api.github.com/users/ugexe/events{/privacy}","received_events_url":"https://api.github.com/users/ugexe/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ugexe/rakudo","description":"Rakudo Perl -- Perl 6 on MoarVM and the JVM","fork":true,"url":"https://api.github.com/repos/ugexe/rakudo","forks_url":"https://api.github.com/repos/ugexe/rakudo/forks","keys_url":"https://api.github.com/repos/ugexe/rakudo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ugexe/rakudo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ugexe/rakudo/teams","hooks_url":"https://api.github.com/repos/ugexe/rakudo/hooks","issue_events_url":"https://api.github.com/repos/ugexe/rakudo/issues/events{/number}","events_url":"https://api.github.com/repos/ugexe/rakudo/events","assignees_url":"https://api.github.com/repos/ugexe/rakudo/assignees{/user}","branches_url":"https://api.github.com/repos/ugexe/rakudo/branches{/branch}","tags_url":"https://api.github.com/repos/ugexe/rakudo/tags","blobs_url":"https://api.github.com/repos/ugexe/rakudo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ugexe/rakudo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ugexe/rakudo/git/refs{/sha}","trees_url":"https://api.github.com/repos/ugexe/rakudo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ugexe/rakudo/statuses/{sha}","languages_url":"https://api.github.com/repos/ugexe/rakudo/languages","stargazers_url":"https://api.github.com/repos/ugexe/rakudo/stargazers","contributors_url":"https://api.github.com/repos/ugexe/rakudo/contributors","subscribers_url":"https://api.github.com/repos/ugexe/rakudo/subscribers","subscription_url":"https://api.github.com/repos/ugexe/rakudo/subscription","commits_url":"https://api.github.com/repos/ugexe/rakudo/commits{/sha}","git_commits_url":"https://api.github.com/repos/ugexe/rakudo/git/commits{/sha}","comments_url":"https://api.github.com/repos/ugexe/rakudo/comments{/number}","issue_comment_url":"https://api.github.com/repos/ugexe/rakudo/issues/comments{/number}","contents_url":"https://api.github.com/repos/ugexe/rakudo/contents/{+path}","compare_url":"https://api.github.com/repos/ugexe/rakudo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ugexe/rakudo/merges","archive_url":"https://api.github.com/repos/ugexe/rakudo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ugexe/rakudo/downloads","issues_url":"https://api.github.com/repos/ugexe/rakudo/issues{/number}","pulls_url":"https://api.github.com/repos/ugexe/rakudo/pulls{/number}","milestones_url":"https://api.github.com/repos/ugexe/rakudo/milestones{/number}","notifications_url":"https://api.github.com/repos/ugexe/rakudo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ugexe/rakudo/labels{/name}","releases_url":"https://api.github.com/repos/ugexe/rakudo/releases{/id}","deployments_url":"https://api.github.com/repos/ugexe/rakudo/deployments","created_at":"2016-01-27T23:47:06Z","updated_at":"2016-01-27T23:47:09Z","pushed_at":"2016-06-25T05:03:34Z","git_url":"git://github.com/ugexe/rakudo.git","ssh_url":"git@github.com:ugexe/rakudo.git","clone_url":"https://github.com/ugexe/rakudo.git","svn_url":"https://github.com/ugexe/rakudo","homepage":"http://rakudo.org/","size":35870,"stargazers_count":0,"watchers_count":0,"language":"Perl6","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"nom"}},"base":{"label":"rakudo:nom","ref":"nom","sha":"1d93adf2f729c783c5979c8c5201c594558466fb","user":{"login":"rakudo","id":46671,"avatar_url":"https://avatars.githubusercontent.com/u/46671?v=3","gravatar_id":"","url":"https://api.github.com/users/rakudo","html_url":"https://github.com/rakudo","followers_url":"https://api.github.com/users/rakudo/followers","following_url":"https://api.github.com/users/rakudo/following{/other_user}","gists_url":"https://api.github.com/users/rakudo/gists{/gist_id}","starred_url":"https://api.github.com/users/rakudo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rakudo/subscriptions","organizations_url":"https://api.github.com/users/rakudo/orgs","repos_url":"https://api.github.com/users/rakudo/repos","events_url":"https://api.github.com/users/rakudo/events{/privacy}","received_events_url":"https://api.github.com/users/rakudo/received_events","type":"Organization","site_admin":false},"repo":{"id":117358,"name":"rakudo","full_name":"rakudo/rakudo","owner":{"login":"rakudo","id":46671,"avatar_url":"https://avatars.githubusercontent.com/u/46671?v=3","gravatar_id":"","url":"https://api.github.com/users/rakudo","html_url":"https://github.com/rakudo","followers_url":"https://api.github.com/users/rakudo/followers","following_url":"https://api.github.com/users/rakudo/following{/other_user}","gists_url":"https://api.github.com/users/rakudo/gists{/gist_id}","starred_url":"https://api.github.com/users/rakudo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rakudo/subscriptions","organizations_url":"https://api.github.com/users/rakudo/orgs","repos_url":"https://api.github.com/users/rakudo/repos","events_url":"https://api.github.com/users/rakudo/events{/privacy}","received_events_url":"https://api.github.com/users/rakudo/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rakudo/rakudo","description":"Rakudo Perl -- Perl 6 on MoarVM and the JVM","fork":false,"url":"https://api.github.com/repos/rakudo/rakudo","forks_url":"https://api.github.com/repos/rakudo/rakudo/forks","keys_url":"https://api.github.com/repos/rakudo/rakudo/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rakudo/rakudo/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rakudo/rakudo/teams","hooks_url":"https://api.github.com/repos/rakudo/rakudo/hooks","issue_events_url":"https://api.github.com/repos/rakudo/rakudo/issues/events{/number}","events_url":"https://api.github.com/repos/rakudo/rakudo/events","assignees_url":"https://api.github.com/repos/rakudo/rakudo/assignees{/user}","branches_url":"https://api.github.com/repos/rakudo/rakudo/branches{/branch}","tags_url":"https://api.github.com/repos/rakudo/rakudo/tags","blobs_url":"https://api.github.com/repos/rakudo/rakudo/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rakudo/rakudo/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rakudo/rakudo/git/refs{/sha}","trees_url":"https://api.github.com/repos/rakudo/rakudo/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rakudo/rakudo/statuses/{sha}","languages_url":"https://api.github.com/repos/rakudo/rakudo/languages","stargazers_url":"https://api.github.com/repos/rakudo/rakudo/stargazers","contributors_url":"https://api.github.com/repos/rakudo/rakudo/contributors","subscribers_url":"https://api.github.com/repos/rakudo/rakudo/subscribers","subscription_url":"https://api.github.com/repos/rakudo/rakudo/subscription","commits_url":"https://api.github.com/repos/rakudo/rakudo/commits{/sha}","git_commits_url":"https://api.github.com/repos/rakudo/rakudo/git/commits{/sha}","comments_url":"https://api.github.com/repos/rakudo/rakudo/comments{/number}","issue_comment_url":"https://api.github.com/repos/rakudo/rakudo/issues/comments{/number}","contents_url":"https://api.github.com/repos/rakudo/rakudo/contents/{+path}","compare_url":"https://api.github.com/repos/rakudo/rakudo/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rakudo/rakudo/merges","archive_url":"https://api.github.com/repos/rakudo/rakudo/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rakudo/rakudo/downloads","issues_url":"https://api.github.com/repos/rakudo/rakudo/issues{/number}","pulls_url":"https://api.github.com/repos/rakudo/rakudo/pulls{/number}","milestones_url":"https://api.github.com/repos/rakudo/rakudo/milestones{/number}","notifications_url":"https://api.github.com/repos/rakudo/rakudo/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rakudo/rakudo/labels{/name}","releases_url":"https://api.github.com/repos/rakudo/rakudo/releases{/id}","deployments_url":"https://api.github.com/repos/rakudo/rakudo/deployments","created_at":"2009-01-29T15:30:05Z","updated_at":"2016-06-28T22:25:38Z","pushed_at":"2016-06-29T18:21:26Z","git_url":"git://github.com/rakudo/rakudo.git","ssh_url":"git@github.com:rakudo/rakudo.git","clone_url":"https://github.com/rakudo/rakudo.git","svn_url":"https://github.com/rakudo/rakudo","homepage":"http://rakudo.org/","size":45859,"stargazers_count":777,"watchers_count":777,"language":"Perl6","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":257,"mirror_url":null,"open_issues_count":46,"forks":257,"open_issues":46,"watchers":777,"default_branch":"nom"}},"_links":{"self":{"href":"https://api.github.com/repos/rakudo/rakudo/pulls/729"},"html":{"href":"https://github.com/rakudo/rakudo/pull/729"},"issue":{"href":"https://api.github.com/repos/rakudo/rakudo/issues/729"},"comments":{"href":"https://api.github.com/repos/rakudo/rakudo/issues/729/comments"},"review_comments":{"href":"https://api.github.com/repos/rakudo/rakudo/pulls/729/comments"},"review_comment":{"href":"https://api.github.com/repos/rakudo/rakudo/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rakudo/rakudo/pulls/729/commits"},"statuses":{"href":"https://api.github.com/repos/rakudo/rakudo/statuses/fc8c7afc1d08b0d70ef8d495a0f0a971d04ac2ba"}},"merged":true,"mergeable":null,"mergeable_state":"unknown","merged_by":{"login":"niner","id":73249,"avatar_url":"https://avatars.githubusercontent.com/u/73249?v=3","gravatar_id":"","url":"https://api.github.com/users/niner","html_url":"https://github.com/niner","followers_url":"https://api.github.com/users/niner/followers","following_url":"https://api.github.com/users/niner/following{/other_user}","gists_url":"https://api.github.com/users/niner/gists{/gist_id}","starred_url":"https://api.github.com/users/niner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/niner/subscriptions","organizations_url":"https://api.github.com/users/niner/orgs","repos_url":"https://api.github.com/users/niner/repos","events_url":"https://api.github.com/users/niner/events{/privacy}","received_events_url":"https://api.github.com/users/niner/received_events","type":"User","site_admin":false},"comments":4,"review_comments":17,"commits":8,"additions":267,"deletions":169,"changed_files":9}}
{"actor":{"display_login":"niner"}}