{"action":"created","comment":{"url":"https://api.github.com/repos/cockpit-project/cockpit/pulls/comments/28407419","id":28407419,"diff_hunk":"@@ -0,0 +1,373 @@\n+/*\n+ * This file is part of Cockpit.\n+ *\n+ * Copyright (C) 2014 Red Hat, Inc.\n+ *\n+ * Cockpit is free software; you can redistribute it and/or modify it\n+ * under the terms of the GNU Lesser General Public License as published by\n+ * the Free Software Foundation; either version 2.1 of the License, or\n+ * (at your option) any later version.\n+ *\n+ * Cockpit is distributed in the hope that it will be useful, but\n+ * WITHOUT ANY WARRANTY; without even the implied warranty of\n+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n+ * Lesser General Public License for more details.\n+ *\n+ * You should have received a copy of the GNU Lesser General Public License\n+ * along with Cockpit; If not, see <http://www.gnu.org/licenses/>.\n+ */\n+\n+define([\n+    \"jquery\",\n+    \"base1/cockpit\",\n+    \"kubernetes/client\",\n+    \"base1/mustache\"\n+], function($, cockpit,kubernetes,Mustache) {\n+    \"use strict\";\n+\n+    var appdeployer = {};\n+    var client = kubernetes.k8client();\n+\n+    function debug() {\n+        if (window.debugging == \"all\" || window.debugging == \"deploy\")\n+            console.debug.apply(console, arguments);\n+    }\n+\n+    function failure(ex) {\n+        console.warn(ex);\n+    }\n+\n+    function isJsonString(str) {\n+        try {\n+            JSON.parse(str);\n+        } catch (e) {\n+            return false;\n+        }\n+        return true;\n+    }\n+\n+    function get_kentities(entity_key) {\n+        var elist = [];\n+        if (client[entity_key]) {\n+            var el = client[entity_key];\n+            for (var i = 0; i < el.length; i++) {\n+                elist.push(el[i].metadata.name);\n+            }\n+        }\n+        return elist;\n+    }\n+\n+    function deploy_manager() {\n+\n+\n+        var is_deploying = $('#deploy-app-deploying');\n+        var deploy_notification_success = $('#deploy-app-notification-success-template').html();\n+        var deploy_notification_failure = $('#deploy-app-notification-failure-template').html();\n+        Mustache.parse(deploy_notification_success);\n+        Mustache.parse(deploy_notification_failure);\n+\n+        function deploy_app(namespace, jsonData) {\n+            if (action_in_progress()) {\n+                console.log('Unable to Deploy app at this time because a call to deploy manager ' +\n+                    'is already in progress. Please try again.');\n+                return;\n+            }\n+\n+            remove_notifications();\n+\n+            var services = [];\n+            var rcs = [];\n+            var pods = [];\n+            var namespaces = [];\n+            var has_errors = false;\n+            var available_ns = get_kentities(\"namespaces\");\n+            var available_rc = get_kentities(\"replicationcontrollers\");\n+            var available_services = get_kentities(\"services\");\n+            var available_pods = get_kentities(\"pods\");\n+            var file_note = $('#deploy-app-manifest-file-note');\n+            var file_note_details = $('#deploy-app-manifest-file-note-details');\n+            var deploying_app_details = $('#deploy-app-deploying-details');\n+            show_progress_message(\"Deploying App\");\n+\n+            var btn = $('#deploy-app-start');\n+            btn.prop(\"disabled\", true);\n+\n+            if (isJsonString(jsonData)) {\n+                var jdata = JSON.parse(jsonData);\n+                if (jdata.items) {\n+                    for (var i = 0; i < jdata.items.length; i++) {\n+                        var ent_json = jdata.items[i];\n+                        //console.log(ent_json)\n+                        if (ent_json.kind === client.SERVICE) {\n+                            services.push(ent_json);\n+                        } else if (ent_json.kind === client.POD) {\n+                            pods.push(ent_json);\n+                        } else if (ent_json.kind === client.RC) {\n+                            rcs.push(ent_json);\n+                        } else if (ent_json.kind === client.NS) {\n+                            namespaces.push(ent_json);\n+                        }\n+                    }\n+                }\n+            } else {\n+                var text = \"Unable to Read the file.Please check the json file. \";\n+                file_note.show();\n+                file_note_details.text(text);\n+                return;\n+            }\n+\n+            create_everything(namespace, services, rcs, pods)\n+                .progress(function(code, response, n, total) {\n+                    //console.log(\" \" + code + \"  \" + response + \"  \" + n + \" / \" + total);\n+                })\n+                .done(function() {\n+                    /* code gets run when everything is created */\n+                    var btn = $('#deploy-app-stop');\n+                    btn.removeClass('btn-default');\n+                    btn.addClass('btn-primary');\n+                    btn.text(\"OK\");\n+                    hide_progress_message();\n+                    is_deploying.parent().prepend($(Mustache.render(deploy_notification_success)));\n+\n+                })\n+                .fail(function(ex, response) {\n+                    /* ex containst the failure */\n+                    var jdata = JSON.parse(response);\n+                    hide_progress_message();\n+                    var context = {};\n+                    is_deploying.parent().prepend($(Mustache.render(deploy_notification_failure, $.extend(context, jdata))));\n+\n+                });\n+        }\n+\n+        function create_everything(namespace, services, rcs, pods) {\n+            var ns_json = '{\"apiVersion\":\"v1beta3\",\"kind\":\"Namespace\",\"metadata\":{\"name\": \"' + namespace + '\"}}';\n+            var tasks = [];\n+\n+            tasks.push([\"namespace\", [ns_json], client.create_ns]);\n+\n+            for (var serv in services) {\n+                tasks.push([services[serv].metadata.name, [namespace, JSON.stringify(services[serv])], client.create_service]);\n+            }\n+\n+            for (var rc in rcs) {\n+                tasks.push([rcs[rc].metadata.name, [namespace, JSON.stringify(rcs[rc])], client.create_replicationcontroller]);\n+            }\n+\n+            for (var p in pods) {\n+                tasks.push([pods[p].metadata.name, [namespace, JSON.stringify(pods[p])], client.create_pod]);\n+            }\n+\n+            var deferred = $.Deferred();\n+            var total = tasks.length;\n+\n+            function step(qtasks) {\n+                var e = qtasks.shift();\n+                if (!e) {\n+                    deferred.resolve();\n+                    return;\n+                }\n+                var task_name = e[0];\n+                var args = e[1];\n+                var task = e[2];\n+\n+                task.apply(null, args).done(function(response) {\n+                    deferred.notify(\"created\", response, qtasks.length - total, total);\n+                    step(qtasks);\n+                }).fail(function(ex, response) {\n+                    if (ex.status == 409) {\n+                        deferred.notify(\"skipped\", response, qtasks.length - total, total);\n+                        step(qtasks);\n+                    } else {\n+                        deferred.reject(ex, response);\n+                    }\n+                });\n+            }\n+\n+            step(tasks);\n+\n+            return deferred.promise();\n+        }\n+\n+        function show_progress_message(message) {\n+            is_deploying.show();\n+            $('#deploy-update-message').text(message);\n+        }\n+\n+        function hide_progress_message() {\n+            is_deploying.hide();\n+        }\n+\n+        function remove_notifications() {\n+            $('div.container-fluid.alert').remove();\n+            deploy_dialog_remove_errors();\n+        }\n+\n+\n+        function action_in_progress() {\n+            return (is_deploying.is(':visible'));\n+        }\n+\n+        return {\n+            'deploy_app': deploy_app\n+        };\n+\n+    }\n+\n+    function deploy_app() {\n+        //alert(\"deploy_app\")\n+        var jsondata = \"\";\n+        deploy_dialog_remove_errors();\n+        jsondata = appdeployer.jsondata;\n+\n+        var ns = $('#deploy-app-namespace-field').val();\n+        if ($('#deploy-app-namespace-field').val() === 'Custom Namespace')\n+            ns = $('#deploy-app-namespace-field-custom').val().trim();\n+\n+        var has_errors = false;\n+        if (jsondata === '') {\n+            $('#deploy-app-manifest-file-empty').show();\n+            $('#deploy-app-manifest-file').parent().addClass('has-error');\n+            has_errors = true;\n+        }\n+        if (ns.trim() === '' || ns.trim() === 'Enter Namespace Here') {\n+            $('#deploy-app-namespace-field-note').show();\n+            $('#deploy-app-namespace-field-custom').parent().addClass('has-error');\n+            has_errors = true;\n+        }\n+        if (!has_errors)\n+            appdeployer.manager.deploy_app(ns, jsondata);\n+    }\n+\n+    function deploy_dialog_remove_errors() {\n+        $('#deploy-app-manifest-file-note').hide();\n+        $('#deploy-app-manifest-file-note-details').hide();\n+        $('#deploy-app-namespace-field-note').hide();\n+        $('#deploy-app-namespace-field-note-details').hide();\n+        $('#deploy-app-general-error').hide();\n+        $('#deploy-app-manifest-file-empty').hide();\n+        $('#deploy-app-namespace-field-custom-empty').hide();\n+        $('#deploy-app-namespace-field-custom').parent().removeClass('has-error');\n+        $('#deploy-app-manifest-file').parent().removeClass('has-error');\n+\n+    }\n+\n+    function pre_init() {\n+        //alert(\"pre_init\")\n+        var firstTime = true;\n+        var dlg = $('#deploy-app-dialog');\n+        var btn = $('#deploy-app-start');\n+        var manifest_file = $('#deploy-app-manifest-file');\n+        var manifest_file_note = $('#deploy-app-manifest-file-note');\n+        var manifest_file_details = $(\"#deploy-app-manifest-file-note-details\");\n+        var ns_selector = $('#deploy-app-namespace-field');\n+        appdeployer.jsondata = \"\";\n+        var text = \"\";\n+\n+        btn.on('click', function() {\n+            deploy_app();\n+        });\n+\n+        dlg.on('show.bs.modal', function() {\n+            //alert(\"show.bs.models\");\n+            if (firstTime) {\n+                var optionls = [];\n+                var nslist = get_kentities(\"namespaces\");\n+                for (var i = 0; i < nslist.length; i++) {\n+                    optionls.push('<option translatable=\"yes\" value=\"' + nslist[i] + '\">' + nslist[i] + '</option>');\n+                }\n+                optionls.push('<option translatable=\"yes\" value=\"Custom Namespace\">Custom Namespace</option>');\n+                var optionlshtml = optionls.join('');\n+                ns_selector.prepend(optionlshtml);\n+                ns_selector.selectpicker('refresh');\n+                firstTime = false;\n+            }\n+            manifest_file.val(\"\");\n+            deploy_dialog_remove_errors();\n+        });\n+\n+\n+        dlg.on('keypress', function(e) {\n+            if (e.keyCode === 13)\n+                btn.trigger('click');\n+        });\n+\n+        manifest_file.on('change', function() {\n+            //alert(\"manifest_file\")\n+\n+            manifest_file_note.hide();\n+            manifest_file_details.hide();\n+            manifest_file.parent().removeClass('has-error');\n+\n+            var files, file, reader;\n+            files = manifest_file[0].files;\n+            if (files.length != 1) {\n+                text = \"No json File was selected.Please select a json file. \";\n+                manifest_file_note.show();\n+                manifest_file_details.text(text);\n+                manifest_file_details.show();\n+                manifest_file.parent().addClass('has-error');\n+                return;\n+            }\n+            file = files[0];\n+            if (!file.type.match(\"json.*\")) {\n+                text = \"Selected file is Not a Json file.Please select a json file. \";\n+                manifest_file_note.show();\n+                manifest_file_details.text(text);\n+                manifest_file_details.show();\n+                manifest_file.parent().addClass('has-error');\n+                return;\n+            }\n+            reader = new window.FileReader();\n+            reader.onerror = function() {\n+                text = \"Unable to Read the file.Please check the json file. \";","path":"pkg/kubernetes/deploy.js","position":324,"original_position":323,"commit_id":"f21437e2cd6ee32b8a6443f8978b9e68b339c700","original_commit_id":"e8bec07f2209bc899b9d985685632c6adbaf73cf","user":{"login":"stefwalter","id":795070,"avatar_url":"https://avatars.githubusercontent.com/u/795070?v=3","gravatar_id":"","url":"https://api.github.com/users/stefwalter","html_url":"https://github.com/stefwalter","followers_url":"https://api.github.com/users/stefwalter/followers","following_url":"https://api.github.com/users/stefwalter/following{/other_user}","gists_url":"https://api.github.com/users/stefwalter/gists{/gist_id}","starred_url":"https://api.github.com/users/stefwalter/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stefwalter/subscriptions","organizations_url":"https://api.github.com/users/stefwalter/orgs","repos_url":"https://api.github.com/users/stefwalter/repos","events_url":"https://api.github.com/users/stefwalter/events{/privacy}","received_events_url":"https://api.github.com/users/stefwalter/received_events","type":"User","site_admin":false},"body":"Can we provide more details about the error? Is ```reader.onerror``` called with an exception argument?","created_at":"2015-04-15T10:04:40Z","updated_at":"2015-04-15T10:04:40Z","html_url":"https://github.com/cockpit-project/cockpit/pull/1989#discussion_r28407419","pull_request_url":"https://api.github.com/repos/cockpit-project/cockpit/pulls/1989","_links":{"self":{"href":"https://api.github.com/repos/cockpit-project/cockpit/pulls/comments/28407419"},"html":{"href":"https://github.com/cockpit-project/cockpit/pull/1989#discussion_r28407419"},"pull_request":{"href":"https://api.github.com/repos/cockpit-project/cockpit/pulls/1989"}}},"pull_request":{"url":"https://api.github.com/repos/cockpit-project/cockpit/pulls/1989","id":31730686,"html_url":"https://github.com/cockpit-project/cockpit/pull/1989","diff_url":"https://github.com/cockpit-project/cockpit/pull/1989.diff","patch_url":"https://github.com/cockpit-project/cockpit/pull/1989.patch","issue_url":"https://api.github.com/repos/cockpit-project/cockpit/issues/1989","number":1989,"state":"open","locked":false,"title":"Deploy kubernetes application","user":{"login":"sub-mod","id":7363264,"avatar_url":"https://avatars.githubusercontent.com/u/7363264?v=3","gravatar_id":"","url":"https://api.github.com/users/sub-mod","html_url":"https://github.com/sub-mod","followers_url":"https://api.github.com/users/sub-mod/followers","following_url":"https://api.github.com/users/sub-mod/following{/other_user}","gists_url":"https://api.github.com/users/sub-mod/gists{/gist_id}","starred_url":"https://api.github.com/users/sub-mod/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sub-mod/subscriptions","organizations_url":"https://api.github.com/users/sub-mod/orgs","repos_url":"https://api.github.com/users/sub-mod/repos","events_url":"https://api.github.com/users/sub-mod/events{/privacy}","received_events_url":"https://api.github.com/users/sub-mod/received_events","type":"User","site_admin":false},"body":"deploy kubernetes application\r\nhttps://github.com/cockpit-project/cockpit/wiki/Feature:-Kubernetes:-Deploy-application","created_at":"2015-03-23T13:18:14Z","updated_at":"2015-04-15T10:04:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b2082d856045a1683434adfb83445467aec9da7a","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/cockpit-project/cockpit/pulls/1989/commits","review_comments_url":"https://api.github.com/repos/cockpit-project/cockpit/pulls/1989/comments","review_comment_url":"https://api.github.com/repos/cockpit-project/cockpit/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cockpit-project/cockpit/issues/1989/comments","statuses_url":"https://api.github.com/repos/cockpit-project/cockpit/statuses/f21437e2cd6ee32b8a6443f8978b9e68b339c700","head":{"label":"sub-mod:deploy_app","ref":"deploy_app","sha":"f21437e2cd6ee32b8a6443f8978b9e68b339c700","user":{"login":"sub-mod","id":7363264,"avatar_url":"https://avatars.githubusercontent.com/u/7363264?v=3","gravatar_id":"","url":"https://api.github.com/users/sub-mod","html_url":"https://github.com/sub-mod","followers_url":"https://api.github.com/users/sub-mod/followers","following_url":"https://api.github.com/users/sub-mod/following{/other_user}","gists_url":"https://api.github.com/users/sub-mod/gists{/gist_id}","starred_url":"https://api.github.com/users/sub-mod/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sub-mod/subscriptions","organizations_url":"https://api.github.com/users/sub-mod/orgs","repos_url":"https://api.github.com/users/sub-mod/repos","events_url":"https://api.github.com/users/sub-mod/events{/privacy}","received_events_url":"https://api.github.com/users/sub-mod/received_events","type":"User","site_admin":false},"repo":{"id":29312092,"name":"cockpit","full_name":"sub-mod/cockpit","owner":{"login":"sub-mod","id":7363264,"avatar_url":"https://avatars.githubusercontent.com/u/7363264?v=3","gravatar_id":"","url":"https://api.github.com/users/sub-mod","html_url":"https://github.com/sub-mod","followers_url":"https://api.github.com/users/sub-mod/followers","following_url":"https://api.github.com/users/sub-mod/following{/other_user}","gists_url":"https://api.github.com/users/sub-mod/gists{/gist_id}","starred_url":"https://api.github.com/users/sub-mod/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sub-mod/subscriptions","organizations_url":"https://api.github.com/users/sub-mod/orgs","repos_url":"https://api.github.com/users/sub-mod/repos","events_url":"https://api.github.com/users/sub-mod/events{/privacy}","received_events_url":"https://api.github.com/users/sub-mod/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/sub-mod/cockpit","description":"Cockpit, a user interface for GNU/Linux servers","fork":true,"url":"https://api.github.com/repos/sub-mod/cockpit","forks_url":"https://api.github.com/repos/sub-mod/cockpit/forks","keys_url":"https://api.github.com/repos/sub-mod/cockpit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sub-mod/cockpit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sub-mod/cockpit/teams","hooks_url":"https://api.github.com/repos/sub-mod/cockpit/hooks","issue_events_url":"https://api.github.com/repos/sub-mod/cockpit/issues/events{/number}","events_url":"https://api.github.com/repos/sub-mod/cockpit/events","assignees_url":"https://api.github.com/repos/sub-mod/cockpit/assignees{/user}","branches_url":"https://api.github.com/repos/sub-mod/cockpit/branches{/branch}","tags_url":"https://api.github.com/repos/sub-mod/cockpit/tags","blobs_url":"https://api.github.com/repos/sub-mod/cockpit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sub-mod/cockpit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sub-mod/cockpit/git/refs{/sha}","trees_url":"https://api.github.com/repos/sub-mod/cockpit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sub-mod/cockpit/statuses/{sha}","languages_url":"https://api.github.com/repos/sub-mod/cockpit/languages","stargazers_url":"https://api.github.com/repos/sub-mod/cockpit/stargazers","contributors_url":"https://api.github.com/repos/sub-mod/cockpit/contributors","subscribers_url":"https://api.github.com/repos/sub-mod/cockpit/subscribers","subscription_url":"https://api.github.com/repos/sub-mod/cockpit/subscription","commits_url":"https://api.github.com/repos/sub-mod/cockpit/commits{/sha}","git_commits_url":"https://api.github.com/repos/sub-mod/cockpit/git/commits{/sha}","comments_url":"https://api.github.com/repos/sub-mod/cockpit/comments{/number}","issue_comment_url":"https://api.github.com/repos/sub-mod/cockpit/issues/comments{/number}","contents_url":"https://api.github.com/repos/sub-mod/cockpit/contents/{+path}","compare_url":"https://api.github.com/repos/sub-mod/cockpit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sub-mod/cockpit/merges","archive_url":"https://api.github.com/repos/sub-mod/cockpit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sub-mod/cockpit/downloads","issues_url":"https://api.github.com/repos/sub-mod/cockpit/issues{/number}","pulls_url":"https://api.github.com/repos/sub-mod/cockpit/pulls{/number}","milestones_url":"https://api.github.com/repos/sub-mod/cockpit/milestones{/number}","notifications_url":"https://api.github.com/repos/sub-mod/cockpit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sub-mod/cockpit/labels{/name}","releases_url":"https://api.github.com/repos/sub-mod/cockpit/releases{/id}","created_at":"2015-01-15T18:40:27Z","updated_at":"2015-01-23T12:01:29Z","pushed_at":"2015-04-15T09:49:55Z","git_url":"git://github.com/sub-mod/cockpit.git","ssh_url":"git@github.com:sub-mod/cockpit.git","clone_url":"https://github.com/sub-mod/cockpit.git","svn_url":"https://github.com/sub-mod/cockpit","homepage":"http://www.cockpit-project.org/","size":14235,"stargazers_count":0,"watchers_count":0,"language":"C","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":"cockpit-project:master","ref":"master","sha":"28ab9d48e8c12996935fa6a1f644b4353f6822a4","user":{"login":"cockpit-project","id":5765104,"avatar_url":"https://avatars.githubusercontent.com/u/5765104?v=3","gravatar_id":"","url":"https://api.github.com/users/cockpit-project","html_url":"https://github.com/cockpit-project","followers_url":"https://api.github.com/users/cockpit-project/followers","following_url":"https://api.github.com/users/cockpit-project/following{/other_user}","gists_url":"https://api.github.com/users/cockpit-project/gists{/gist_id}","starred_url":"https://api.github.com/users/cockpit-project/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cockpit-project/subscriptions","organizations_url":"https://api.github.com/users/cockpit-project/orgs","repos_url":"https://api.github.com/users/cockpit-project/repos","events_url":"https://api.github.com/users/cockpit-project/events{/privacy}","received_events_url":"https://api.github.com/users/cockpit-project/received_events","type":"Organization","site_admin":false},"repo":{"id":14049216,"name":"cockpit","full_name":"cockpit-project/cockpit","owner":{"login":"cockpit-project","id":5765104,"avatar_url":"https://avatars.githubusercontent.com/u/5765104?v=3","gravatar_id":"","url":"https://api.github.com/users/cockpit-project","html_url":"https://github.com/cockpit-project","followers_url":"https://api.github.com/users/cockpit-project/followers","following_url":"https://api.github.com/users/cockpit-project/following{/other_user}","gists_url":"https://api.github.com/users/cockpit-project/gists{/gist_id}","starred_url":"https://api.github.com/users/cockpit-project/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cockpit-project/subscriptions","organizations_url":"https://api.github.com/users/cockpit-project/orgs","repos_url":"https://api.github.com/users/cockpit-project/repos","events_url":"https://api.github.com/users/cockpit-project/events{/privacy}","received_events_url":"https://api.github.com/users/cockpit-project/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cockpit-project/cockpit","description":"Cockpit, a user interface for Linux servers","fork":false,"url":"https://api.github.com/repos/cockpit-project/cockpit","forks_url":"https://api.github.com/repos/cockpit-project/cockpit/forks","keys_url":"https://api.github.com/repos/cockpit-project/cockpit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cockpit-project/cockpit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cockpit-project/cockpit/teams","hooks_url":"https://api.github.com/repos/cockpit-project/cockpit/hooks","issue_events_url":"https://api.github.com/repos/cockpit-project/cockpit/issues/events{/number}","events_url":"https://api.github.com/repos/cockpit-project/cockpit/events","assignees_url":"https://api.github.com/repos/cockpit-project/cockpit/assignees{/user}","branches_url":"https://api.github.com/repos/cockpit-project/cockpit/branches{/branch}","tags_url":"https://api.github.com/repos/cockpit-project/cockpit/tags","blobs_url":"https://api.github.com/repos/cockpit-project/cockpit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cockpit-project/cockpit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cockpit-project/cockpit/git/refs{/sha}","trees_url":"https://api.github.com/repos/cockpit-project/cockpit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cockpit-project/cockpit/statuses/{sha}","languages_url":"https://api.github.com/repos/cockpit-project/cockpit/languages","stargazers_url":"https://api.github.com/repos/cockpit-project/cockpit/stargazers","contributors_url":"https://api.github.com/repos/cockpit-project/cockpit/contributors","subscribers_url":"https://api.github.com/repos/cockpit-project/cockpit/subscribers","subscription_url":"https://api.github.com/repos/cockpit-project/cockpit/subscription","commits_url":"https://api.github.com/repos/cockpit-project/cockpit/commits{/sha}","git_commits_url":"https://api.github.com/repos/cockpit-project/cockpit/git/commits{/sha}","comments_url":"https://api.github.com/repos/cockpit-project/cockpit/comments{/number}","issue_comment_url":"https://api.github.com/repos/cockpit-project/cockpit/issues/comments{/number}","contents_url":"https://api.github.com/repos/cockpit-project/cockpit/contents/{+path}","compare_url":"https://api.github.com/repos/cockpit-project/cockpit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cockpit-project/cockpit/merges","archive_url":"https://api.github.com/repos/cockpit-project/cockpit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cockpit-project/cockpit/downloads","issues_url":"https://api.github.com/repos/cockpit-project/cockpit/issues{/number}","pulls_url":"https://api.github.com/repos/cockpit-project/cockpit/pulls{/number}","milestones_url":"https://api.github.com/repos/cockpit-project/cockpit/milestones{/number}","notifications_url":"https://api.github.com/repos/cockpit-project/cockpit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cockpit-project/cockpit/labels{/name}","releases_url":"https://api.github.com/repos/cockpit-project/cockpit/releases{/id}","created_at":"2013-11-01T17:36:46Z","updated_at":"2015-04-15T05:06:37Z","pushed_at":"2015-04-15T09:49:55Z","git_url":"git://github.com/cockpit-project/cockpit.git","ssh_url":"git@github.com:cockpit-project/cockpit.git","clone_url":"https://github.com/cockpit-project/cockpit.git","svn_url":"https://github.com/cockpit-project/cockpit","homepage":"http://www.cockpit-project.org/","size":32955,"stargazers_count":958,"watchers_count":958,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":104,"mirror_url":null,"open_issues_count":313,"forks":104,"open_issues":313,"watchers":958,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/cockpit-project/cockpit/pulls/1989"},"html":{"href":"https://github.com/cockpit-project/cockpit/pull/1989"},"issue":{"href":"https://api.github.com/repos/cockpit-project/cockpit/issues/1989"},"comments":{"href":"https://api.github.com/repos/cockpit-project/cockpit/issues/1989/comments"},"review_comments":{"href":"https://api.github.com/repos/cockpit-project/cockpit/pulls/1989/comments"},"review_comment":{"href":"https://api.github.com/repos/cockpit-project/cockpit/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cockpit-project/cockpit/pulls/1989/commits"},"statuses":{"href":"https://api.github.com/repos/cockpit-project/cockpit/statuses/f21437e2cd6ee32b8a6443f8978b9e68b339c700"}}}}