{"action":"created","comment":{"url":"https://api.github.com/repos/scalableminds/webknossos/pulls/comments/205086731","pull_request_review_id":140282220,"id":205086731,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwNTA4NjczMQ==","diff_hunk":"@@ -3,40 +3,102 @@ import mockRequire from \"mock-require\";\n import { setupOxalis, TIMESTAMP } from \"test/helpers/apiHelpers\";\n import update from \"immutability-helper\";\n import Store from \"oxalis/store\";\n-import { wkReadyAction } from \"oxalis/model/actions/actions\";\n+import { restartSagaAction, wkReadyAction } from \"oxalis/model/actions/actions\";\n import { createSaveQueueFromUpdateActions } from \"test/helpers/saveHelpers\";\n import { generateTreeName } from \"oxalis/model/reducers/skeletontracing_reducer_helpers\";\n import { getStats } from \"oxalis/model/accessors/skeletontracing_accessor\";\n import Utils from \"libs/utils\";\n+import generateDummyTrees from \"oxalis/model/helpers/generate_dummy_trees\";\n+import { maximumActionCountPerBatch } from \"oxalis/model/sagas/save_saga\";\n \n const UpdateActions = mockRequire.reRequire(\"oxalis/model/sagas/update_actions\");\n+const { addTreesAndGroupsAction, deleteNodeAction } = mockRequire.reRequire(\n+  \"oxalis/model/actions/skeletontracing_actions\",\n+);\n+const { createTreeMapFromTreeArray } = mockRequire.reRequire(\n+  \"oxalis/model/reducers/skeletontracing_reducer_helpers\",\n+);\n+const { discardSaveQueueAction } = mockRequire.reRequire(\"oxalis/model/actions/save_actions\");\n \n test.beforeEach(async t => {\n   // Setup oxalis, this will execute model.fetch(...) and initialize the store with the tracing, etc.\n+  Store.dispatch(restartSagaAction());\n+  Store.dispatch(discardSaveQueueAction());\n   await setupOxalis(t, \"task\");\n+\n   // Dispatch the wkReadyAction, so the sagas are started\n   Store.dispatch(wkReadyAction());\n });\n \n-test(\"watchTreeNames saga should rename empty trees in tasks and these updates should be persisted\", t => {\n-  const state = Store.getState();\n-  const treeWithEmptyName = state.tracing.trees[1];\n-  const treeWithCorrectName = update(treeWithEmptyName, {\n-    name: { $set: generateTreeName(state, treeWithEmptyName.timestamp, treeWithEmptyName.treeId) },\n-  });\n+test.serial(\n+  \"watchTreeNames saga should rename empty trees in tasks and these updates should be persisted\",\n+  t => {\n+    const state = Store.getState();\n+    const treeWithEmptyName = state.tracing.trees[1];\n+    const treeWithCorrectName = update(treeWithEmptyName, {\n+      name: {\n+        $set: generateTreeName(state, treeWithEmptyName.timestamp, treeWithEmptyName.treeId),\n+      },\n+    });\n \n-  const expectedSaveQueue = createSaveQueueFromUpdateActions(\n-    [\n+    const expectedSaveQueue = createSaveQueueFromUpdateActions(\n       [\n-        UpdateActions.updateTree(treeWithCorrectName),\n-        UpdateActions.updateSkeletonTracing(Store.getState().tracing, [1, 2, 3], [0, 0, 0], 2),\n+        [\n+          UpdateActions.updateTree(treeWithCorrectName),\n+          UpdateActions.updateSkeletonTracing(Store.getState().tracing, [1, 2, 3], [0, 0, 0], 2),\n+        ],\n       ],\n-    ],\n-    TIMESTAMP,\n-    Utils.toNullable(getStats(state.tracing)),\n-  );\n-\n-  // Once the updateTree update action is in the save queue, we're good.\n-  // This means the setTreeName action was dispatched, the diffing ran, and the change will be persisted.\n-  t.deepEqual(expectedSaveQueue, state.save.queue);\n+      TIMESTAMP,\n+      Utils.toNullable(getStats(state.tracing)),\n+    );\n+\n+    // Once the updateTree update action is in the save queue, we're good.\n+    // This means the setTreeName action was dispatched, the diffing ran, and the change will be persisted.\n+    t.deepEqual(expectedSaveQueue, state.save.queue);\n+  },\n+);\n+\n+test.serial(\"Save actions should not be chunked below the chunk limit (1/3)\", t => {\n+  Store.dispatch(discardSaveQueueAction());\n+  t.deepEqual(Store.getState().save.queue, []);\n+\n+  const trees = generateDummyTrees(1000, 1);\n+  Store.dispatch(addTreesAndGroupsAction(createTreeMapFromTreeArray(trees), []));\n+  // t.true(true);\n+  t.is(Store.getState().save.queue.length, 1);\n+  t.true(Store.getState().save.queue[0].actions.length < maximumActionCountPerBatch);\n+});\n+\n+test.serial(\"Save actions should be chunked above the chunk limit (2/3)\", t => {\n+  Store.dispatch(discardSaveQueueAction());\n+  t.deepEqual(Store.getState().save.queue, []);\n+\n+  const trees = generateDummyTrees(5000, 1);\n+  Store.dispatch(addTreesAndGroupsAction(createTreeMapFromTreeArray(trees), []));\n+\n+  const state = Store.getState();\n+\n+  t.true(state.save.queue.length > 1);\n+  t.is(state.save.queue[0].actions.length, maximumActionCountPerBatch);\n+});\n+\n+test.serial(\"Save actions should be chunked after compacting (2/3)\", t => {\n+  const nodeCount = 20000;","path":"app/assets/javascripts/test/sagas/saga_integration.spec.js","position":103,"original_position":103,"commit_id":"cc18d3b66301ef469fcbae2676707bc202de90f0","original_commit_id":"cc18d3b66301ef469fcbae2676707bc202de90f0","user":{"login":"daniel-wer","id":1702075,"node_id":"MDQ6VXNlcjE3MDIwNzU=","avatar_url":"https://avatars3.githubusercontent.com/u/1702075?v=4","gravatar_id":"","url":"https://api.github.com/users/daniel-wer","html_url":"https://github.com/daniel-wer","followers_url":"https://api.github.com/users/daniel-wer/followers","following_url":"https://api.github.com/users/daniel-wer/following{/other_user}","gists_url":"https://api.github.com/users/daniel-wer/gists{/gist_id}","starred_url":"https://api.github.com/users/daniel-wer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/daniel-wer/subscriptions","organizations_url":"https://api.github.com/users/daniel-wer/orgs","repos_url":"https://api.github.com/users/daniel-wer/repos","events_url":"https://api.github.com/users/daniel-wer/events{/privacy}","received_events_url":"https://api.github.com/users/daniel-wer/received_events","type":"User","site_admin":false},"body":"Nice, I was wondering what that parameter was, before :D","created_at":"2018-07-25T12:21:11Z","updated_at":"2018-07-25T12:55:15Z","html_url":"https://github.com/scalableminds/webknossos/pull/2947#discussion_r205086731","pull_request_url":"https://api.github.com/repos/scalableminds/webknossos/pulls/2947","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/scalableminds/webknossos/pulls/comments/205086731"},"html":{"href":"https://github.com/scalableminds/webknossos/pull/2947#discussion_r205086731"},"pull_request":{"href":"https://api.github.com/repos/scalableminds/webknossos/pulls/2947"}}},"pull_request":{"url":"https://api.github.com/repos/scalableminds/webknossos/pulls/2947","id":203165585,"node_id":"MDExOlB1bGxSZXF1ZXN0MjAzMTY1NTg1","html_url":"https://github.com/scalableminds/webknossos/pull/2947","diff_url":"https://github.com/scalableminds/webknossos/pull/2947.diff","patch_url":"https://github.com/scalableminds/webknossos/pull/2947.patch","issue_url":"https://api.github.com/repos/scalableminds/webknossos/issues/2947","number":2947,"state":"open","locked":false,"title":"Send save actions in chunks to server","user":{"login":"philippotto","id":2486553,"node_id":"MDQ6VXNlcjI0ODY1NTM=","avatar_url":"https://avatars3.githubusercontent.com/u/2486553?v=4","gravatar_id":"","url":"https://api.github.com/users/philippotto","html_url":"https://github.com/philippotto","followers_url":"https://api.github.com/users/philippotto/followers","following_url":"https://api.github.com/users/philippotto/following{/other_user}","gists_url":"https://api.github.com/users/philippotto/gists{/gist_id}","starred_url":"https://api.github.com/users/philippotto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/philippotto/subscriptions","organizations_url":"https://api.github.com/users/philippotto/orgs","repos_url":"https://api.github.com/users/philippotto/repos","events_url":"https://api.github.com/users/philippotto/events{/privacy}","received_events_url":"https://api.github.com/users/philippotto/received_events","type":"User","site_admin":false},"body":"### URL of deployed dev instance (used for testing):\r\n- https://chunksaveactions.webknossos.xyz\r\n\r\n### Steps to test:\r\n- test saving-related actions (skeleton vs volume)\r\n- provoke large update actions (e.g., upload an NML with 100 000 tracings)\r\n- when saving, the save button should show a progress indicator\r\n\r\n### Issues:\r\n- contributes to #2929 \r\n- fixes #2937\r\n\r\n------\r\n- [ ] Updated [changelog](../blob/master/CHANGELOG.md#unreleased)\r\n- [x] Ready for review\r\n","created_at":"2018-07-23T09:51:48Z","updated_at":"2018-07-25T12:55:15Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b02758d361aa7dd29a19d500fd4b3457b740f530","assignee":{"login":"philippotto","id":2486553,"node_id":"MDQ6VXNlcjI0ODY1NTM=","avatar_url":"https://avatars3.githubusercontent.com/u/2486553?v=4","gravatar_id":"","url":"https://api.github.com/users/philippotto","html_url":"https://github.com/philippotto","followers_url":"https://api.github.com/users/philippotto/followers","following_url":"https://api.github.com/users/philippotto/following{/other_user}","gists_url":"https://api.github.com/users/philippotto/gists{/gist_id}","starred_url":"https://api.github.com/users/philippotto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/philippotto/subscriptions","organizations_url":"https://api.github.com/users/philippotto/orgs","repos_url":"https://api.github.com/users/philippotto/repos","events_url":"https://api.github.com/users/philippotto/events{/privacy}","received_events_url":"https://api.github.com/users/philippotto/received_events","type":"User","site_admin":false},"assignees":[{"login":"philippotto","id":2486553,"node_id":"MDQ6VXNlcjI0ODY1NTM=","avatar_url":"https://avatars3.githubusercontent.com/u/2486553?v=4","gravatar_id":"","url":"https://api.github.com/users/philippotto","html_url":"https://github.com/philippotto","followers_url":"https://api.github.com/users/philippotto/followers","following_url":"https://api.github.com/users/philippotto/following{/other_user}","gists_url":"https://api.github.com/users/philippotto/gists{/gist_id}","starred_url":"https://api.github.com/users/philippotto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/philippotto/subscriptions","organizations_url":"https://api.github.com/users/philippotto/orgs","repos_url":"https://api.github.com/users/philippotto/repos","events_url":"https://api.github.com/users/philippotto/events{/privacy}","received_events_url":"https://api.github.com/users/philippotto/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":5005369,"node_id":"MDU6TGFiZWw1MDA1MzY5","url":"https://api.github.com/repos/scalableminds/webknossos/labels/enhancement","name":"enhancement","color":"84b6eb","default":true},{"id":60646770,"node_id":"MDU6TGFiZWw2MDY0Njc3MA==","url":"https://api.github.com/repos/scalableminds/webknossos/labels/frontend","name":"frontend","color":"207de5","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/scalableminds/webknossos/pulls/2947/commits","review_comments_url":"https://api.github.com/repos/scalableminds/webknossos/pulls/2947/comments","review_comment_url":"https://api.github.com/repos/scalableminds/webknossos/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scalableminds/webknossos/issues/2947/comments","statuses_url":"https://api.github.com/repos/scalableminds/webknossos/statuses/cc18d3b66301ef469fcbae2676707bc202de90f0","head":{"label":"scalableminds:chunk-save-actions","ref":"chunk-save-actions","sha":"cc18d3b66301ef469fcbae2676707bc202de90f0","user":{"login":"scalableminds","id":1648557,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2NDg1NTc=","avatar_url":"https://avatars1.githubusercontent.com/u/1648557?v=4","gravatar_id":"","url":"https://api.github.com/users/scalableminds","html_url":"https://github.com/scalableminds","followers_url":"https://api.github.com/users/scalableminds/followers","following_url":"https://api.github.com/users/scalableminds/following{/other_user}","gists_url":"https://api.github.com/users/scalableminds/gists{/gist_id}","starred_url":"https://api.github.com/users/scalableminds/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scalableminds/subscriptions","organizations_url":"https://api.github.com/users/scalableminds/orgs","repos_url":"https://api.github.com/users/scalableminds/repos","events_url":"https://api.github.com/users/scalableminds/events{/privacy}","received_events_url":"https://api.github.com/users/scalableminds/received_events","type":"Organization","site_admin":false},"repo":{"id":4326197,"node_id":"MDEwOlJlcG9zaXRvcnk0MzI2MTk3","name":"webknossos","full_name":"scalableminds/webknossos","owner":{"login":"scalableminds","id":1648557,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2NDg1NTc=","avatar_url":"https://avatars1.githubusercontent.com/u/1648557?v=4","gravatar_id":"","url":"https://api.github.com/users/scalableminds","html_url":"https://github.com/scalableminds","followers_url":"https://api.github.com/users/scalableminds/followers","following_url":"https://api.github.com/users/scalableminds/following{/other_user}","gists_url":"https://api.github.com/users/scalableminds/gists{/gist_id}","starred_url":"https://api.github.com/users/scalableminds/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scalableminds/subscriptions","organizations_url":"https://api.github.com/users/scalableminds/orgs","repos_url":"https://api.github.com/users/scalableminds/repos","events_url":"https://api.github.com/users/scalableminds/events{/privacy}","received_events_url":"https://api.github.com/users/scalableminds/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scalableminds/webknossos","description":"A fully cloud- and browser-based 3D annotation tool for distributed large-scale data analysis in light- and electron-microscopy based Connectomics","fork":false,"url":"https://api.github.com/repos/scalableminds/webknossos","forks_url":"https://api.github.com/repos/scalableminds/webknossos/forks","keys_url":"https://api.github.com/repos/scalableminds/webknossos/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scalableminds/webknossos/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scalableminds/webknossos/teams","hooks_url":"https://api.github.com/repos/scalableminds/webknossos/hooks","issue_events_url":"https://api.github.com/repos/scalableminds/webknossos/issues/events{/number}","events_url":"https://api.github.com/repos/scalableminds/webknossos/events","assignees_url":"https://api.github.com/repos/scalableminds/webknossos/assignees{/user}","branches_url":"https://api.github.com/repos/scalableminds/webknossos/branches{/branch}","tags_url":"https://api.github.com/repos/scalableminds/webknossos/tags","blobs_url":"https://api.github.com/repos/scalableminds/webknossos/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scalableminds/webknossos/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scalableminds/webknossos/git/refs{/sha}","trees_url":"https://api.github.com/repos/scalableminds/webknossos/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scalableminds/webknossos/statuses/{sha}","languages_url":"https://api.github.com/repos/scalableminds/webknossos/languages","stargazers_url":"https://api.github.com/repos/scalableminds/webknossos/stargazers","contributors_url":"https://api.github.com/repos/scalableminds/webknossos/contributors","subscribers_url":"https://api.github.com/repos/scalableminds/webknossos/subscribers","subscription_url":"https://api.github.com/repos/scalableminds/webknossos/subscription","commits_url":"https://api.github.com/repos/scalableminds/webknossos/commits{/sha}","git_commits_url":"https://api.github.com/repos/scalableminds/webknossos/git/commits{/sha}","comments_url":"https://api.github.com/repos/scalableminds/webknossos/comments{/number}","issue_comment_url":"https://api.github.com/repos/scalableminds/webknossos/issues/comments{/number}","contents_url":"https://api.github.com/repos/scalableminds/webknossos/contents/{+path}","compare_url":"https://api.github.com/repos/scalableminds/webknossos/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scalableminds/webknossos/merges","archive_url":"https://api.github.com/repos/scalableminds/webknossos/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scalableminds/webknossos/downloads","issues_url":"https://api.github.com/repos/scalableminds/webknossos/issues{/number}","pulls_url":"https://api.github.com/repos/scalableminds/webknossos/pulls{/number}","milestones_url":"https://api.github.com/repos/scalableminds/webknossos/milestones{/number}","notifications_url":"https://api.github.com/repos/scalableminds/webknossos/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scalableminds/webknossos/labels{/name}","releases_url":"https://api.github.com/repos/scalableminds/webknossos/releases{/id}","deployments_url":"https://api.github.com/repos/scalableminds/webknossos/deployments","created_at":"2012-05-14T16:26:17Z","updated_at":"2018-07-25T12:23:01Z","pushed_at":"2018-07-25T12:54:04Z","git_url":"git://github.com/scalableminds/webknossos.git","ssh_url":"git@github.com:scalableminds/webknossos.git","clone_url":"https://github.com/scalableminds/webknossos.git","svn_url":"https://github.com/scalableminds/webknossos","homepage":"https://webknossos.org/","size":101839,"stargazers_count":21,"watchers_count":21,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"archived":false,"open_issues_count":96,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0","node_id":"MDc6TGljZW5zZTE="},"forks":5,"open_issues":96,"watchers":21,"default_branch":"master"}},"base":{"label":"scalableminds:clean-up-merge-modal","ref":"clean-up-merge-modal","sha":"758a4d9323b01cee8b76ae388ef0cc8a44693d76","user":{"login":"scalableminds","id":1648557,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2NDg1NTc=","avatar_url":"https://avatars1.githubusercontent.com/u/1648557?v=4","gravatar_id":"","url":"https://api.github.com/users/scalableminds","html_url":"https://github.com/scalableminds","followers_url":"https://api.github.com/users/scalableminds/followers","following_url":"https://api.github.com/users/scalableminds/following{/other_user}","gists_url":"https://api.github.com/users/scalableminds/gists{/gist_id}","starred_url":"https://api.github.com/users/scalableminds/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scalableminds/subscriptions","organizations_url":"https://api.github.com/users/scalableminds/orgs","repos_url":"https://api.github.com/users/scalableminds/repos","events_url":"https://api.github.com/users/scalableminds/events{/privacy}","received_events_url":"https://api.github.com/users/scalableminds/received_events","type":"Organization","site_admin":false},"repo":{"id":4326197,"node_id":"MDEwOlJlcG9zaXRvcnk0MzI2MTk3","name":"webknossos","full_name":"scalableminds/webknossos","owner":{"login":"scalableminds","id":1648557,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE2NDg1NTc=","avatar_url":"https://avatars1.githubusercontent.com/u/1648557?v=4","gravatar_id":"","url":"https://api.github.com/users/scalableminds","html_url":"https://github.com/scalableminds","followers_url":"https://api.github.com/users/scalableminds/followers","following_url":"https://api.github.com/users/scalableminds/following{/other_user}","gists_url":"https://api.github.com/users/scalableminds/gists{/gist_id}","starred_url":"https://api.github.com/users/scalableminds/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scalableminds/subscriptions","organizations_url":"https://api.github.com/users/scalableminds/orgs","repos_url":"https://api.github.com/users/scalableminds/repos","events_url":"https://api.github.com/users/scalableminds/events{/privacy}","received_events_url":"https://api.github.com/users/scalableminds/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scalableminds/webknossos","description":"A fully cloud- and browser-based 3D annotation tool for distributed large-scale data analysis in light- and electron-microscopy based Connectomics","fork":false,"url":"https://api.github.com/repos/scalableminds/webknossos","forks_url":"https://api.github.com/repos/scalableminds/webknossos/forks","keys_url":"https://api.github.com/repos/scalableminds/webknossos/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scalableminds/webknossos/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scalableminds/webknossos/teams","hooks_url":"https://api.github.com/repos/scalableminds/webknossos/hooks","issue_events_url":"https://api.github.com/repos/scalableminds/webknossos/issues/events{/number}","events_url":"https://api.github.com/repos/scalableminds/webknossos/events","assignees_url":"https://api.github.com/repos/scalableminds/webknossos/assignees{/user}","branches_url":"https://api.github.com/repos/scalableminds/webknossos/branches{/branch}","tags_url":"https://api.github.com/repos/scalableminds/webknossos/tags","blobs_url":"https://api.github.com/repos/scalableminds/webknossos/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scalableminds/webknossos/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scalableminds/webknossos/git/refs{/sha}","trees_url":"https://api.github.com/repos/scalableminds/webknossos/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scalableminds/webknossos/statuses/{sha}","languages_url":"https://api.github.com/repos/scalableminds/webknossos/languages","stargazers_url":"https://api.github.com/repos/scalableminds/webknossos/stargazers","contributors_url":"https://api.github.com/repos/scalableminds/webknossos/contributors","subscribers_url":"https://api.github.com/repos/scalableminds/webknossos/subscribers","subscription_url":"https://api.github.com/repos/scalableminds/webknossos/subscription","commits_url":"https://api.github.com/repos/scalableminds/webknossos/commits{/sha}","git_commits_url":"https://api.github.com/repos/scalableminds/webknossos/git/commits{/sha}","comments_url":"https://api.github.com/repos/scalableminds/webknossos/comments{/number}","issue_comment_url":"https://api.github.com/repos/scalableminds/webknossos/issues/comments{/number}","contents_url":"https://api.github.com/repos/scalableminds/webknossos/contents/{+path}","compare_url":"https://api.github.com/repos/scalableminds/webknossos/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scalableminds/webknossos/merges","archive_url":"https://api.github.com/repos/scalableminds/webknossos/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scalableminds/webknossos/downloads","issues_url":"https://api.github.com/repos/scalableminds/webknossos/issues{/number}","pulls_url":"https://api.github.com/repos/scalableminds/webknossos/pulls{/number}","milestones_url":"https://api.github.com/repos/scalableminds/webknossos/milestones{/number}","notifications_url":"https://api.github.com/repos/scalableminds/webknossos/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scalableminds/webknossos/labels{/name}","releases_url":"https://api.github.com/repos/scalableminds/webknossos/releases{/id}","deployments_url":"https://api.github.com/repos/scalableminds/webknossos/deployments","created_at":"2012-05-14T16:26:17Z","updated_at":"2018-07-25T12:23:01Z","pushed_at":"2018-07-25T12:54:04Z","git_url":"git://github.com/scalableminds/webknossos.git","ssh_url":"git@github.com:scalableminds/webknossos.git","clone_url":"https://github.com/scalableminds/webknossos.git","svn_url":"https://github.com/scalableminds/webknossos","homepage":"https://webknossos.org/","size":101839,"stargazers_count":21,"watchers_count":21,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"archived":false,"open_issues_count":96,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0","node_id":"MDc6TGljZW5zZTE="},"forks":5,"open_issues":96,"watchers":21,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scalableminds/webknossos/pulls/2947"},"html":{"href":"https://github.com/scalableminds/webknossos/pull/2947"},"issue":{"href":"https://api.github.com/repos/scalableminds/webknossos/issues/2947"},"comments":{"href":"https://api.github.com/repos/scalableminds/webknossos/issues/2947/comments"},"review_comments":{"href":"https://api.github.com/repos/scalableminds/webknossos/pulls/2947/comments"},"review_comment":{"href":"https://api.github.com/repos/scalableminds/webknossos/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scalableminds/webknossos/pulls/2947/commits"},"statuses":{"href":"https://api.github.com/repos/scalableminds/webknossos/statuses/cc18d3b66301ef469fcbae2676707bc202de90f0"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"daniel-wer"}}