{"action":"closed","number":641,"pull_request":{"url":"https://api.github.com/repos/ropensci/drake/pulls/641","id":241656421,"node_id":"MDExOlB1bGxSZXF1ZXN0MjQxNjU2NDIx","html_url":"https://github.com/ropensci/drake/pull/641","diff_url":"https://github.com/ropensci/drake/pull/641.diff","patch_url":"https://github.com/ropensci/drake/pull/641.patch","issue_url":"https://api.github.com/repos/ropensci/drake/issues/641","number":641,"state":"closed","locked":false,"title":"Cleaner encoding and case insensitivity","user":{"login":"wlandau","id":1580860,"node_id":"MDQ6VXNlcjE1ODA4NjA=","avatar_url":"https://avatars1.githubusercontent.com/u/1580860?v=4","gravatar_id":"","url":"https://api.github.com/users/wlandau","html_url":"https://github.com/wlandau","followers_url":"https://api.github.com/users/wlandau/followers","following_url":"https://api.github.com/users/wlandau/following{/other_user}","gists_url":"https://api.github.com/users/wlandau/gists{/gist_id}","starred_url":"https://api.github.com/users/wlandau/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wlandau/subscriptions","organizations_url":"https://api.github.com/users/wlandau/orgs","repos_url":"https://api.github.com/users/wlandau/repos","events_url":"https://api.github.com/users/wlandau/events{/privacy}","received_events_url":"https://api.github.com/users/wlandau/received_events","type":"User","site_admin":false},"body":"# Summary\r\n\r\nThis PR implements the items listed in https://github.com/ropensci/drake/issues/630#issuecomment-450729931. The switch to base 32 encoding exacerbates #628 (sorry @kendonB) but not by much.\r\n\r\nThis also marks the beginning of the removal of the old single-quoted file API. The PR breaks some of that old functionality, and since the next release will be 7.0.0 anyway, it was not worth fixing.\r\n\r\nRather than pre-encoding all the keys upfront, we now memoize base 32 encoding/decoding in hash tables. This common-sense solution cleans up the internals and should preserve most of the speed.\r\n\r\nIn addition, since the names of most targets and imports are no longer encoded, there could be potential name collisions on some file systems. For example, if one target is named `your_target` and another is named `Your_Target`, `drake` will try to save `storr` key files `your_target` and `Your_Target` in the same directory, which will produce an error. So as of this PR, `drake` throws an informative warning in such edge cases.\r\n\r\n# Related GitHub issues and pull requests\r\n\r\n- Ref: #630 \r\n\r\n# Checklist\r\n\r\n- [x] I have read `drake`'s [code of conduct](https://github.com/ropensci/drake/blob/master/CONDUCT.md), and I agree to follow its rules.\r\n- [x] I have listed any substantial changes in the [development news](https://github.com/ropensci/drake/blob/master/NEWS.md).\r\n- [x] I have added [`testthat`](https://github.com/r-lib/testthat) unit tests to [`tests/testthat`](https://github.com/ropensci/drake/tree/master/tests/testthat) to confirm that any new features or functionality work correctly.\r\n- [x] I have tested this pull request locally with `devtools::check()`\r\n- [x] This pull request is ready for review.\r\n- [x] I think this pull request is ready to merge.\r\n","created_at":"2019-01-01T23:37:31Z","updated_at":"2019-01-02T00:13:06Z","closed_at":"2019-01-02T00:13:06Z","merged_at":"2019-01-02T00:13:06Z","merge_commit_sha":"1e8177f723bcf904573bfaa729b837b5e9e86247","assignee":{"login":"wlandau","id":1580860,"node_id":"MDQ6VXNlcjE1ODA4NjA=","avatar_url":"https://avatars1.githubusercontent.com/u/1580860?v=4","gravatar_id":"","url":"https://api.github.com/users/wlandau","html_url":"https://github.com/wlandau","followers_url":"https://api.github.com/users/wlandau/followers","following_url":"https://api.github.com/users/wlandau/following{/other_user}","gists_url":"https://api.github.com/users/wlandau/gists{/gist_id}","starred_url":"https://api.github.com/users/wlandau/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wlandau/subscriptions","organizations_url":"https://api.github.com/users/wlandau/orgs","repos_url":"https://api.github.com/users/wlandau/repos","events_url":"https://api.github.com/users/wlandau/events{/privacy}","received_events_url":"https://api.github.com/users/wlandau/received_events","type":"User","site_admin":false},"assignees":[{"login":"wlandau","id":1580860,"node_id":"MDQ6VXNlcjE1ODA4NjA=","avatar_url":"https://avatars1.githubusercontent.com/u/1580860?v=4","gravatar_id":"","url":"https://api.github.com/users/wlandau","html_url":"https://github.com/wlandau","followers_url":"https://api.github.com/users/wlandau/followers","following_url":"https://api.github.com/users/wlandau/following{/other_user}","gists_url":"https://api.github.com/users/wlandau/gists{/gist_id}","starred_url":"https://api.github.com/users/wlandau/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wlandau/subscriptions","organizations_url":"https://api.github.com/users/wlandau/orgs","repos_url":"https://api.github.com/users/wlandau/repos","events_url":"https://api.github.com/users/wlandau/events{/privacy}","received_events_url":"https://api.github.com/users/wlandau/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":577254680,"node_id":"MDU6TGFiZWw1NzcyNTQ2ODA=","url":"https://api.github.com/repos/ropensci/drake/labels/topic:%20performance%20:checkered_flag:","name":"topic: performance :checkered_flag:","color":"bfd4f2","default":false},{"id":1017632769,"node_id":"MDU6TGFiZWwxMDE3NjMyNzY5","url":"https://api.github.com/repos/ropensci/drake/labels/topic:%20reproducibility%20:recycle:","name":"topic: reproducibility :recycle:","color":"c5def5","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/ropensci/drake/pulls/641/commits","review_comments_url":"https://api.github.com/repos/ropensci/drake/pulls/641/comments","review_comment_url":"https://api.github.com/repos/ropensci/drake/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ropensci/drake/issues/641/comments","statuses_url":"https://api.github.com/repos/ropensci/drake/statuses/49243193fa1c615c996322d14f3b5a3eae618877","head":{"label":"ropensci:630","ref":"630","sha":"49243193fa1c615c996322d14f3b5a3eae618877","user":{"login":"ropensci","id":1200269,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyMDAyNjk=","avatar_url":"https://avatars3.githubusercontent.com/u/1200269?v=4","gravatar_id":"","url":"https://api.github.com/users/ropensci","html_url":"https://github.com/ropensci","followers_url":"https://api.github.com/users/ropensci/followers","following_url":"https://api.github.com/users/ropensci/following{/other_user}","gists_url":"https://api.github.com/users/ropensci/gists{/gist_id}","starred_url":"https://api.github.com/users/ropensci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ropensci/subscriptions","organizations_url":"https://api.github.com/users/ropensci/orgs","repos_url":"https://api.github.com/users/ropensci/repos","events_url":"https://api.github.com/users/ropensci/events{/privacy}","received_events_url":"https://api.github.com/users/ropensci/received_events","type":"Organization","site_admin":false},"repo":{"id":82609103,"node_id":"MDEwOlJlcG9zaXRvcnk4MjYwOTEwMw==","name":"drake","full_name":"ropensci/drake","private":false,"owner":{"login":"ropensci","id":1200269,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyMDAyNjk=","avatar_url":"https://avatars3.githubusercontent.com/u/1200269?v=4","gravatar_id":"","url":"https://api.github.com/users/ropensci","html_url":"https://github.com/ropensci","followers_url":"https://api.github.com/users/ropensci/followers","following_url":"https://api.github.com/users/ropensci/following{/other_user}","gists_url":"https://api.github.com/users/ropensci/gists{/gist_id}","starred_url":"https://api.github.com/users/ropensci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ropensci/subscriptions","organizations_url":"https://api.github.com/users/ropensci/orgs","repos_url":"https://api.github.com/users/ropensci/repos","events_url":"https://api.github.com/users/ropensci/events{/privacy}","received_events_url":"https://api.github.com/users/ropensci/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/ropensci/drake","description":"An R-focused pipeline toolkit for reproducibility and high-performance computing","fork":false,"url":"https://api.github.com/repos/ropensci/drake","forks_url":"https://api.github.com/repos/ropensci/drake/forks","keys_url":"https://api.github.com/repos/ropensci/drake/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ropensci/drake/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ropensci/drake/teams","hooks_url":"https://api.github.com/repos/ropensci/drake/hooks","issue_events_url":"https://api.github.com/repos/ropensci/drake/issues/events{/number}","events_url":"https://api.github.com/repos/ropensci/drake/events","assignees_url":"https://api.github.com/repos/ropensci/drake/assignees{/user}","branches_url":"https://api.github.com/repos/ropensci/drake/branches{/branch}","tags_url":"https://api.github.com/repos/ropensci/drake/tags","blobs_url":"https://api.github.com/repos/ropensci/drake/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ropensci/drake/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ropensci/drake/git/refs{/sha}","trees_url":"https://api.github.com/repos/ropensci/drake/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ropensci/drake/statuses/{sha}","languages_url":"https://api.github.com/repos/ropensci/drake/languages","stargazers_url":"https://api.github.com/repos/ropensci/drake/stargazers","contributors_url":"https://api.github.com/repos/ropensci/drake/contributors","subscribers_url":"https://api.github.com/repos/ropensci/drake/subscribers","subscription_url":"https://api.github.com/repos/ropensci/drake/subscription","commits_url":"https://api.github.com/repos/ropensci/drake/commits{/sha}","git_commits_url":"https://api.github.com/repos/ropensci/drake/git/commits{/sha}","comments_url":"https://api.github.com/repos/ropensci/drake/comments{/number}","issue_comment_url":"https://api.github.com/repos/ropensci/drake/issues/comments{/number}","contents_url":"https://api.github.com/repos/ropensci/drake/contents/{+path}","compare_url":"https://api.github.com/repos/ropensci/drake/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ropensci/drake/merges","archive_url":"https://api.github.com/repos/ropensci/drake/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ropensci/drake/downloads","issues_url":"https://api.github.com/repos/ropensci/drake/issues{/number}","pulls_url":"https://api.github.com/repos/ropensci/drake/pulls{/number}","milestones_url":"https://api.github.com/repos/ropensci/drake/milestones{/number}","notifications_url":"https://api.github.com/repos/ropensci/drake/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ropensci/drake/labels{/name}","releases_url":"https://api.github.com/repos/ropensci/drake/releases{/id}","deployments_url":"https://api.github.com/repos/ropensci/drake/deployments","created_at":"2017-02-20T22:28:40Z","updated_at":"2019-01-02T00:09:42Z","pushed_at":"2019-01-02T00:13:06Z","git_url":"git://github.com/ropensci/drake.git","ssh_url":"git@github.com:ropensci/drake.git","clone_url":"https://github.com/ropensci/drake.git","svn_url":"https://github.com/ropensci/drake","homepage":"https://ropensci.github.io/drake","size":91449,"stargazers_count":537,"watchers_count":537,"language":"R","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":45,"mirror_url":null,"archived":false,"open_issues_count":14,"license":null,"forks":45,"open_issues":14,"watchers":537,"default_branch":"master"}},"base":{"label":"ropensci:master","ref":"master","sha":"d53f56d64a4bca080842e0b1883f5f9dd91396e7","user":{"login":"ropensci","id":1200269,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyMDAyNjk=","avatar_url":"https://avatars3.githubusercontent.com/u/1200269?v=4","gravatar_id":"","url":"https://api.github.com/users/ropensci","html_url":"https://github.com/ropensci","followers_url":"https://api.github.com/users/ropensci/followers","following_url":"https://api.github.com/users/ropensci/following{/other_user}","gists_url":"https://api.github.com/users/ropensci/gists{/gist_id}","starred_url":"https://api.github.com/users/ropensci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ropensci/subscriptions","organizations_url":"https://api.github.com/users/ropensci/orgs","repos_url":"https://api.github.com/users/ropensci/repos","events_url":"https://api.github.com/users/ropensci/events{/privacy}","received_events_url":"https://api.github.com/users/ropensci/received_events","type":"Organization","site_admin":false},"repo":{"id":82609103,"node_id":"MDEwOlJlcG9zaXRvcnk4MjYwOTEwMw==","name":"drake","full_name":"ropensci/drake","private":false,"owner":{"login":"ropensci","id":1200269,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyMDAyNjk=","avatar_url":"https://avatars3.githubusercontent.com/u/1200269?v=4","gravatar_id":"","url":"https://api.github.com/users/ropensci","html_url":"https://github.com/ropensci","followers_url":"https://api.github.com/users/ropensci/followers","following_url":"https://api.github.com/users/ropensci/following{/other_user}","gists_url":"https://api.github.com/users/ropensci/gists{/gist_id}","starred_url":"https://api.github.com/users/ropensci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ropensci/subscriptions","organizations_url":"https://api.github.com/users/ropensci/orgs","repos_url":"https://api.github.com/users/ropensci/repos","events_url":"https://api.github.com/users/ropensci/events{/privacy}","received_events_url":"https://api.github.com/users/ropensci/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/ropensci/drake","description":"An R-focused pipeline toolkit for reproducibility and high-performance computing","fork":false,"url":"https://api.github.com/repos/ropensci/drake","forks_url":"https://api.github.com/repos/ropensci/drake/forks","keys_url":"https://api.github.com/repos/ropensci/drake/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ropensci/drake/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ropensci/drake/teams","hooks_url":"https://api.github.com/repos/ropensci/drake/hooks","issue_events_url":"https://api.github.com/repos/ropensci/drake/issues/events{/number}","events_url":"https://api.github.com/repos/ropensci/drake/events","assignees_url":"https://api.github.com/repos/ropensci/drake/assignees{/user}","branches_url":"https://api.github.com/repos/ropensci/drake/branches{/branch}","tags_url":"https://api.github.com/repos/ropensci/drake/tags","blobs_url":"https://api.github.com/repos/ropensci/drake/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ropensci/drake/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ropensci/drake/git/refs{/sha}","trees_url":"https://api.github.com/repos/ropensci/drake/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ropensci/drake/statuses/{sha}","languages_url":"https://api.github.com/repos/ropensci/drake/languages","stargazers_url":"https://api.github.com/repos/ropensci/drake/stargazers","contributors_url":"https://api.github.com/repos/ropensci/drake/contributors","subscribers_url":"https://api.github.com/repos/ropensci/drake/subscribers","subscription_url":"https://api.github.com/repos/ropensci/drake/subscription","commits_url":"https://api.github.com/repos/ropensci/drake/commits{/sha}","git_commits_url":"https://api.github.com/repos/ropensci/drake/git/commits{/sha}","comments_url":"https://api.github.com/repos/ropensci/drake/comments{/number}","issue_comment_url":"https://api.github.com/repos/ropensci/drake/issues/comments{/number}","contents_url":"https://api.github.com/repos/ropensci/drake/contents/{+path}","compare_url":"https://api.github.com/repos/ropensci/drake/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ropensci/drake/merges","archive_url":"https://api.github.com/repos/ropensci/drake/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ropensci/drake/downloads","issues_url":"https://api.github.com/repos/ropensci/drake/issues{/number}","pulls_url":"https://api.github.com/repos/ropensci/drake/pulls{/number}","milestones_url":"https://api.github.com/repos/ropensci/drake/milestones{/number}","notifications_url":"https://api.github.com/repos/ropensci/drake/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ropensci/drake/labels{/name}","releases_url":"https://api.github.com/repos/ropensci/drake/releases{/id}","deployments_url":"https://api.github.com/repos/ropensci/drake/deployments","created_at":"2017-02-20T22:28:40Z","updated_at":"2019-01-02T00:09:42Z","pushed_at":"2019-01-02T00:13:06Z","git_url":"git://github.com/ropensci/drake.git","ssh_url":"git@github.com:ropensci/drake.git","clone_url":"https://github.com/ropensci/drake.git","svn_url":"https://github.com/ropensci/drake","homepage":"https://ropensci.github.io/drake","size":91449,"stargazers_count":537,"watchers_count":537,"language":"R","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":45,"mirror_url":null,"archived":false,"open_issues_count":14,"license":null,"forks":45,"open_issues":14,"watchers":537,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ropensci/drake/pulls/641"},"html":{"href":"https://github.com/ropensci/drake/pull/641"},"issue":{"href":"https://api.github.com/repos/ropensci/drake/issues/641"},"comments":{"href":"https://api.github.com/repos/ropensci/drake/issues/641/comments"},"review_comments":{"href":"https://api.github.com/repos/ropensci/drake/pulls/641/comments"},"review_comment":{"href":"https://api.github.com/repos/ropensci/drake/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ropensci/drake/pulls/641/commits"},"statuses":{"href":"https://api.github.com/repos/ropensci/drake/statuses/49243193fa1c615c996322d14f3b5a3eae618877"}},"author_association":"COLLABORATOR","merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"wlandau","id":1580860,"node_id":"MDQ6VXNlcjE1ODA4NjA=","avatar_url":"https://avatars1.githubusercontent.com/u/1580860?v=4","gravatar_id":"","url":"https://api.github.com/users/wlandau","html_url":"https://github.com/wlandau","followers_url":"https://api.github.com/users/wlandau/followers","following_url":"https://api.github.com/users/wlandau/following{/other_user}","gists_url":"https://api.github.com/users/wlandau/gists{/gist_id}","starred_url":"https://api.github.com/users/wlandau/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wlandau/subscriptions","organizations_url":"https://api.github.com/users/wlandau/orgs","repos_url":"https://api.github.com/users/wlandau/repos","events_url":"https://api.github.com/users/wlandau/events{/privacy}","received_events_url":"https://api.github.com/users/wlandau/received_events","type":"User","site_admin":false},"comments":2,"review_comments":0,"maintainer_can_modify":false,"commits":23,"additions":359,"deletions":319,"changed_files":39}}
{"actor":{"display_login":"wlandau"}}