{"action":"created","comment":{"url":"https://api.github.com/repos/Icenium/icenium-cli/pulls/comments/28060929","id":28060929,"diff_hunk":"@@ -0,0 +1,208 @@\n+﻿///<reference path=\"../.d.ts\"/>\n+\"use strict\";\n+\n+import options = require(\"../common/options\");\n+import os = require(\"os\");\n+import path = require(\"path\");\n+import util = require(\"util\");\n+var Table = require(\"cli-table\");\n+\n+export class PublishService implements IPublishService {\n+    private static JSON_PUBLISH_FILE_NAME = \".abpublish\";\n+    private static ALLOWED_CONNECTION_TYPE = \"ftp\";\n+    private static ERROR_MESSAGE_WHEN_PROJECT_EXISTS_ON_REMOTE = \"User cancelled operation\";\n+    private static PUBLIC_URL_DEFAULT_VALUE = \"\";\n+    private static REMOVE_ALL_CONNECTIONS_MESSAGE = \"All of them\";\n+\n+    public allPublishConnections: IPublishConnection[];\n+    public ftpPublishConnections: IPublishConnection[];\n+\n+    constructor(private $errors: IErrors,\n+                private $fs: IFileSystem,\n+                private $logger: ILogger,\n+                private $progressIndicator: IProgressIndicator,\n+                private $projectConstants: Project.IProjectConstants,\n+                private $projectFilesManager: Project.IProjectFilesManager,\n+                private $project: Project.IProject,\n+                private $prompter: IPrompter,\n+                private $server: Server.IServer) {\n+\n+        this.$project.ensureProject();\n+\n+        if (!this.$project.capabilities.publish) {\n+            this.$errors.failWithoutHelp(\"The publish command is only applicable to projects of type %s\", this.$projectConstants.TARGET_FRAMEWORK_IDENTIFIERS.MobileWebsite);\n+        }\n+\n+        this.readConnections().wait();\n+        this.ftpPublishConnections = _.filter(this.allPublishConnections, c => c.type === PublishService.ALLOWED_CONNECTION_TYPE);\n+    }\n+\n+    public publish(idOrUrl: string, username: string, password: string): IFuture<void> {\n+        return (() => {\n+            var projectName = this.$project.projectData.ProjectName;\n+            var ftpConnectionData: Server.OfflineClientFtpConnectionData = {\n+                RemoteUrl: idOrUrl,\n+                ShouldPurge: options.force,\n+                Username: username,\n+                Password: password\n+            };\n+\n+            if (!ftpConnectionData.Username) {\n+                ftpConnectionData.Username = this.$prompter.getString(\"Username:\").wait();\n+            }\n+\n+            if (!ftpConnectionData.Password) {\n+                ftpConnectionData.Password = this.$prompter.getPassword(\"Password:\", {allowEmpty: true}).wait();\n+            }\n+\n+            var id = parseInt(idOrUrl) - 1;\n+\n+            // the check whether it contains a dot is performed\n+            // in case the user tries to publish to an IP address\n+            if (!isNaN(id) && idOrUrl.indexOf('.') < 0) {\n+                this.validateId(id);\n+\n+                ftpConnectionData.RemoteUrl = this.ftpPublishConnections[id].publishUrl;\n+            }\n+\n+            var projectDir = this.$project.getProjectDir().wait();\n+            this.$projectFilesManager.excludeFile(projectDir, PublishService.JSON_PUBLISH_FILE_NAME);\n+            this.$project.importProject().wait();\n+            this.$logger.printInfoMessageOnSameLine(\"Publishing\");\n+\n+            try {\n+                this.$progressIndicator.showProgressIndicator(this.$server.publish.publishToFtp(projectName, projectName, ftpConnectionData), 6000).wait();\n+            } catch (err) {\n+                this.$logger.printInfoMessageOnSameLine(os.EOL);\n+                if (err.message === PublishService.ERROR_MESSAGE_WHEN_PROJECT_EXISTS_ON_REMOTE) {\n+                    this.$errors.failWithoutHelp(\"This project already exists on the remote server. \" + os.EOL + \n+                                    \"To remove all files and upload the new ones on the remote run $ appbuilder publish remove --force\");\n+                }\n+\n+                throw err;\n+            }\n+\n+            this.$logger.printInfoMessageOnSameLine(os.EOL);\n+            this.$logger.info(\"Project '%s' published successfully.\", projectName);\n+        }).future<void>()();\n+    }\n+\n+    public listAllConnections(): IFuture<void> {\n+        return (() => {\n+            this.listConnections(this.ftpPublishConnections);\n+        }).future<void>()();\n+    }\n+\n+    public addConnection(name: string, publishUrl: string): IFuture<void> {\n+        return (() => {\n+            var ftpPublishConnection: IPublishConnection = {\n+                type: PublishService.ALLOWED_CONNECTION_TYPE,\n+                publicUrl: PublishService.PUBLIC_URL_DEFAULT_VALUE,\n+                publishUrl: publishUrl,\n+                name: name\n+            };\n+\n+            if (!ftpPublishConnection.name) {\n+                ftpPublishConnection.name = this.$prompter.getString(\"Name:\").wait();\n+            }\n+\n+            if (!ftpPublishConnection.publishUrl) {\n+                ftpPublishConnection.publishUrl = this.$prompter.getString(\"Publish URL:\").wait();\n+            }\n+\n+            this.allPublishConnections.push(ftpPublishConnection);\n+            this.savePublishJsonFile().wait();\n+            this.$logger.info(\"Connection '%s' added successfully.\", ftpPublishConnection.name);\n+        }).future<void>()();\n+    }\n+\n+    public removeConnection(idOrName: string): IFuture<void> {\n+        return (() => {\n+            var id = parseInt(idOrName) - 1;\n+            var message : string;\n+            if (!isNaN(id)) {\n+                this.validateId(id);\n+\n+                var connectionIndex = _.findIndex(this.allPublishConnections, this.ftpPublishConnections[id]);\n+                this.allPublishConnections.splice(connectionIndex, 1);\n+                message = util.format(\"Connection '%s' successfully removed.\", this.ftpPublishConnections[id].name);\n+            } else {\n+                var name = idOrName;\n+                var connectionsToBeRemoved = _.filter(this.ftpPublishConnections, c => c.name === name);\n+\n+                if (connectionsToBeRemoved.length > 1) {\n+                    var connectionNameUrls = _.map(connectionsToBeRemoved, c => c.name + '(' + c.publishUrl + ')');\n+                    connectionNameUrls.splice(connectionNameUrls.length, 0, PublishService.REMOVE_ALL_CONNECTIONS_MESSAGE);\n+\n+                    var chosenConnectionNameUrl = this.$prompter.promptForChoice(\"Which connection would you like to remove?\", connectionNameUrls).wait();\n+                    if (chosenConnectionNameUrl === PublishService.REMOVE_ALL_CONNECTIONS_MESSAGE) {\n+                        _.remove(this.allPublishConnections, c => c.name === name && c.type === PublishService.ALLOWED_CONNECTION_TYPE);\n+                        message = util.format(\"All connections named '%s' successfully removed.\", name);\n+                    } else {\n+                        var chosenConnectionIndex = _.findIndex(this.allPublishConnections, c => c.name + '(' + c.publishUrl + ')' === chosenConnectionNameUrl);\n+                        this.allPublishConnections.splice(chosenConnectionIndex, 1);\n+                        message = util.format(\"Connection '%s' successfully removed.\", chosenConnectionNameUrl);\n+                    }\n+                } else if (connectionsToBeRemoved.length === 1) {\n+                    _.remove(this.allPublishConnections, connectionsToBeRemoved[0]);\n+                    message = util.format(\"Connection '%s' successfully removed.\", connectionsToBeRemoved[0].name);\n+                } else {\n+                    this.$errors.failWithoutHelp(\"No connections named '%s' found.\", name);\n+                }\n+            }\n+\n+            this.savePublishJsonFile().wait();\n+            this.$logger.info(message);\n+        }).future<void>()();\n+    }\n+\n+    private readConnections(): IFuture<void> {\n+        return (() => {\n+            var projectDir = this.$project.getProjectDir().wait();\n+            var publishFilePath = path.join(projectDir, PublishService.JSON_PUBLISH_FILE_NAME);\n+            try {\n+                this.allPublishConnections = this.$fs.readJson(publishFilePath).wait();\n+            } catch (err) {\n+                if (err.code === 'ENOENT') {\n+                    this.allPublishConnections = [];\n+                    return;\n+                }\n+\n+                this.$errors.failWithoutHelp(\"The project file %s is corrupted.\" + os.EOL +","path":"lib/services/publish-service.ts","position":171,"original_position":171,"commit_id":"c968002e122dd3d4ab40cf8c20e3e8f6001d6e12","original_commit_id":"c968002e122dd3d4ab40cf8c20e3e8f6001d6e12","user":{"login":"teobugslayer","id":5443453,"avatar_url":"https://avatars.githubusercontent.com/u/5443453?v=3","gravatar_id":"","url":"https://api.github.com/users/teobugslayer","html_url":"https://github.com/teobugslayer","followers_url":"https://api.github.com/users/teobugslayer/followers","following_url":"https://api.github.com/users/teobugslayer/following{/other_user}","gists_url":"https://api.github.com/users/teobugslayer/gists{/gist_id}","starred_url":"https://api.github.com/users/teobugslayer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/teobugslayer/subscriptions","organizations_url":"https://api.github.com/users/teobugslayer/orgs","repos_url":"https://api.github.com/users/teobugslayer/repos","events_url":"https://api.github.com/users/teobugslayer/events{/privacy}","received_events_url":"https://api.github.com/users/teobugslayer/received_events","type":"User","site_admin":false},"body":"This error message mentions the project file, but you are dealing with the publish file. I think it should be reworded.","created_at":"2015-04-09T13:30:23Z","updated_at":"2015-04-09T13:30:23Z","html_url":"https://github.com/Icenium/icenium-cli/pull/910#discussion_r28060929","pull_request_url":"https://api.github.com/repos/Icenium/icenium-cli/pulls/910","_links":{"self":{"href":"https://api.github.com/repos/Icenium/icenium-cli/pulls/comments/28060929"},"html":{"href":"https://github.com/Icenium/icenium-cli/pull/910#discussion_r28060929"},"pull_request":{"href":"https://api.github.com/repos/Icenium/icenium-cli/pulls/910"}}},"pull_request":{"url":"https://api.github.com/repos/Icenium/icenium-cli/pulls/910","id":32857538,"html_url":"https://github.com/Icenium/icenium-cli/pull/910","diff_url":"https://github.com/Icenium/icenium-cli/pull/910.diff","patch_url":"https://github.com/Icenium/icenium-cli/pull/910.patch","issue_url":"https://api.github.com/repos/Icenium/icenium-cli/issues/910","number":910,"state":"open","locked":false,"title":"Add publish command","user":{"login":"Mitko-Kerezov","id":6683316,"avatar_url":"https://avatars.githubusercontent.com/u/6683316?v=3","gravatar_id":"","url":"https://api.github.com/users/Mitko-Kerezov","html_url":"https://github.com/Mitko-Kerezov","followers_url":"https://api.github.com/users/Mitko-Kerezov/followers","following_url":"https://api.github.com/users/Mitko-Kerezov/following{/other_user}","gists_url":"https://api.github.com/users/Mitko-Kerezov/gists{/gist_id}","starred_url":"https://api.github.com/users/Mitko-Kerezov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mitko-Kerezov/subscriptions","organizations_url":"https://api.github.com/users/Mitko-Kerezov/orgs","repos_url":"https://api.github.com/users/Mitko-Kerezov/repos","events_url":"https://api.github.com/users/Mitko-Kerezov/events{/privacy}","received_events_url":"https://api.github.com/users/Mitko-Kerezov/received_events","type":"User","site_admin":false},"body":"It enables publishing a **website** to a remote **ftp** server\r\n\r\nMerge **after** https://github.com/telerik/mobile-cli-lib/pull/276 and https://github.com/Icenium/Ice/pull/3378 \r\nRelated to http://teampulse.telerik.com/view#item/286459","created_at":"2015-04-08T13:04:03Z","updated_at":"2015-04-09T13:30:23Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2cea2aad84d0064dab89304d4d2fb631a8e95a7d","assignee":{"login":"Mitko-Kerezov","id":6683316,"avatar_url":"https://avatars.githubusercontent.com/u/6683316?v=3","gravatar_id":"","url":"https://api.github.com/users/Mitko-Kerezov","html_url":"https://github.com/Mitko-Kerezov","followers_url":"https://api.github.com/users/Mitko-Kerezov/followers","following_url":"https://api.github.com/users/Mitko-Kerezov/following{/other_user}","gists_url":"https://api.github.com/users/Mitko-Kerezov/gists{/gist_id}","starred_url":"https://api.github.com/users/Mitko-Kerezov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mitko-Kerezov/subscriptions","organizations_url":"https://api.github.com/users/Mitko-Kerezov/orgs","repos_url":"https://api.github.com/users/Mitko-Kerezov/repos","events_url":"https://api.github.com/users/Mitko-Kerezov/events{/privacy}","received_events_url":"https://api.github.com/users/Mitko-Kerezov/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/Icenium/icenium-cli/milestones/5","html_url":"https://github.com/Icenium/icenium-cli/milestones/2.9.0","labels_url":"https://api.github.com/repos/Icenium/icenium-cli/milestones/5/labels","id":958028,"number":5,"title":"2.9.0","description":"","creator":{"login":"teobugslayer","id":5443453,"avatar_url":"https://avatars.githubusercontent.com/u/5443453?v=3","gravatar_id":"","url":"https://api.github.com/users/teobugslayer","html_url":"https://github.com/teobugslayer","followers_url":"https://api.github.com/users/teobugslayer/followers","following_url":"https://api.github.com/users/teobugslayer/following{/other_user}","gists_url":"https://api.github.com/users/teobugslayer/gists{/gist_id}","starred_url":"https://api.github.com/users/teobugslayer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/teobugslayer/subscriptions","organizations_url":"https://api.github.com/users/teobugslayer/orgs","repos_url":"https://api.github.com/users/teobugslayer/repos","events_url":"https://api.github.com/users/teobugslayer/events{/privacy}","received_events_url":"https://api.github.com/users/teobugslayer/received_events","type":"User","site_admin":false},"open_issues":1,"closed_issues":46,"state":"open","created_at":"2015-01-30T09:08:51Z","updated_at":"2015-04-09T06:38:45Z","due_on":"2015-04-23T21:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/Icenium/icenium-cli/pulls/910/commits","review_comments_url":"https://api.github.com/repos/Icenium/icenium-cli/pulls/910/comments","review_comment_url":"https://api.github.com/repos/Icenium/icenium-cli/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Icenium/icenium-cli/issues/910/comments","statuses_url":"https://api.github.com/repos/Icenium/icenium-cli/statuses/c968002e122dd3d4ab40cf8c20e3e8f6001d6e12","head":{"label":"Icenium:kerezov/publish-ftp","ref":"kerezov/publish-ftp","sha":"c968002e122dd3d4ab40cf8c20e3e8f6001d6e12","user":{"login":"Icenium","id":1152554,"avatar_url":"https://avatars.githubusercontent.com/u/1152554?v=3","gravatar_id":"","url":"https://api.github.com/users/Icenium","html_url":"https://github.com/Icenium","followers_url":"https://api.github.com/users/Icenium/followers","following_url":"https://api.github.com/users/Icenium/following{/other_user}","gists_url":"https://api.github.com/users/Icenium/gists{/gist_id}","starred_url":"https://api.github.com/users/Icenium/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Icenium/subscriptions","organizations_url":"https://api.github.com/users/Icenium/orgs","repos_url":"https://api.github.com/users/Icenium/repos","events_url":"https://api.github.com/users/Icenium/events{/privacy}","received_events_url":"https://api.github.com/users/Icenium/received_events","type":"Organization","site_admin":false},"repo":{"id":14398834,"name":"icenium-cli","full_name":"Icenium/icenium-cli","owner":{"login":"Icenium","id":1152554,"avatar_url":"https://avatars.githubusercontent.com/u/1152554?v=3","gravatar_id":"","url":"https://api.github.com/users/Icenium","html_url":"https://github.com/Icenium","followers_url":"https://api.github.com/users/Icenium/followers","following_url":"https://api.github.com/users/Icenium/following{/other_user}","gists_url":"https://api.github.com/users/Icenium/gists{/gist_id}","starred_url":"https://api.github.com/users/Icenium/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Icenium/subscriptions","organizations_url":"https://api.github.com/users/Icenium/orgs","repos_url":"https://api.github.com/users/Icenium/repos","events_url":"https://api.github.com/users/Icenium/events{/privacy}","received_events_url":"https://api.github.com/users/Icenium/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Icenium/icenium-cli","description":"Cross Platform Command Line Interface for Telerik AppBuilder","fork":false,"url":"https://api.github.com/repos/Icenium/icenium-cli","forks_url":"https://api.github.com/repos/Icenium/icenium-cli/forks","keys_url":"https://api.github.com/repos/Icenium/icenium-cli/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Icenium/icenium-cli/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Icenium/icenium-cli/teams","hooks_url":"https://api.github.com/repos/Icenium/icenium-cli/hooks","issue_events_url":"https://api.github.com/repos/Icenium/icenium-cli/issues/events{/number}","events_url":"https://api.github.com/repos/Icenium/icenium-cli/events","assignees_url":"https://api.github.com/repos/Icenium/icenium-cli/assignees{/user}","branches_url":"https://api.github.com/repos/Icenium/icenium-cli/branches{/branch}","tags_url":"https://api.github.com/repos/Icenium/icenium-cli/tags","blobs_url":"https://api.github.com/repos/Icenium/icenium-cli/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Icenium/icenium-cli/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Icenium/icenium-cli/git/refs{/sha}","trees_url":"https://api.github.com/repos/Icenium/icenium-cli/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Icenium/icenium-cli/statuses/{sha}","languages_url":"https://api.github.com/repos/Icenium/icenium-cli/languages","stargazers_url":"https://api.github.com/repos/Icenium/icenium-cli/stargazers","contributors_url":"https://api.github.com/repos/Icenium/icenium-cli/contributors","subscribers_url":"https://api.github.com/repos/Icenium/icenium-cli/subscribers","subscription_url":"https://api.github.com/repos/Icenium/icenium-cli/subscription","commits_url":"https://api.github.com/repos/Icenium/icenium-cli/commits{/sha}","git_commits_url":"https://api.github.com/repos/Icenium/icenium-cli/git/commits{/sha}","comments_url":"https://api.github.com/repos/Icenium/icenium-cli/comments{/number}","issue_comment_url":"https://api.github.com/repos/Icenium/icenium-cli/issues/comments{/number}","contents_url":"https://api.github.com/repos/Icenium/icenium-cli/contents/{+path}","compare_url":"https://api.github.com/repos/Icenium/icenium-cli/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Icenium/icenium-cli/merges","archive_url":"https://api.github.com/repos/Icenium/icenium-cli/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Icenium/icenium-cli/downloads","issues_url":"https://api.github.com/repos/Icenium/icenium-cli/issues{/number}","pulls_url":"https://api.github.com/repos/Icenium/icenium-cli/pulls{/number}","milestones_url":"https://api.github.com/repos/Icenium/icenium-cli/milestones{/number}","notifications_url":"https://api.github.com/repos/Icenium/icenium-cli/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Icenium/icenium-cli/labels{/name}","releases_url":"https://api.github.com/repos/Icenium/icenium-cli/releases{/id}","created_at":"2013-11-14T15:27:18Z","updated_at":"2015-04-09T06:38:46Z","pushed_at":"2015-04-09T13:18:10Z","git_url":"git://github.com/Icenium/icenium-cli.git","ssh_url":"git@github.com:Icenium/icenium-cli.git","clone_url":"https://github.com/Icenium/icenium-cli.git","svn_url":"https://github.com/Icenium/icenium-cli","homepage":"","size":33486,"stargazers_count":20,"watchers_count":20,"language":"TypeScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"open_issues_count":7,"forks":4,"open_issues":7,"watchers":20,"default_branch":"master"}},"base":{"label":"Icenium:master","ref":"master","sha":"1341f0dcc596faecbd953751205575e6b2999e16","user":{"login":"Icenium","id":1152554,"avatar_url":"https://avatars.githubusercontent.com/u/1152554?v=3","gravatar_id":"","url":"https://api.github.com/users/Icenium","html_url":"https://github.com/Icenium","followers_url":"https://api.github.com/users/Icenium/followers","following_url":"https://api.github.com/users/Icenium/following{/other_user}","gists_url":"https://api.github.com/users/Icenium/gists{/gist_id}","starred_url":"https://api.github.com/users/Icenium/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Icenium/subscriptions","organizations_url":"https://api.github.com/users/Icenium/orgs","repos_url":"https://api.github.com/users/Icenium/repos","events_url":"https://api.github.com/users/Icenium/events{/privacy}","received_events_url":"https://api.github.com/users/Icenium/received_events","type":"Organization","site_admin":false},"repo":{"id":14398834,"name":"icenium-cli","full_name":"Icenium/icenium-cli","owner":{"login":"Icenium","id":1152554,"avatar_url":"https://avatars.githubusercontent.com/u/1152554?v=3","gravatar_id":"","url":"https://api.github.com/users/Icenium","html_url":"https://github.com/Icenium","followers_url":"https://api.github.com/users/Icenium/followers","following_url":"https://api.github.com/users/Icenium/following{/other_user}","gists_url":"https://api.github.com/users/Icenium/gists{/gist_id}","starred_url":"https://api.github.com/users/Icenium/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Icenium/subscriptions","organizations_url":"https://api.github.com/users/Icenium/orgs","repos_url":"https://api.github.com/users/Icenium/repos","events_url":"https://api.github.com/users/Icenium/events{/privacy}","received_events_url":"https://api.github.com/users/Icenium/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Icenium/icenium-cli","description":"Cross Platform Command Line Interface for Telerik AppBuilder","fork":false,"url":"https://api.github.com/repos/Icenium/icenium-cli","forks_url":"https://api.github.com/repos/Icenium/icenium-cli/forks","keys_url":"https://api.github.com/repos/Icenium/icenium-cli/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Icenium/icenium-cli/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Icenium/icenium-cli/teams","hooks_url":"https://api.github.com/repos/Icenium/icenium-cli/hooks","issue_events_url":"https://api.github.com/repos/Icenium/icenium-cli/issues/events{/number}","events_url":"https://api.github.com/repos/Icenium/icenium-cli/events","assignees_url":"https://api.github.com/repos/Icenium/icenium-cli/assignees{/user}","branches_url":"https://api.github.com/repos/Icenium/icenium-cli/branches{/branch}","tags_url":"https://api.github.com/repos/Icenium/icenium-cli/tags","blobs_url":"https://api.github.com/repos/Icenium/icenium-cli/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Icenium/icenium-cli/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Icenium/icenium-cli/git/refs{/sha}","trees_url":"https://api.github.com/repos/Icenium/icenium-cli/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Icenium/icenium-cli/statuses/{sha}","languages_url":"https://api.github.com/repos/Icenium/icenium-cli/languages","stargazers_url":"https://api.github.com/repos/Icenium/icenium-cli/stargazers","contributors_url":"https://api.github.com/repos/Icenium/icenium-cli/contributors","subscribers_url":"https://api.github.com/repos/Icenium/icenium-cli/subscribers","subscription_url":"https://api.github.com/repos/Icenium/icenium-cli/subscription","commits_url":"https://api.github.com/repos/Icenium/icenium-cli/commits{/sha}","git_commits_url":"https://api.github.com/repos/Icenium/icenium-cli/git/commits{/sha}","comments_url":"https://api.github.com/repos/Icenium/icenium-cli/comments{/number}","issue_comment_url":"https://api.github.com/repos/Icenium/icenium-cli/issues/comments{/number}","contents_url":"https://api.github.com/repos/Icenium/icenium-cli/contents/{+path}","compare_url":"https://api.github.com/repos/Icenium/icenium-cli/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Icenium/icenium-cli/merges","archive_url":"https://api.github.com/repos/Icenium/icenium-cli/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Icenium/icenium-cli/downloads","issues_url":"https://api.github.com/repos/Icenium/icenium-cli/issues{/number}","pulls_url":"https://api.github.com/repos/Icenium/icenium-cli/pulls{/number}","milestones_url":"https://api.github.com/repos/Icenium/icenium-cli/milestones{/number}","notifications_url":"https://api.github.com/repos/Icenium/icenium-cli/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Icenium/icenium-cli/labels{/name}","releases_url":"https://api.github.com/repos/Icenium/icenium-cli/releases{/id}","created_at":"2013-11-14T15:27:18Z","updated_at":"2015-04-09T06:38:46Z","pushed_at":"2015-04-09T13:18:10Z","git_url":"git://github.com/Icenium/icenium-cli.git","ssh_url":"git@github.com:Icenium/icenium-cli.git","clone_url":"https://github.com/Icenium/icenium-cli.git","svn_url":"https://github.com/Icenium/icenium-cli","homepage":"","size":33486,"stargazers_count":20,"watchers_count":20,"language":"TypeScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"open_issues_count":7,"forks":4,"open_issues":7,"watchers":20,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Icenium/icenium-cli/pulls/910"},"html":{"href":"https://github.com/Icenium/icenium-cli/pull/910"},"issue":{"href":"https://api.github.com/repos/Icenium/icenium-cli/issues/910"},"comments":{"href":"https://api.github.com/repos/Icenium/icenium-cli/issues/910/comments"},"review_comments":{"href":"https://api.github.com/repos/Icenium/icenium-cli/pulls/910/comments"},"review_comment":{"href":"https://api.github.com/repos/Icenium/icenium-cli/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Icenium/icenium-cli/pulls/910/commits"},"statuses":{"href":"https://api.github.com/repos/Icenium/icenium-cli/statuses/c968002e122dd3d4ab40cf8c20e3e8f6001d6e12"}}}}