{"action":"created","issue":{"url":"https://api.github.com/repos/neovim/neovim/issues/2506","labels_url":"https://api.github.com/repos/neovim/neovim/issues/2506/labels{/name}","comments_url":"https://api.github.com/repos/neovim/neovim/issues/2506/comments","events_url":"https://api.github.com/repos/neovim/neovim/issues/2506/events","html_url":"https://github.com/neovim/neovim/pull/2506","id":70929461,"number":2506,"title":"[RFC] Replace viminfo with ShaDa files","user":{"login":"ZyX-I","id":322097,"avatar_url":"https://avatars.githubusercontent.com/u/322097?v=3","gravatar_id":"","url":"https://api.github.com/users/ZyX-I","html_url":"https://github.com/ZyX-I","followers_url":"https://api.github.com/users/ZyX-I/followers","following_url":"https://api.github.com/users/ZyX-I/following{/other_user}","gists_url":"https://api.github.com/users/ZyX-I/gists{/gist_id}","starred_url":"https://api.github.com/users/ZyX-I/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ZyX-I/subscriptions","organizations_url":"https://api.github.com/users/ZyX-I/orgs","repos_url":"https://api.github.com/users/ZyX-I/repos","events_url":"https://api.github.com/users/ZyX-I/events{/privacy}","received_events_url":"https://api.github.com/users/ZyX-I/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/neovim/neovim/labels/enhancement","name":"enhancement","color":"bfe5bf"},{"url":"https://api.github.com/repos/neovim/neovim/labels/RFC","name":"RFC","color":"dfdfdf"}],"state":"open","locked":false,"assignee":{"login":"ZyX-I","id":322097,"avatar_url":"https://avatars.githubusercontent.com/u/322097?v=3","gravatar_id":"","url":"https://api.github.com/users/ZyX-I","html_url":"https://github.com/ZyX-I","followers_url":"https://api.github.com/users/ZyX-I/followers","following_url":"https://api.github.com/users/ZyX-I/following{/other_user}","gists_url":"https://api.github.com/users/ZyX-I/gists{/gist_id}","starred_url":"https://api.github.com/users/ZyX-I/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ZyX-I/subscriptions","organizations_url":"https://api.github.com/users/ZyX-I/orgs","repos_url":"https://api.github.com/users/ZyX-I/repos","events_url":"https://api.github.com/users/ZyX-I/events{/privacy}","received_events_url":"https://api.github.com/users/ZyX-I/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/neovim/neovim/milestones/10","html_url":"https://github.com/neovim/neovim/milestones/0.2","labels_url":"https://api.github.com/repos/neovim/neovim/milestones/10/labels","id":1183808,"number":10,"title":"0.2","description":null,"creator":{"login":"justinmk","id":1359421,"avatar_url":"https://avatars.githubusercontent.com/u/1359421?v=3","gravatar_id":"","url":"https://api.github.com/users/justinmk","html_url":"https://github.com/justinmk","followers_url":"https://api.github.com/users/justinmk/followers","following_url":"https://api.github.com/users/justinmk/following{/other_user}","gists_url":"https://api.github.com/users/justinmk/gists{/gist_id}","starred_url":"https://api.github.com/users/justinmk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justinmk/subscriptions","organizations_url":"https://api.github.com/users/justinmk/orgs","repos_url":"https://api.github.com/users/justinmk/repos","events_url":"https://api.github.com/users/justinmk/events{/privacy}","received_events_url":"https://api.github.com/users/justinmk/received_events","type":"User","site_admin":false},"open_issues":29,"closed_issues":4,"state":"open","created_at":"2015-06-27T19:05:24Z","updated_at":"2015-08-16T17:46:31Z","due_on":null,"closed_at":null},"comments":46,"created_at":"2015-04-25T15:44:47Z","updated_at":"2015-08-16T18:27:03Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/neovim/neovim/pulls/2506","html_url":"https://github.com/neovim/neovim/pull/2506","diff_url":"https://github.com/neovim/neovim/pull/2506.diff","patch_url":"https://github.com/neovim/neovim/pull/2506.patch"},"body":"This PR contains replacement for the viminfo file discussed in #999.\r\n\r\n- [x] ShaDa file dumping.\r\n- [x] Merging.\r\n- [x] Writing.\r\n\r\n    - [x] Registers.\r\n    - [x] History item.\r\n    - [x] Last search/substitute pattern.\r\n    - [x] Last substitute replacement string.\r\n    - [x] Variable values.\r\n    - [x] Global marks.\r\n    - [x] Local marks.\r\n    - [x] Jump list.\r\n    - [x] Buffer list.\r\n    - [x] Buffer change list.\r\n\r\n- [x] Reading.\r\n\r\n    - [x] Registers.\r\n    - [x] History item.\r\n    - [x] Last search/substitute pattern.\r\n    - [x] Last substitute replacement string.\r\n    - [x] Variable values.\r\n    - [x] Global marks.\r\n    - [x] Local marks.\r\n    - [x] Jump list.\r\n    - [x] Buffer list.\r\n    - [x] Buffer change list.\r\n    - [x] v:old_files list (is determined based on marks in shada, so has no equivalent in “writing section”).\r\n\r\n- [x] Functional tests.\r\n\r\n    - [x] Registers.\r\n    - [x] History item.\r\n    - [x] Last search/substitute pattern.\r\n    - [x] Last substitute replacement string.\r\n    - [x] Global marks.\r\n    - [x] Local marks.\r\n    - [x] Jump list.\r\n    - [x] Buffer list.\r\n    - [x] Buffer change list.\r\n    - [x] Compatibility support:\r\n\r\n        - [x] Ignoring global marks with unknown names when reading.\r\n        - [x] Ignoring local marks with unknown names when reading.\r\n        - [x] Ignoring registers with unknown names when reading.\r\n        - [x] Ignoring registers with unknown types when reading.\r\n        - [x] Ignoring history with unknown type when reading.\r\n        - [x] Preserving global marks with unknown names when merging.\r\n        - [x] Preserving local marks with unknown names when merging.\r\n        - [x] Preserving registers with unknown names when merging.\r\n        - [x] Preserving registers with unknown types when merging.\r\n        - [x] Preserving history with unknown type when merging.\r\n        - [x] Preserving items with unknown type when merging.\r\n        - [x] Preserving additional_data/additional_elements in\r\n\r\n            - [x] Registers.\r\n            - [x] History items.\r\n            - [x] Last search/substitute patterns.\r\n            - [x] Last substitute replacement string.\r\n            - [x] Global marks.\r\n            - [x] Local marks.\r\n            - [x] Jump list.\r\n            - [x] Buffer list.\r\n            - [x] Buffer change list.\r\n\r\n    - [x] Variable values.\r\n    - [x] v:old_files list.\r\n    - [x] Merging:\r\n\r\n        - [x] History merging:\r\n\r\n            - [x] Ignoring read history item if NeoVim instance already contains its own with ge timestamp when reading.\r\n            - [x] Using read history item if NeoVim instance already contains its own with lt timestamp when reading.\r\n            - [x] Ignoring read history item if NeoVim instance already contains its own with ge timestamp when writing.\r\n            - [x] Using read history item if NeoVim instance already contains its own with lt timestamp when writing.\r\n            - [x] Reading history correctly with messed up timestamp order.\r\n            - [x] Writing history correctly with messed up timestamp order.\r\n\r\n        - [x] Replacing last search/substitute pattern with an older one when reading.\r\n        - [x] Replacing last search/substitute pattern with read one when reading with bang.\r\n        - [x] Replacing last search/substitute pattern with an older one when writing.\r\n        - [x] Replacing replacement string with an older one when reading.\r\n        - [x] Replacing replacement string with read one when reading with bang.\r\n        - [x] Replacing replacement string with an older one when writing.\r\n        - [x] Merging jump list when reading.\r\n        - [x] Merging jump list when writing.\r\n        - [x] Merging change list when reading.\r\n        - [x] Merging change list when writing.\r\n        - [x] Replacing global mark with an older one when reading.\r\n        - [x] Replacing global mark with read one when reading with bang.\r\n        - [x] Replacing global mark with an older one when writing.\r\n        - [x] Replacing local mark with an older one when reading.\r\n        - [x] Replacing local mark with read one when reading with bang.\r\n        - [x] Replacing local mark with an older one when writing.\r\n        - [x] Replacing register with an older one when reading.\r\n        - [x] Replacing register with read one when reading with bang.\r\n        - [x] Replacing register with an older one when writing.\r\n\r\n    - [x] Ignoring existing file when writing with bang.\r\n    - [x] Converting some data from &encoding when writing:\r\n\r\n        - [x] Converting register values when writing.\r\n        - [x] Converting variable values when writing.\r\n        - [x] Converting history strings when writing.\r\n        - [x] Converting last used search/substitute patterns when writing.\r\n        - [x] Converting last used replacement strings when writing.\r\n\r\n    - [x] Converting some data to &encoding when reading:\r\n\r\n        - [x] Converting register values when writing.\r\n        - [x] Converting variable values when writing.\r\n        - [x] Converting history strings when writing.\r\n        - [x] Converting last used search/substitute patterns when writing.\r\n        - [x] Converting last used replacement strings when writing.\r\n\r\n    - [x] Reaction on various errors in ShaDa file:\r\n\r\n        - [x] Items with invalid header.\r\n        - [x] Registers.\r\n        - [x] History items.\r\n        - [x] Last search/substitute patterns.\r\n        - [x] Last substitute replacement string.\r\n        - [x] Global marks.\r\n        - [x] Local marks.\r\n        - [x] Jump list.\r\n        - [x] Buffer list.\r\n        - [x] Buffer change list.\r\n        - [x] Variables.\r\n\r\n    - [x] `s` item size limit.\r\n    - [x] `s` item size limit being used when merging for “foreign” items.\r\n    - [x] Using `.tmp.b` when `.tmp.a` already exists.\r\n    - [x] Using `.tmp.z` when `.tmp.a`…`.tmp.x` already exist.\r\n    - [x] Leaving temporary file when there was error in target file.\r\n    - [x] Failing when `.tmp.a`…`.tmp.z` files exist.\r\n    - [x] Positive fixnum timestamp being read correctly.\r\n    - [x] Uint8 timestamp being read correctly.\r\n    - [x] Uint16 timestamp being read correctly.\r\n    - [x] Uint32 timestamp being read correctly.\r\n    - [x] Uint64 timestamp being read correctly.\r\n\r\n- [x] Documentation update.\r\n- [x] Converting some data from &encoding when writing.\r\n- [x] Converting some data to &encoding when reading.\r\n- [x] Safer variant of dumping viminfo (dump to temporary file then rename).\r\n- [x] Removing old viminfo code (currently masked with `#if 0` in a ShaDa file for \r\n   reference).\r\n- [x] Fixing linter errors.\r\n- [ ] Fixing existing failing tests."},"comment":{"url":"https://api.github.com/repos/neovim/neovim/issues/comments/131598888","html_url":"https://github.com/neovim/neovim/pull/2506#issuecomment-131598888","issue_url":"https://api.github.com/repos/neovim/neovim/issues/2506","id":131598888,"user":{"login":"ZyX-I","id":322097,"avatar_url":"https://avatars.githubusercontent.com/u/322097?v=3","gravatar_id":"","url":"https://api.github.com/users/ZyX-I","html_url":"https://github.com/ZyX-I","followers_url":"https://api.github.com/users/ZyX-I/followers","following_url":"https://api.github.com/users/ZyX-I/following{/other_user}","gists_url":"https://api.github.com/users/ZyX-I/gists{/gist_id}","starred_url":"https://api.github.com/users/ZyX-I/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ZyX-I/subscriptions","organizations_url":"https://api.github.com/users/ZyX-I/orgs","repos_url":"https://api.github.com/users/ZyX-I/repos","events_url":"https://api.github.com/users/ZyX-I/events{/privacy}","received_events_url":"https://api.github.com/users/ZyX-I/received_events","type":"User","site_admin":false},"created_at":"2015-08-16T18:27:03Z","updated_at":"2015-08-16T18:27:03Z","body":"@jszakmeister I have added *many* tests. One of them uses a number of `sleep`s and cannot take less then ten seconds. Only added tests on my system take 25 seconds. All tests take 49 seconds, meaning that my rather extensive test suite doubled the time for functional tests."}}