{"action":"created","comment":{"url":"https://api.github.com/repos/ioi-germany/cms/pulls/comments/89603130","pull_request_review_id":10147362,"id":89603130,"diff_hunk":"@@ -0,0 +1,373 @@\n+function inner_cell(t, entry)\n+{\n+    if(entry == \"download\")\n+    {\n+        return '<div class=\"download-icon\" id = \"download-' + t.code + '\" data-code = \"' + t.code + '\"></div>';\n+    }\n+    \n+    if(entry == \"keywords\")\n+    { \n+        var r = '<ul class=\"embedded\">';\n+        if(t[entry].length == 0) r += \"&mdash;\";\n+                    \n+        for(var i = 0; i < t[entry].length; ++i)\n+            r += '<li>' + t[entry][i] + '</li>';\n+        r += '</ul>';\n+        return r;\n+    }\n+    \n+    if(entry == \"uses\")\n+    {\n+        var r = '<ul class=\"embedded\">';\n+        if(t[entry].length == 0) r += \"&mdash;\";\n+                    \n+        for(var i = 0; i < t[entry].length; ++i)\n+            r += '<li>' + t[entry][i].info + '</li>';\n+        r += '</ul>';\n+        return r;\n+    }\n+    \n+    else\n+    {\n+        return t[entry]\n+    }\n+}\n+\n+function cell(t, entry)\n+{\n+    var id = \"cell-\" + t.code + \"-\" + entry;\n+\n+    if(entry == \"download\")\n+    {\n+        return '<td id = \"' + id + '\" class=\"download\">' + inner_cell(t, entry) +'</td>';\n+    }\n+\n+    else\n+    {\n+        return '<td id = \"' + id + '\">' + inner_cell(t, entry) + '</td>';\n+    }\n+}\n+\n+function inner_error_cell(t)\n+{\n+    if(\"error\" in t) return \"<b>ERROR!</b> \" + t.error;\n+    return \"\";\n+}\n+\n+function error_cell(t)\n+{\n+    var id = \"cell-\" + t.code + \"-error-msg\";\n+    return '<td id=\"' + id + '\" class=\"error-msg\">' + inner_error_cell(t) + '</td>';\n+}\n+\n+function relevant(t, c)\n+{\n+    if(\"error\" in t) return true;\n+\n+    uses_ok = true;\n+    \n+    for(var i = 0; i < t.uses.length; ++i)\n+        if(t.uses[i].timestamp > criteria.only_before)\n+            uses_ok = false;\n+\n+    return t.algorithm <= c.alg_diff.upper && t.algorithm >= c.alg_diff.lower &&\n+           t.implementation <= c.impl_diff.upper && t.implementation >= c.impl_diff.lower &&\n+           (c.show_public || !t[\"public\"]) && (c.show_private || t[\"public\"]) &&\n+           uses_ok;\n+}\n+\n+\n+var __info = {};\n+var __tasks = [];\n+var __task_dict = {};\n+var __removed = {};\n+            \n+function build_row(task_code)\n+{\n+    var t = __info[task_code];\n+    var r = \"\";\n+    \n+    r += '<tr id = \"row-' + t.code + '\">';  \n+    r += cell(t, entries[0]);\n+    r += error_cell(t);\n+    \n+    for(var j = 1; j < entries.length; ++j) \n+            r += cell(t, entries[j]);\n+    r += '</tr>';\n+    \n+    return r;\n+}\n+                 \n+function fill_table(new_tasks, updated_tasks, show_col, criteria, init)\n+{\n+    new_tasks = new_tasks.sort();\n+    \n+    if(init)\n+    {\n+        var table_body = \"\";\n+                \n+        table_body += '<tr id=\"overview-heading\">';\n+        for(var j = 0; j < entries.length; ++j)\n+            if(show_col[entries[j]])\n+                table_body += '<td id=\"overview-heading-' + entries[j] + '\" class=\"th\">' + desc[entries[j]] + '</td>'; // table-bordered doesn't work with th, so we emulate it\n+        table_body += '</tr>'; \n+        window.document.getElementById(\"overview\").innerHTML = table_body;\n+    }\n+    \n+    function make_class_removal_function(id, cl)\n+    {\n+        return function() { window.document.getElementById(id).classList.remove(cl); }\n+    }\n+    \n+    // Insert new rows (à la mergesort)\n+    var last_entry = \"overview-heading\";\n+    var old_tasks_idx = 0, new_tasks_idx = 0;\n+    \n+    while(true)\n+    {\n+        if(old_tasks_idx >= __tasks.length && new_tasks_idx >= new_tasks.length) break;\n+        \n+        if(old_tasks_idx >= __tasks.length || __tasks[old_tasks_idx] >= new_tasks[new_tasks_idx])\n+        {\n+            $(build_row(new_tasks[new_tasks_idx], show_col)).insertAfter(\"#\" + last_entry);\n+            init_download_icon(new_tasks[new_tasks_idx])\n+            last_entry = \"row-\" + new_tasks[new_tasks_idx];\n+            \n+            if(!init)\n+            {\n+                window.document.getElementById(last_entry).classList.add(\"fresh\");\n+                // We need to remove the attribute after the animation is done for other animations to be triggered -- moreover, it is semantically nicer\n+                window.document.getElementById(last_entry).addEventListener(\"animationend\", make_class_removal_function(last_entry, \"fresh\"));\n+                \n+            }\n+            \n+            ++new_tasks_idx;\n+        }\n+        \n+        else\n+        {\n+            last_entry = \"row-\" + __tasks[old_tasks_idx];\n+            ++old_tasks_idx;\n+        }\n+    }\n+    \n+    __tasks = __tasks.concat(new_tasks).sort();\n+    \n+    var num_interesting_columns = 0;\n+    for(var j = 1; j < entries.length - 1; ++j)\n+        if(show_col[entries[j]]) ++num_interesting_columns;\n+    \n+    for(var i = 0; i < __tasks.length; ++i)\n+    {\n+        // Apply row selection\n+        var id = \"row-\" + __tasks[i];\n+        var row = window.document.getElementById(id);\n+    \n+        if(relevant(__info[__tasks[i]], criteria))\n+            row.classList.remove(\"hidden\");\n+        else\n+            row.classList.add(\"hidden\");\n+            \n+        // Remove tasks that are no longer available\n+        if(__tasks[i] in __removed)\n+        {\n+            row.classList.add(\"removed\");\n+            \n+            // Indirectness needed to make currying work\n+            function make_removal_function(s)\n+            {\n+                return function() { $(\"#\" + s).remove(); }\n+            }\n+            \n+            window.setTimeout(make_removal_function(\"row-\" + __tasks[i]), 1000);\n+        }\n+        \n+        // Highlight unused tasks\n+        if(__info[__tasks[i]].old || \"error\" in __info[__tasks[i]])\n+            row.classList.remove(\"new\");\n+        else\n+            row.classList.add(\"new\");\n+            \n+        // Apply column selection        \n+        for(var j = 0; j < entries.length; ++j)\n+        {\n+            var cell = window.document.getElementById(\"cell-\" + __tasks[i] + \"-\" + entries[j]);\n+        \n+            if(show_col[entries[j]])\n+                cell.classList.remove(\"hidden\");\n+            else\n+                cell.classList.add(\"hidden\");\n+        }\n+        \n+        window.document.getElementById(\"cell-\" + __tasks[i] + \"-error-msg\").colSpan = num_interesting_columns;\n+        \n+        // Error or correct entry?\n+        var t = __info[__tasks[i]];\n+        \n+        if(\"error\" in t)\n+        {\n+            for(var j = 1; j < entries.length - 1; ++j)\n+            {\n+                var cell = window.document.getElementById(\"cell-\" + __tasks[i] + \"-\" + entries[j]);\n+                cell.classList.add(\"hidden\");\n+            }    \n+            \n+            window.document.getElementById(\"cell-\" + __tasks[i] + \"-error-msg\").classList.remove(\"no-error\");           \n+        }\n+        \n+        else\n+        {\n+            window.document.getElementById(\"cell-\" + __tasks[i] + \"-error-msg\").classList.add(\"no-error\");       \n+        }\n+    }\n+    \n+    // Update tasks that changed since last query\n+    for(var i = 0; i < updated_tasks.length; ++i)\n+    {\n+        var row = window.document.getElementById(\"row-\" + updated_tasks[i]);\n+        \n+        for(var j = 0; j < entries.length; ++j)\n+        {\n+            if(entries[j] == \"download\") continue;\n+            \n+            var cell = window.document.getElementById(\"cell-\" + updated_tasks[i] + \"-\" + entries[j]);\n+        \n+            cell.innerHTML = inner_cell(__info[updated_tasks[i]], entries[j]);\n+        \n+            /*if(show_col[entries[j]])\n+                cell.classList.remove(\"hidden\");\n+            else\n+                cell.classList.add(\"hidden\");*/\n+        }\n+        \n+        window.document.getElementById(\"cell-\" + updated_tasks[i] + \"-error-msg\").innerHTML = inner_error_cell(__info[updated_tasks[i]]);\n+        \n+        row.classList.add(\"updated\");\n+        window.setTimeout(make_class_removal_function(\"row-\" + updated_tasks[i], \"updated\"), 1000);\n+    }\n+    \n+    // Remove tasks that have been deleted from the filesystem\n+    var __tasks_backup = __tasks;\n+    __tasks = [];\n+    for(var i = 0; i < __tasks_backup.length; ++i)\n+    {\n+        if((__tasks_backup[i] in __removed))\n+            delete __task_dict[__tasks_backup[i]];\n+        else\n+            __tasks.push(__tasks_backup[i]);\n+    }\n+   \n+    for(var j = 0; j < entries.length; ++j)\n+    {\n+        var cell = window.document.getElementById(\"overview-heading-\" + entries[j]);\n+        \n+        if(show_col[entries[j]])\n+            cell.classList.remove(\"hidden\");\n+        else\n+            cell.classList.add(\"hidden\");     \n+    }\n+}\n+\n+function update(init=false, sliders=false)\n+{\n+    function on_list(l)\n+    {\n+        var response = JSON.parse(l);\n+        \n+        var available_tasks = [];\n+        var available_tasks_dict = {};\n+        for(var i = 0; i < response.length; ++i)\n+        {\n+            available_tasks.push(response[i].task);\n+            available_tasks_dict[response[i].task] = response[i].timestamp;\n+        }\n+        \n+        var new_tasks = [];\n+        var updated_tasks = [];\n+        \n+        for(var i = 0; i < available_tasks.length; ++i)\n+        {\n+            var t = available_tasks[i];\n+        \n+            if(!(t in __task_dict))\n+            {\n+                new_tasks.push(t);\n+                __task_dict[t] = available_tasks_dict[t];\n+            }\n+            \n+            if(__task_dict[t] < available_tasks_dict[t])\n+            {\n+                updated_tasks.push(t);\n+                __task_dict[t] = available_tasks_dict[t];\n+            }\n+        }\n+\n+        __removed = {};\n+        \n+        for(var i = 0; i < __tasks.length; ++i)\n+            if(!(__tasks[i] in available_tasks_dict))\n+                __removed[__tasks[i]] = true;\n+    \n+        function on_info(i)\n+        {\n+            var info = JSON.parse(i);\n+            for(var i = 0; i < new_tasks.length; ++i)\n+                __info[new_tasks[i]] = info[new_tasks[i]];\n+            for(var i = 0; i < updated_tasks.length; ++i)\n+                __info[updated_tasks[i]] = info[updated_tasks[i]];\n+            \n+            fill_table(new_tasks, updated_tasks, show_col, criteria, init);\n+            if(sliders) update_sliders(init);\n+        }\n+    \n+        $.get(\"/info\", {\"tasks\": JSON.stringify(new_tasks.concat(updated_tasks))}, on_info);","path":"cmstaskoverview/static/js/overview.js","position":323,"original_position":323,"commit_id":"5761d42caf1fbc3322fd0e19127d265422be0775","original_commit_id":"f8a85d6f61d21861565f0d811cb0770a32db0409","user":{"login":"t-lenz","id":1228467,"avatar_url":"https://avatars.githubusercontent.com/u/1228467?v=3","gravatar_id":"","url":"https://api.github.com/users/t-lenz","html_url":"https://github.com/t-lenz","followers_url":"https://api.github.com/users/t-lenz/followers","following_url":"https://api.github.com/users/t-lenz/following{/other_user}","gists_url":"https://api.github.com/users/t-lenz/gists{/gist_id}","starred_url":"https://api.github.com/users/t-lenz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/t-lenz/subscriptions","organizations_url":"https://api.github.com/users/t-lenz/orgs","repos_url":"https://api.github.com/users/t-lenz/repos","events_url":"https://api.github.com/users/t-lenz/events{/privacy}","received_events_url":"https://api.github.com/users/t-lenz/received_events","type":"User","site_admin":false},"body":"Das mit der offenen Verbindung hatte ich auch erwogen, aber das wird in Tornado völlig abstrus.","created_at":"2016-11-25T11:20:34Z","updated_at":"2016-11-25T11:20:34Z","html_url":"https://github.com/ioi-germany/cms/pull/3#discussion_r89603130","pull_request_url":"https://api.github.com/repos/ioi-germany/cms/pulls/3","_links":{"self":{"href":"https://api.github.com/repos/ioi-germany/cms/pulls/comments/89603130"},"html":{"href":"https://github.com/ioi-germany/cms/pull/3#discussion_r89603130"},"pull_request":{"href":"https://api.github.com/repos/ioi-germany/cms/pulls/3"}}},"pull_request":{"url":"https://api.github.com/repos/ioi-germany/cms/pulls/3","id":94514763,"html_url":"https://github.com/ioi-germany/cms/pull/3","diff_url":"https://github.com/ioi-germany/cms/pull/3.diff","patch_url":"https://github.com/ioi-germany/cms/pull/3.patch","issue_url":"https://api.github.com/repos/ioi-germany/cms/issues/3","number":3,"state":"open","locked":false,"title":"taskoverview","user":{"login":"t-lenz","id":1228467,"avatar_url":"https://avatars.githubusercontent.com/u/1228467?v=3","gravatar_id":"","url":"https://api.github.com/users/t-lenz","html_url":"https://github.com/t-lenz","followers_url":"https://api.github.com/users/t-lenz/followers","following_url":"https://api.github.com/users/t-lenz/following{/other_user}","gists_url":"https://api.github.com/users/t-lenz/gists{/gist_id}","starred_url":"https://api.github.com/users/t-lenz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/t-lenz/subscriptions","organizations_url":"https://api.github.com/users/t-lenz/orgs","repos_url":"https://api.github.com/users/t-lenz/repos","events_url":"https://api.github.com/users/t-lenz/events{/privacy}","received_events_url":"https://api.github.com/users/t-lenz/received_events","type":"User","site_admin":false},"body":"This introduces a script that runs a web server displaying information about available tasks (using json-files) and providing the ability to compile and download task statements.","created_at":"2016-11-20T11:23:19Z","updated_at":"2016-11-25T11:20:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c75b292d5c3a6a9d34a1bdea711c7ab004908377","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/ioi-germany/cms/pulls/3/commits","review_comments_url":"https://api.github.com/repos/ioi-germany/cms/pulls/3/comments","review_comment_url":"https://api.github.com/repos/ioi-germany/cms/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ioi-germany/cms/issues/3/comments","statuses_url":"https://api.github.com/repos/ioi-germany/cms/statuses/5761d42caf1fbc3322fd0e19127d265422be0775","head":{"label":"ioi-germany:taskoverview","ref":"taskoverview","sha":"5761d42caf1fbc3322fd0e19127d265422be0775","user":{"login":"ioi-germany","id":5230912,"avatar_url":"https://avatars.githubusercontent.com/u/5230912?v=3","gravatar_id":"","url":"https://api.github.com/users/ioi-germany","html_url":"https://github.com/ioi-germany","followers_url":"https://api.github.com/users/ioi-germany/followers","following_url":"https://api.github.com/users/ioi-germany/following{/other_user}","gists_url":"https://api.github.com/users/ioi-germany/gists{/gist_id}","starred_url":"https://api.github.com/users/ioi-germany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ioi-germany/subscriptions","organizations_url":"https://api.github.com/users/ioi-germany/orgs","repos_url":"https://api.github.com/users/ioi-germany/repos","events_url":"https://api.github.com/users/ioi-germany/events{/privacy}","received_events_url":"https://api.github.com/users/ioi-germany/received_events","type":"Organization","site_admin":false},"repo":{"id":12113915,"name":"cms","full_name":"ioi-germany/cms","owner":{"login":"ioi-germany","id":5230912,"avatar_url":"https://avatars.githubusercontent.com/u/5230912?v=3","gravatar_id":"","url":"https://api.github.com/users/ioi-germany","html_url":"https://github.com/ioi-germany","followers_url":"https://api.github.com/users/ioi-germany/followers","following_url":"https://api.github.com/users/ioi-germany/following{/other_user}","gists_url":"https://api.github.com/users/ioi-germany/gists{/gist_id}","starred_url":"https://api.github.com/users/ioi-germany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ioi-germany/subscriptions","organizations_url":"https://api.github.com/users/ioi-germany/orgs","repos_url":"https://api.github.com/users/ioi-germany/repos","events_url":"https://api.github.com/users/ioi-germany/events{/privacy}","received_events_url":"https://api.github.com/users/ioi-germany/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ioi-germany/cms","description":"Contest Management System","fork":true,"url":"https://api.github.com/repos/ioi-germany/cms","forks_url":"https://api.github.com/repos/ioi-germany/cms/forks","keys_url":"https://api.github.com/repos/ioi-germany/cms/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ioi-germany/cms/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ioi-germany/cms/teams","hooks_url":"https://api.github.com/repos/ioi-germany/cms/hooks","issue_events_url":"https://api.github.com/repos/ioi-germany/cms/issues/events{/number}","events_url":"https://api.github.com/repos/ioi-germany/cms/events","assignees_url":"https://api.github.com/repos/ioi-germany/cms/assignees{/user}","branches_url":"https://api.github.com/repos/ioi-germany/cms/branches{/branch}","tags_url":"https://api.github.com/repos/ioi-germany/cms/tags","blobs_url":"https://api.github.com/repos/ioi-germany/cms/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ioi-germany/cms/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ioi-germany/cms/git/refs{/sha}","trees_url":"https://api.github.com/repos/ioi-germany/cms/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ioi-germany/cms/statuses/{sha}","languages_url":"https://api.github.com/repos/ioi-germany/cms/languages","stargazers_url":"https://api.github.com/repos/ioi-germany/cms/stargazers","contributors_url":"https://api.github.com/repos/ioi-germany/cms/contributors","subscribers_url":"https://api.github.com/repos/ioi-germany/cms/subscribers","subscription_url":"https://api.github.com/repos/ioi-germany/cms/subscription","commits_url":"https://api.github.com/repos/ioi-germany/cms/commits{/sha}","git_commits_url":"https://api.github.com/repos/ioi-germany/cms/git/commits{/sha}","comments_url":"https://api.github.com/repos/ioi-germany/cms/comments{/number}","issue_comment_url":"https://api.github.com/repos/ioi-germany/cms/issues/comments{/number}","contents_url":"https://api.github.com/repos/ioi-germany/cms/contents/{+path}","compare_url":"https://api.github.com/repos/ioi-germany/cms/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ioi-germany/cms/merges","archive_url":"https://api.github.com/repos/ioi-germany/cms/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ioi-germany/cms/downloads","issues_url":"https://api.github.com/repos/ioi-germany/cms/issues{/number}","pulls_url":"https://api.github.com/repos/ioi-germany/cms/pulls{/number}","milestones_url":"https://api.github.com/repos/ioi-germany/cms/milestones{/number}","notifications_url":"https://api.github.com/repos/ioi-germany/cms/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ioi-germany/cms/labels{/name}","releases_url":"https://api.github.com/repos/ioi-germany/cms/releases{/id}","deployments_url":"https://api.github.com/repos/ioi-germany/cms/deployments","created_at":"2013-08-14T16:37:14Z","updated_at":"2016-10-29T09:21:06Z","pushed_at":"2016-11-24T20:49:35Z","git_url":"git://github.com/ioi-germany/cms.git","ssh_url":"git@github.com:ioi-germany/cms.git","clone_url":"https://github.com/ioi-germany/cms.git","svn_url":"https://github.com/ioi-germany/cms","homepage":"","size":12456,"stargazers_count":4,"watchers_count":4,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":4,"default_branch":"master"}},"base":{"label":"ioi-germany:master","ref":"master","sha":"cf8a171ce035fc8243cefb7abddefa3821fa69ad","user":{"login":"ioi-germany","id":5230912,"avatar_url":"https://avatars.githubusercontent.com/u/5230912?v=3","gravatar_id":"","url":"https://api.github.com/users/ioi-germany","html_url":"https://github.com/ioi-germany","followers_url":"https://api.github.com/users/ioi-germany/followers","following_url":"https://api.github.com/users/ioi-germany/following{/other_user}","gists_url":"https://api.github.com/users/ioi-germany/gists{/gist_id}","starred_url":"https://api.github.com/users/ioi-germany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ioi-germany/subscriptions","organizations_url":"https://api.github.com/users/ioi-germany/orgs","repos_url":"https://api.github.com/users/ioi-germany/repos","events_url":"https://api.github.com/users/ioi-germany/events{/privacy}","received_events_url":"https://api.github.com/users/ioi-germany/received_events","type":"Organization","site_admin":false},"repo":{"id":12113915,"name":"cms","full_name":"ioi-germany/cms","owner":{"login":"ioi-germany","id":5230912,"avatar_url":"https://avatars.githubusercontent.com/u/5230912?v=3","gravatar_id":"","url":"https://api.github.com/users/ioi-germany","html_url":"https://github.com/ioi-germany","followers_url":"https://api.github.com/users/ioi-germany/followers","following_url":"https://api.github.com/users/ioi-germany/following{/other_user}","gists_url":"https://api.github.com/users/ioi-germany/gists{/gist_id}","starred_url":"https://api.github.com/users/ioi-germany/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ioi-germany/subscriptions","organizations_url":"https://api.github.com/users/ioi-germany/orgs","repos_url":"https://api.github.com/users/ioi-germany/repos","events_url":"https://api.github.com/users/ioi-germany/events{/privacy}","received_events_url":"https://api.github.com/users/ioi-germany/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ioi-germany/cms","description":"Contest Management System","fork":true,"url":"https://api.github.com/repos/ioi-germany/cms","forks_url":"https://api.github.com/repos/ioi-germany/cms/forks","keys_url":"https://api.github.com/repos/ioi-germany/cms/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ioi-germany/cms/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ioi-germany/cms/teams","hooks_url":"https://api.github.com/repos/ioi-germany/cms/hooks","issue_events_url":"https://api.github.com/repos/ioi-germany/cms/issues/events{/number}","events_url":"https://api.github.com/repos/ioi-germany/cms/events","assignees_url":"https://api.github.com/repos/ioi-germany/cms/assignees{/user}","branches_url":"https://api.github.com/repos/ioi-germany/cms/branches{/branch}","tags_url":"https://api.github.com/repos/ioi-germany/cms/tags","blobs_url":"https://api.github.com/repos/ioi-germany/cms/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ioi-germany/cms/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ioi-germany/cms/git/refs{/sha}","trees_url":"https://api.github.com/repos/ioi-germany/cms/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ioi-germany/cms/statuses/{sha}","languages_url":"https://api.github.com/repos/ioi-germany/cms/languages","stargazers_url":"https://api.github.com/repos/ioi-germany/cms/stargazers","contributors_url":"https://api.github.com/repos/ioi-germany/cms/contributors","subscribers_url":"https://api.github.com/repos/ioi-germany/cms/subscribers","subscription_url":"https://api.github.com/repos/ioi-germany/cms/subscription","commits_url":"https://api.github.com/repos/ioi-germany/cms/commits{/sha}","git_commits_url":"https://api.github.com/repos/ioi-germany/cms/git/commits{/sha}","comments_url":"https://api.github.com/repos/ioi-germany/cms/comments{/number}","issue_comment_url":"https://api.github.com/repos/ioi-germany/cms/issues/comments{/number}","contents_url":"https://api.github.com/repos/ioi-germany/cms/contents/{+path}","compare_url":"https://api.github.com/repos/ioi-germany/cms/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ioi-germany/cms/merges","archive_url":"https://api.github.com/repos/ioi-germany/cms/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ioi-germany/cms/downloads","issues_url":"https://api.github.com/repos/ioi-germany/cms/issues{/number}","pulls_url":"https://api.github.com/repos/ioi-germany/cms/pulls{/number}","milestones_url":"https://api.github.com/repos/ioi-germany/cms/milestones{/number}","notifications_url":"https://api.github.com/repos/ioi-germany/cms/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ioi-germany/cms/labels{/name}","releases_url":"https://api.github.com/repos/ioi-germany/cms/releases{/id}","deployments_url":"https://api.github.com/repos/ioi-germany/cms/deployments","created_at":"2013-08-14T16:37:14Z","updated_at":"2016-10-29T09:21:06Z","pushed_at":"2016-11-24T20:49:35Z","git_url":"git://github.com/ioi-germany/cms.git","ssh_url":"git@github.com:ioi-germany/cms.git","clone_url":"https://github.com/ioi-germany/cms.git","svn_url":"https://github.com/ioi-germany/cms","homepage":"","size":12456,"stargazers_count":4,"watchers_count":4,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":4,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ioi-germany/cms/pulls/3"},"html":{"href":"https://github.com/ioi-germany/cms/pull/3"},"issue":{"href":"https://api.github.com/repos/ioi-germany/cms/issues/3"},"comments":{"href":"https://api.github.com/repos/ioi-germany/cms/issues/3/comments"},"review_comments":{"href":"https://api.github.com/repos/ioi-germany/cms/pulls/3/comments"},"review_comment":{"href":"https://api.github.com/repos/ioi-germany/cms/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ioi-germany/cms/pulls/3/commits"},"statuses":{"href":"https://api.github.com/repos/ioi-germany/cms/statuses/5761d42caf1fbc3322fd0e19127d265422be0775"}}}}
{"actor":{"display_login":"t-lenz"}}