{"action":"opened","number":62,"pull_request":{"url":"https://api.github.com/repos/fukamachi/qlot/pulls/62","id":214100569,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE0MTAwNTY5","html_url":"https://github.com/fukamachi/qlot/pull/62","diff_url":"https://github.com/fukamachi/qlot/pull/62.diff","patch_url":"https://github.com/fukamachi/qlot/pull/62.patch","issue_url":"https://api.github.com/repos/fukamachi/qlot/issues/62","number":62,"state":"open","locked":false,"title":"Mitigate uninitialized dist system indexes for multi-system sources","user":{"login":"mtstickney","id":174859,"node_id":"MDQ6VXNlcjE3NDg1OQ==","avatar_url":"https://avatars3.githubusercontent.com/u/174859?v=4","gravatar_id":"","url":"https://api.github.com/users/mtstickney","html_url":"https://github.com/mtstickney","followers_url":"https://api.github.com/users/mtstickney/followers","following_url":"https://api.github.com/users/mtstickney/following{/other_user}","gists_url":"https://api.github.com/users/mtstickney/gists{/gist_id}","starred_url":"https://api.github.com/users/mtstickney/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mtstickney/subscriptions","organizations_url":"https://api.github.com/users/mtstickney/orgs","repos_url":"https://api.github.com/users/mtstickney/repos","events_url":"https://api.github.com/users/mtstickney/events{/privacy}","received_events_url":"https://api.github.com/users/mtstickney/received_events","type":"User","site_admin":false},"body":"# Issue Mitigation\r\n**Important note**: This is only proof-of-concept code to get the idea across. It is not a complete solution, and needs further discussion and implementation work. I wanted to get feedback early; I'll update the branch as time permits.\r\n\r\nThis code address attempts to mitigate what I believe to be an issue in quicklisp (https://github.com/quicklisp/quicklisp-client/issues/173), because some people may run old quicklisp clients, and extra defense never hurt anybody (there is also a minor performance boost to be had).\r\n\r\nWhen installing a system, fetching a dist object by using\r\n`(ql-dist:dist \"name\")` results in a dist object whose system-index is not\r\nproperly initialized. This will result in the `provided-systems` for one of\r\nthe dist's releases including a bunch of entries that are `nil`, because\r\n`find-system-in-dist` was unable to locate the system in the index. That\r\ncauses release installation to fail, because `(ql-dist:install nil)` is not\r\na valid call.\r\n\r\nWhile I believe this to be a bug in quicklisp, qlot can mitigate the issue\r\nby using the dist object returned by `ql-dist:install-dist` (which _does_\r\nhave a properly initialized system index) when installing releases. The\r\ncode in this branch does this for the simple case where a dist is not\r\nalready installed. This also means not having to hit the disk again to\r\nreconstruct a dist object that we just finished loading up.\r\n\r\n# Test case\r\nWookie is a system that exhibits this issue, which I believe only applies to sources that contain more than one system. The following can be used as a test case:\r\n````\r\n;;; qlfile\r\ngithub wookie orthecreedence/wookie\r\n\r\n\r\n;;; qlfile.lock\r\n(\"quicklisp\" .\r\n (:class qlot.source.ql:source-ql-all\r\n  :initargs (:distribution \"http://beta.quicklisp.org/dist/quicklisp.txt\" :%version :latest)\r\n  :version \"2018-08-31\"))\r\n(\"wookie\" .\r\n (:class qlot.source.github:source-github\r\n  :initargs (:project-name \"wookie\" :repos \"orthecreedence/wookie\" :ref nil :branch nil :tag nil)\r\n  :version \"github-c047d0063c6404b2ef3cc411933390df686dfa91\"\r\n  :repos \"orthecreedence/wookie\"\r\n  :url \"https://github.com/orthecreedence/wookie/archive/c047d0063c6404b2ef3cc411933390df686dfa91.tar.gz\"\r\n  :ref \"c047d0063c6404b2ef3cc411933390df686dfa91\"))\r\n\r\n\r\n;;; wookie-patch.lisp\r\n;; Wookie has systems that are not loadable (blacklisted in quicklisp, but we have to\r\n;; patch them out when loaded via qlot).\r\n(defpackage #:wookie\r\n  (:use #:cl)\r\n  (:export #:defplugin))\r\n\r\n(defmacro wookie:defplugin (&rest args)\r\n  (declare (ignore args))\r\n  '(asdf:defsystem #:plugin :components ()))\r\n\r\n;; Need qlot loaded, duh.\r\n(ql:quickload :qlot)\r\n(push *default-pathname-defaults* asdf:*central-registry*)\r\n\r\n\r\n;;; test.asd\r\n(defsystem #:test :components ())\r\n````\r\nWith those files in place, removing the `quicklisp/` directory and running `sbcl --load wookie-patch.lisp --eval \"(qlot:install :test)\"` will produce an error about `ql-dist:install` not being specialized for the argument `nil`. Applying the code in this branch will make this test case succeed.","created_at":"2018-09-08T15:30:32Z","updated_at":"2018-09-08T15:30:32Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/fukamachi/qlot/pulls/62/commits","review_comments_url":"https://api.github.com/repos/fukamachi/qlot/pulls/62/comments","review_comment_url":"https://api.github.com/repos/fukamachi/qlot/pulls/comments{/number}","comments_url":"https://api.github.com/repos/fukamachi/qlot/issues/62/comments","statuses_url":"https://api.github.com/repos/fukamachi/qlot/statuses/2cbe82c1cc1a518da9d6c87322969dc10920cef8","head":{"label":"mtstickney:bogus_dist_initialization","ref":"bogus_dist_initialization","sha":"2cbe82c1cc1a518da9d6c87322969dc10920cef8","user":{"login":"mtstickney","id":174859,"node_id":"MDQ6VXNlcjE3NDg1OQ==","avatar_url":"https://avatars3.githubusercontent.com/u/174859?v=4","gravatar_id":"","url":"https://api.github.com/users/mtstickney","html_url":"https://github.com/mtstickney","followers_url":"https://api.github.com/users/mtstickney/followers","following_url":"https://api.github.com/users/mtstickney/following{/other_user}","gists_url":"https://api.github.com/users/mtstickney/gists{/gist_id}","starred_url":"https://api.github.com/users/mtstickney/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mtstickney/subscriptions","organizations_url":"https://api.github.com/users/mtstickney/orgs","repos_url":"https://api.github.com/users/mtstickney/repos","events_url":"https://api.github.com/users/mtstickney/events{/privacy}","received_events_url":"https://api.github.com/users/mtstickney/received_events","type":"User","site_admin":false},"repo":{"id":67772165,"node_id":"MDEwOlJlcG9zaXRvcnk2Nzc3MjE2NQ==","name":"qlot","full_name":"mtstickney/qlot","owner":{"login":"mtstickney","id":174859,"node_id":"MDQ6VXNlcjE3NDg1OQ==","avatar_url":"https://avatars3.githubusercontent.com/u/174859?v=4","gravatar_id":"","url":"https://api.github.com/users/mtstickney","html_url":"https://github.com/mtstickney","followers_url":"https://api.github.com/users/mtstickney/followers","following_url":"https://api.github.com/users/mtstickney/following{/other_user}","gists_url":"https://api.github.com/users/mtstickney/gists{/gist_id}","starred_url":"https://api.github.com/users/mtstickney/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mtstickney/subscriptions","organizations_url":"https://api.github.com/users/mtstickney/orgs","repos_url":"https://api.github.com/users/mtstickney/repos","events_url":"https://api.github.com/users/mtstickney/events{/privacy}","received_events_url":"https://api.github.com/users/mtstickney/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mtstickney/qlot","description":"A project-local library installer for Common Lisp","fork":true,"url":"https://api.github.com/repos/mtstickney/qlot","forks_url":"https://api.github.com/repos/mtstickney/qlot/forks","keys_url":"https://api.github.com/repos/mtstickney/qlot/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mtstickney/qlot/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mtstickney/qlot/teams","hooks_url":"https://api.github.com/repos/mtstickney/qlot/hooks","issue_events_url":"https://api.github.com/repos/mtstickney/qlot/issues/events{/number}","events_url":"https://api.github.com/repos/mtstickney/qlot/events","assignees_url":"https://api.github.com/repos/mtstickney/qlot/assignees{/user}","branches_url":"https://api.github.com/repos/mtstickney/qlot/branches{/branch}","tags_url":"https://api.github.com/repos/mtstickney/qlot/tags","blobs_url":"https://api.github.com/repos/mtstickney/qlot/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mtstickney/qlot/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mtstickney/qlot/git/refs{/sha}","trees_url":"https://api.github.com/repos/mtstickney/qlot/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mtstickney/qlot/statuses/{sha}","languages_url":"https://api.github.com/repos/mtstickney/qlot/languages","stargazers_url":"https://api.github.com/repos/mtstickney/qlot/stargazers","contributors_url":"https://api.github.com/repos/mtstickney/qlot/contributors","subscribers_url":"https://api.github.com/repos/mtstickney/qlot/subscribers","subscription_url":"https://api.github.com/repos/mtstickney/qlot/subscription","commits_url":"https://api.github.com/repos/mtstickney/qlot/commits{/sha}","git_commits_url":"https://api.github.com/repos/mtstickney/qlot/git/commits{/sha}","comments_url":"https://api.github.com/repos/mtstickney/qlot/comments{/number}","issue_comment_url":"https://api.github.com/repos/mtstickney/qlot/issues/comments{/number}","contents_url":"https://api.github.com/repos/mtstickney/qlot/contents/{+path}","compare_url":"https://api.github.com/repos/mtstickney/qlot/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mtstickney/qlot/merges","archive_url":"https://api.github.com/repos/mtstickney/qlot/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mtstickney/qlot/downloads","issues_url":"https://api.github.com/repos/mtstickney/qlot/issues{/number}","pulls_url":"https://api.github.com/repos/mtstickney/qlot/pulls{/number}","milestones_url":"https://api.github.com/repos/mtstickney/qlot/milestones{/number}","notifications_url":"https://api.github.com/repos/mtstickney/qlot/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mtstickney/qlot/labels{/name}","releases_url":"https://api.github.com/repos/mtstickney/qlot/releases{/id}","deployments_url":"https://api.github.com/repos/mtstickney/qlot/deployments","created_at":"2016-09-09T06:25:51Z","updated_at":"2016-09-09T06:25:52Z","pushed_at":"2018-09-07T04:39:22Z","git_url":"git://github.com/mtstickney/qlot.git","ssh_url":"git@github.com:mtstickney/qlot.git","clone_url":"https://github.com/mtstickney/qlot.git","svn_url":"https://github.com/mtstickney/qlot","homepage":null,"size":1057,"stargazers_count":0,"watchers_count":0,"language":"Common Lisp","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"fukamachi:master","ref":"master","sha":"f30d8203cb50bceb34df8ad2e2c37910f0e39210","user":{"login":"fukamachi","id":90570,"node_id":"MDQ6VXNlcjkwNTcw","avatar_url":"https://avatars2.githubusercontent.com/u/90570?v=4","gravatar_id":"","url":"https://api.github.com/users/fukamachi","html_url":"https://github.com/fukamachi","followers_url":"https://api.github.com/users/fukamachi/followers","following_url":"https://api.github.com/users/fukamachi/following{/other_user}","gists_url":"https://api.github.com/users/fukamachi/gists{/gist_id}","starred_url":"https://api.github.com/users/fukamachi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fukamachi/subscriptions","organizations_url":"https://api.github.com/users/fukamachi/orgs","repos_url":"https://api.github.com/users/fukamachi/repos","events_url":"https://api.github.com/users/fukamachi/events{/privacy}","received_events_url":"https://api.github.com/users/fukamachi/received_events","type":"User","site_admin":false},"repo":{"id":22311104,"node_id":"MDEwOlJlcG9zaXRvcnkyMjMxMTEwNA==","name":"qlot","full_name":"fukamachi/qlot","owner":{"login":"fukamachi","id":90570,"node_id":"MDQ6VXNlcjkwNTcw","avatar_url":"https://avatars2.githubusercontent.com/u/90570?v=4","gravatar_id":"","url":"https://api.github.com/users/fukamachi","html_url":"https://github.com/fukamachi","followers_url":"https://api.github.com/users/fukamachi/followers","following_url":"https://api.github.com/users/fukamachi/following{/other_user}","gists_url":"https://api.github.com/users/fukamachi/gists{/gist_id}","starred_url":"https://api.github.com/users/fukamachi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fukamachi/subscriptions","organizations_url":"https://api.github.com/users/fukamachi/orgs","repos_url":"https://api.github.com/users/fukamachi/repos","events_url":"https://api.github.com/users/fukamachi/events{/privacy}","received_events_url":"https://api.github.com/users/fukamachi/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/fukamachi/qlot","description":"A project-local library installer for Common Lisp","fork":false,"url":"https://api.github.com/repos/fukamachi/qlot","forks_url":"https://api.github.com/repos/fukamachi/qlot/forks","keys_url":"https://api.github.com/repos/fukamachi/qlot/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fukamachi/qlot/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fukamachi/qlot/teams","hooks_url":"https://api.github.com/repos/fukamachi/qlot/hooks","issue_events_url":"https://api.github.com/repos/fukamachi/qlot/issues/events{/number}","events_url":"https://api.github.com/repos/fukamachi/qlot/events","assignees_url":"https://api.github.com/repos/fukamachi/qlot/assignees{/user}","branches_url":"https://api.github.com/repos/fukamachi/qlot/branches{/branch}","tags_url":"https://api.github.com/repos/fukamachi/qlot/tags","blobs_url":"https://api.github.com/repos/fukamachi/qlot/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fukamachi/qlot/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fukamachi/qlot/git/refs{/sha}","trees_url":"https://api.github.com/repos/fukamachi/qlot/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fukamachi/qlot/statuses/{sha}","languages_url":"https://api.github.com/repos/fukamachi/qlot/languages","stargazers_url":"https://api.github.com/repos/fukamachi/qlot/stargazers","contributors_url":"https://api.github.com/repos/fukamachi/qlot/contributors","subscribers_url":"https://api.github.com/repos/fukamachi/qlot/subscribers","subscription_url":"https://api.github.com/repos/fukamachi/qlot/subscription","commits_url":"https://api.github.com/repos/fukamachi/qlot/commits{/sha}","git_commits_url":"https://api.github.com/repos/fukamachi/qlot/git/commits{/sha}","comments_url":"https://api.github.com/repos/fukamachi/qlot/comments{/number}","issue_comment_url":"https://api.github.com/repos/fukamachi/qlot/issues/comments{/number}","contents_url":"https://api.github.com/repos/fukamachi/qlot/contents/{+path}","compare_url":"https://api.github.com/repos/fukamachi/qlot/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fukamachi/qlot/merges","archive_url":"https://api.github.com/repos/fukamachi/qlot/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fukamachi/qlot/downloads","issues_url":"https://api.github.com/repos/fukamachi/qlot/issues{/number}","pulls_url":"https://api.github.com/repos/fukamachi/qlot/pulls{/number}","milestones_url":"https://api.github.com/repos/fukamachi/qlot/milestones{/number}","notifications_url":"https://api.github.com/repos/fukamachi/qlot/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fukamachi/qlot/labels{/name}","releases_url":"https://api.github.com/repos/fukamachi/qlot/releases{/id}","deployments_url":"https://api.github.com/repos/fukamachi/qlot/deployments","created_at":"2014-07-27T13:05:21Z","updated_at":"2018-09-05T10:49:41Z","pushed_at":"2018-09-05T10:49:39Z","git_url":"git://github.com/fukamachi/qlot.git","ssh_url":"git@github.com:fukamachi/qlot.git","clone_url":"https://github.com/fukamachi/qlot.git","svn_url":"https://github.com/fukamachi/qlot","homepage":null,"size":1092,"stargazers_count":145,"watchers_count":145,"language":"Common Lisp","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":19,"mirror_url":null,"archived":false,"open_issues_count":13,"license":null,"forks":19,"open_issues":13,"watchers":145,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/fukamachi/qlot/pulls/62"},"html":{"href":"https://github.com/fukamachi/qlot/pull/62"},"issue":{"href":"https://api.github.com/repos/fukamachi/qlot/issues/62"},"comments":{"href":"https://api.github.com/repos/fukamachi/qlot/issues/62/comments"},"review_comments":{"href":"https://api.github.com/repos/fukamachi/qlot/pulls/62/comments"},"review_comment":{"href":"https://api.github.com/repos/fukamachi/qlot/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/fukamachi/qlot/pulls/62/commits"},"statuses":{"href":"https://api.github.com/repos/fukamachi/qlot/statuses/2cbe82c1cc1a518da9d6c87322969dc10920cef8"}},"author_association":"CONTRIBUTOR","merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":true,"commits":1,"additions":4,"deletions":4,"changed_files":1}}
{"actor":{"display_login":"mtstickney"}}