{"action":"created","comment":{"url":"https://api.github.com/repos/attic-labs/noms/pulls/comments/79520430","id":79520430,"diff_hunk":"@@ -0,0 +1,301 @@\n+// Copyright 2016 Attic Labs, Inc. All rights reserved.\n+// Licensed under the Apache License, version 2.0:\n+// http://www.apache.org/licenses/LICENSE-2.0\n+\n+// GraphBuilder allows non-RAM-bound construction of a graph of nested Maps whose\n+// leaf collections can be Lists, Sets, or Maps that contain any type of NOMS\n+// Values.\n+//\n+// Graphs are built by calling one of the GraphBuilder functions:\n+//     MapSet(graphKeys, key, value)\n+//     SetInsert(graphKeys, value)\n+//     ListAppend(graphKeys, value)\n+//\n+// GraphBuilder uses an opCache to store graph operations in leveldb and to be\n+// able to read them out later in a way which ensures a total ordering of all\n+// the nodes at each level of the graph. (See opcache.go for more info on how\n+// that is done)\n+//\n+// GraphBuilder.Build() does the work of assembling the graph. Build() gets an\n+// iterator for this graph from the opCache and uses it to iterate over all the\n+// operations that have been stored for this graph. opCache ensures that the\n+// operations are returned in optimal sorted order so that sequenceChunker can\n+// most efficiently assemble the graph. Build() will ensure that there is a Map\n+// object for each key in |graphKeys|. Any node that falls in the middle of the\n+// graph must be a Map, although, intermediate apps may have any element as keys\n+// as long as the path formed by the graphKeys doesn't conflict.\n+//\n+// MapSet(), SetInsert(), and ListAppend() are threadsafe meaning they can safely\n+// be called from different go routines. However, the semantics of ListAppend()\n+// are such that the order of the list will be determined by which thread() calls\n+// ListAppend first (this function call may be modified later to allow specification\n+// of index or order).\n+//\n+// Build() should only be called once, after all the operations for the graph","path":"go/types/graph_builder.go","position":34,"original_position":34,"commit_id":"df2b16e27bc153ae063c665fb28c5a99c33f8fc7","original_commit_id":"77360383e195651328a72b119ef50cdf918e26df","user":{"login":"willhite","id":487362,"avatar_url":"https://avatars.githubusercontent.com/u/487362?v=3","gravatar_id":"","url":"https://api.github.com/users/willhite","html_url":"https://github.com/willhite","followers_url":"https://api.github.com/users/willhite/followers","following_url":"https://api.github.com/users/willhite/following{/other_user}","gists_url":"https://api.github.com/users/willhite/gists{/gist_id}","starred_url":"https://api.github.com/users/willhite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/willhite/subscriptions","organizations_url":"https://api.github.com/users/willhite/orgs","repos_url":"https://api.github.com/users/willhite/repos","events_url":"https://api.github.com/users/willhite/events{/privacy}","received_events_url":"https://api.github.com/users/willhite/received_events","type":"User","site_admin":false},"body":"Done.","created_at":"2016-09-20T01:02:42Z","updated_at":"2016-09-20T01:02:42Z","html_url":"https://github.com/attic-labs/noms/pull/2548#discussion_r79520430","pull_request_url":"https://api.github.com/repos/attic-labs/noms/pulls/2548","_links":{"self":{"href":"https://api.github.com/repos/attic-labs/noms/pulls/comments/79520430"},"html":{"href":"https://github.com/attic-labs/noms/pull/2548#discussion_r79520430"},"pull_request":{"href":"https://api.github.com/repos/attic-labs/noms/pulls/2548"}}},"pull_request":{"url":"https://api.github.com/repos/attic-labs/noms/pulls/2548","id":84957772,"html_url":"https://github.com/attic-labs/noms/pull/2548","diff_url":"https://github.com/attic-labs/noms/pull/2548.diff","patch_url":"https://github.com/attic-labs/noms/pull/2548.patch","issue_url":"https://api.github.com/repos/attic-labs/noms/issues/2548","number":2548,"state":"open","locked":false,"title":"Implement GraphBuilder","user":{"login":"willhite","id":487362,"avatar_url":"https://avatars.githubusercontent.com/u/487362?v=3","gravatar_id":"","url":"https://api.github.com/users/willhite","html_url":"https://github.com/willhite","followers_url":"https://api.github.com/users/willhite/followers","following_url":"https://api.github.com/users/willhite/following{/other_user}","gists_url":"https://api.github.com/users/willhite/gists{/gist_id}","starred_url":"https://api.github.com/users/willhite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/willhite/subscriptions","organizations_url":"https://api.github.com/users/willhite/orgs","repos_url":"https://api.github.com/users/willhite/repos","events_url":"https://api.github.com/users/willhite/events{/privacy}","received_events_url":"https://api.github.com/users/willhite/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-09-12T22:42:25Z","updated_at":"2016-09-20T01:02:42Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f4fd2bb1133eb3a938e6afa3cba93f089a29eaf6","assignee":{"login":"rafael-atticlabs","id":12848669,"avatar_url":"https://avatars.githubusercontent.com/u/12848669?v=3","gravatar_id":"","url":"https://api.github.com/users/rafael-atticlabs","html_url":"https://github.com/rafael-atticlabs","followers_url":"https://api.github.com/users/rafael-atticlabs/followers","following_url":"https://api.github.com/users/rafael-atticlabs/following{/other_user}","gists_url":"https://api.github.com/users/rafael-atticlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/rafael-atticlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rafael-atticlabs/subscriptions","organizations_url":"https://api.github.com/users/rafael-atticlabs/orgs","repos_url":"https://api.github.com/users/rafael-atticlabs/repos","events_url":"https://api.github.com/users/rafael-atticlabs/events{/privacy}","received_events_url":"https://api.github.com/users/rafael-atticlabs/received_events","type":"User","site_admin":false},"assignees":[{"login":"rafael-atticlabs","id":12848669,"avatar_url":"https://avatars.githubusercontent.com/u/12848669?v=3","gravatar_id":"","url":"https://api.github.com/users/rafael-atticlabs","html_url":"https://github.com/rafael-atticlabs","followers_url":"https://api.github.com/users/rafael-atticlabs/followers","following_url":"https://api.github.com/users/rafael-atticlabs/following{/other_user}","gists_url":"https://api.github.com/users/rafael-atticlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/rafael-atticlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rafael-atticlabs/subscriptions","organizations_url":"https://api.github.com/users/rafael-atticlabs/orgs","repos_url":"https://api.github.com/users/rafael-atticlabs/repos","events_url":"https://api.github.com/users/rafael-atticlabs/events{/privacy}","received_events_url":"https://api.github.com/users/rafael-atticlabs/received_events","type":"User","site_admin":false},{"login":"cmasone-attic","id":13224090,"avatar_url":"https://avatars.githubusercontent.com/u/13224090?v=3","gravatar_id":"","url":"https://api.github.com/users/cmasone-attic","html_url":"https://github.com/cmasone-attic","followers_url":"https://api.github.com/users/cmasone-attic/followers","following_url":"https://api.github.com/users/cmasone-attic/following{/other_user}","gists_url":"https://api.github.com/users/cmasone-attic/gists{/gist_id}","starred_url":"https://api.github.com/users/cmasone-attic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cmasone-attic/subscriptions","organizations_url":"https://api.github.com/users/cmasone-attic/orgs","repos_url":"https://api.github.com/users/cmasone-attic/repos","events_url":"https://api.github.com/users/cmasone-attic/events{/privacy}","received_events_url":"https://api.github.com/users/cmasone-attic/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/attic-labs/noms/pulls/2548/commits","review_comments_url":"https://api.github.com/repos/attic-labs/noms/pulls/2548/comments","review_comment_url":"https://api.github.com/repos/attic-labs/noms/pulls/comments{/number}","comments_url":"https://api.github.com/repos/attic-labs/noms/issues/2548/comments","statuses_url":"https://api.github.com/repos/attic-labs/noms/statuses/df2b16e27bc153ae063c665fb28c5a99c33f8fc7","head":{"label":"willhite:graph-builder","ref":"graph-builder","sha":"df2b16e27bc153ae063c665fb28c5a99c33f8fc7","user":{"login":"willhite","id":487362,"avatar_url":"https://avatars.githubusercontent.com/u/487362?v=3","gravatar_id":"","url":"https://api.github.com/users/willhite","html_url":"https://github.com/willhite","followers_url":"https://api.github.com/users/willhite/followers","following_url":"https://api.github.com/users/willhite/following{/other_user}","gists_url":"https://api.github.com/users/willhite/gists{/gist_id}","starred_url":"https://api.github.com/users/willhite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/willhite/subscriptions","organizations_url":"https://api.github.com/users/willhite/orgs","repos_url":"https://api.github.com/users/willhite/repos","events_url":"https://api.github.com/users/willhite/events{/privacy}","received_events_url":"https://api.github.com/users/willhite/received_events","type":"User","site_admin":false},"repo":{"id":64777393,"name":"noms","full_name":"willhite/noms","owner":{"login":"willhite","id":487362,"avatar_url":"https://avatars.githubusercontent.com/u/487362?v=3","gravatar_id":"","url":"https://api.github.com/users/willhite","html_url":"https://github.com/willhite","followers_url":"https://api.github.com/users/willhite/followers","following_url":"https://api.github.com/users/willhite/following{/other_user}","gists_url":"https://api.github.com/users/willhite/gists{/gist_id}","starred_url":"https://api.github.com/users/willhite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/willhite/subscriptions","organizations_url":"https://api.github.com/users/willhite/orgs","repos_url":"https://api.github.com/users/willhite/repos","events_url":"https://api.github.com/users/willhite/events{/privacy}","received_events_url":"https://api.github.com/users/willhite/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/willhite/noms","description":"The versioned, forkable, syncable database","fork":true,"url":"https://api.github.com/repos/willhite/noms","forks_url":"https://api.github.com/repos/willhite/noms/forks","keys_url":"https://api.github.com/repos/willhite/noms/keys{/key_id}","collaborators_url":"https://api.github.com/repos/willhite/noms/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/willhite/noms/teams","hooks_url":"https://api.github.com/repos/willhite/noms/hooks","issue_events_url":"https://api.github.com/repos/willhite/noms/issues/events{/number}","events_url":"https://api.github.com/repos/willhite/noms/events","assignees_url":"https://api.github.com/repos/willhite/noms/assignees{/user}","branches_url":"https://api.github.com/repos/willhite/noms/branches{/branch}","tags_url":"https://api.github.com/repos/willhite/noms/tags","blobs_url":"https://api.github.com/repos/willhite/noms/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/willhite/noms/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/willhite/noms/git/refs{/sha}","trees_url":"https://api.github.com/repos/willhite/noms/git/trees{/sha}","statuses_url":"https://api.github.com/repos/willhite/noms/statuses/{sha}","languages_url":"https://api.github.com/repos/willhite/noms/languages","stargazers_url":"https://api.github.com/repos/willhite/noms/stargazers","contributors_url":"https://api.github.com/repos/willhite/noms/contributors","subscribers_url":"https://api.github.com/repos/willhite/noms/subscribers","subscription_url":"https://api.github.com/repos/willhite/noms/subscription","commits_url":"https://api.github.com/repos/willhite/noms/commits{/sha}","git_commits_url":"https://api.github.com/repos/willhite/noms/git/commits{/sha}","comments_url":"https://api.github.com/repos/willhite/noms/comments{/number}","issue_comment_url":"https://api.github.com/repos/willhite/noms/issues/comments{/number}","contents_url":"https://api.github.com/repos/willhite/noms/contents/{+path}","compare_url":"https://api.github.com/repos/willhite/noms/compare/{base}...{head}","merges_url":"https://api.github.com/repos/willhite/noms/merges","archive_url":"https://api.github.com/repos/willhite/noms/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/willhite/noms/downloads","issues_url":"https://api.github.com/repos/willhite/noms/issues{/number}","pulls_url":"https://api.github.com/repos/willhite/noms/pulls{/number}","milestones_url":"https://api.github.com/repos/willhite/noms/milestones{/number}","notifications_url":"https://api.github.com/repos/willhite/noms/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/willhite/noms/labels{/name}","releases_url":"https://api.github.com/repos/willhite/noms/releases{/id}","deployments_url":"https://api.github.com/repos/willhite/noms/deployments","created_at":"2016-08-02T17:25:18Z","updated_at":"2016-08-02T17:27:25Z","pushed_at":"2016-09-20T00:34:06Z","git_url":"git://github.com/willhite/noms.git","ssh_url":"git@github.com:willhite/noms.git","clone_url":"https://github.com/willhite/noms.git","svn_url":"https://github.com/willhite/noms","homepage":"","size":25690,"stargazers_count":0,"watchers_count":0,"language":"Go","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":"master"}},"base":{"label":"attic-labs:master","ref":"master","sha":"ee1db61bbaf1711de8ae324061f6dcfc3ccf3f9f","user":{"login":"attic-labs","id":12534679,"avatar_url":"https://avatars.githubusercontent.com/u/12534679?v=3","gravatar_id":"","url":"https://api.github.com/users/attic-labs","html_url":"https://github.com/attic-labs","followers_url":"https://api.github.com/users/attic-labs/followers","following_url":"https://api.github.com/users/attic-labs/following{/other_user}","gists_url":"https://api.github.com/users/attic-labs/gists{/gist_id}","starred_url":"https://api.github.com/users/attic-labs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/attic-labs/subscriptions","organizations_url":"https://api.github.com/users/attic-labs/orgs","repos_url":"https://api.github.com/users/attic-labs/repos","events_url":"https://api.github.com/users/attic-labs/events{/privacy}","received_events_url":"https://api.github.com/users/attic-labs/received_events","type":"Organization","site_admin":false},"repo":{"id":36778364,"name":"noms","full_name":"attic-labs/noms","owner":{"login":"attic-labs","id":12534679,"avatar_url":"https://avatars.githubusercontent.com/u/12534679?v=3","gravatar_id":"","url":"https://api.github.com/users/attic-labs","html_url":"https://github.com/attic-labs","followers_url":"https://api.github.com/users/attic-labs/followers","following_url":"https://api.github.com/users/attic-labs/following{/other_user}","gists_url":"https://api.github.com/users/attic-labs/gists{/gist_id}","starred_url":"https://api.github.com/users/attic-labs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/attic-labs/subscriptions","organizations_url":"https://api.github.com/users/attic-labs/orgs","repos_url":"https://api.github.com/users/attic-labs/repos","events_url":"https://api.github.com/users/attic-labs/events{/privacy}","received_events_url":"https://api.github.com/users/attic-labs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/attic-labs/noms","description":"The versioned, forkable, syncable database","fork":false,"url":"https://api.github.com/repos/attic-labs/noms","forks_url":"https://api.github.com/repos/attic-labs/noms/forks","keys_url":"https://api.github.com/repos/attic-labs/noms/keys{/key_id}","collaborators_url":"https://api.github.com/repos/attic-labs/noms/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/attic-labs/noms/teams","hooks_url":"https://api.github.com/repos/attic-labs/noms/hooks","issue_events_url":"https://api.github.com/repos/attic-labs/noms/issues/events{/number}","events_url":"https://api.github.com/repos/attic-labs/noms/events","assignees_url":"https://api.github.com/repos/attic-labs/noms/assignees{/user}","branches_url":"https://api.github.com/repos/attic-labs/noms/branches{/branch}","tags_url":"https://api.github.com/repos/attic-labs/noms/tags","blobs_url":"https://api.github.com/repos/attic-labs/noms/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/attic-labs/noms/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/attic-labs/noms/git/refs{/sha}","trees_url":"https://api.github.com/repos/attic-labs/noms/git/trees{/sha}","statuses_url":"https://api.github.com/repos/attic-labs/noms/statuses/{sha}","languages_url":"https://api.github.com/repos/attic-labs/noms/languages","stargazers_url":"https://api.github.com/repos/attic-labs/noms/stargazers","contributors_url":"https://api.github.com/repos/attic-labs/noms/contributors","subscribers_url":"https://api.github.com/repos/attic-labs/noms/subscribers","subscription_url":"https://api.github.com/repos/attic-labs/noms/subscription","commits_url":"https://api.github.com/repos/attic-labs/noms/commits{/sha}","git_commits_url":"https://api.github.com/repos/attic-labs/noms/git/commits{/sha}","comments_url":"https://api.github.com/repos/attic-labs/noms/comments{/number}","issue_comment_url":"https://api.github.com/repos/attic-labs/noms/issues/comments{/number}","contents_url":"https://api.github.com/repos/attic-labs/noms/contents/{+path}","compare_url":"https://api.github.com/repos/attic-labs/noms/compare/{base}...{head}","merges_url":"https://api.github.com/repos/attic-labs/noms/merges","archive_url":"https://api.github.com/repos/attic-labs/noms/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/attic-labs/noms/downloads","issues_url":"https://api.github.com/repos/attic-labs/noms/issues{/number}","pulls_url":"https://api.github.com/repos/attic-labs/noms/pulls{/number}","milestones_url":"https://api.github.com/repos/attic-labs/noms/milestones{/number}","notifications_url":"https://api.github.com/repos/attic-labs/noms/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/attic-labs/noms/labels{/name}","releases_url":"https://api.github.com/repos/attic-labs/noms/releases{/id}","deployments_url":"https://api.github.com/repos/attic-labs/noms/deployments","created_at":"2015-06-03T03:44:49Z","updated_at":"2016-09-19T21:10:03Z","pushed_at":"2016-09-20T00:47:52Z","git_url":"git://github.com/attic-labs/noms.git","ssh_url":"git@github.com:attic-labs/noms.git","clone_url":"https://github.com/attic-labs/noms.git","svn_url":"https://github.com/attic-labs/noms","homepage":"","size":29230,"stargazers_count":4265,"watchers_count":4265,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":109,"mirror_url":null,"open_issues_count":221,"forks":109,"open_issues":221,"watchers":4265,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/attic-labs/noms/pulls/2548"},"html":{"href":"https://github.com/attic-labs/noms/pull/2548"},"issue":{"href":"https://api.github.com/repos/attic-labs/noms/issues/2548"},"comments":{"href":"https://api.github.com/repos/attic-labs/noms/issues/2548/comments"},"review_comments":{"href":"https://api.github.com/repos/attic-labs/noms/pulls/2548/comments"},"review_comment":{"href":"https://api.github.com/repos/attic-labs/noms/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/attic-labs/noms/pulls/2548/commits"},"statuses":{"href":"https://api.github.com/repos/attic-labs/noms/statuses/df2b16e27bc153ae063c665fb28c5a99c33f8fc7"}}}}
{"actor":{"display_login":"willhite"}}