{"action":"created","comment":{"url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/pulls/comments/99943348","pull_request_review_id":20633712,"id":99943348,"diff_hunk":"@@ -0,0 +1,222 @@\n+/*\n+ * To change this license header, choose License Headers in Project Properties.\n+ * To change this template file, choose Tools | Templates\n+ * and open the template in the editor.\n+ */\n+package com.microsoftopentechnologies.windowsazurestorage.helper;\n+\n+import com.cloudbees.plugins.credentials.CredentialsMatchers;\n+import com.cloudbees.plugins.credentials.CredentialsProvider;\n+import com.cloudbees.plugins.credentials.CredentialsScope;\n+import com.cloudbees.plugins.credentials.CredentialsStore;\n+import com.cloudbees.plugins.credentials.domains.Domain;\n+import com.cloudbees.plugins.credentials.domains.DomainRequirement;\n+import com.microsoftopentechnologies.windowsazurestorage.beans.StorageAccountInfo;\n+import hudson.security.ACL;\n+import java.io.File;\n+import java.io.IOException;\n+import java.util.ArrayList;\n+import java.util.Collections;\n+import java.util.logging.Logger;\n+import java.util.List;\n+import java.util.logging.Level;\n+import javax.xml.parsers.DocumentBuilder;\n+import javax.xml.parsers.DocumentBuilderFactory;\n+import javax.xml.parsers.ParserConfigurationException;\n+import javax.xml.transform.Transformer;\n+import javax.xml.transform.TransformerConfigurationException;\n+import javax.xml.transform.TransformerException;\n+import javax.xml.transform.TransformerFactory;\n+import javax.xml.transform.dom.DOMSource;\n+import javax.xml.transform.stream.StreamResult;\n+import jenkins.model.Jenkins;\n+import org.acegisecurity.context.SecurityContext;\n+import org.acegisecurity.context.SecurityContextHolder;\n+import org.apache.commons.io.FileUtils;\n+import org.apache.commons.logging.Log;\n+import org.apache.commons.logging.LogFactory;\n+import org.w3c.dom.Document;\n+import org.w3c.dom.Element;\n+import org.w3c.dom.Node;\n+import org.w3c.dom.NodeList;\n+import org.xml.sax.SAXException;\n+\n+/**\n+ *\n+ * @author arroyc\n+ */\n+public class CredentialMigration {\n+    private static final Logger LOGGER = Logger.getLogger(CredentialMigration.class.getName());\n+    \n+    //private transient Log upgradelLogger = LogFactory.getLog(this.getClass());\n+    public static List<StorageAccountInfo> getOldStorageConfig(String fileName) throws SAXException, IOException, ParserConfigurationException {\n+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\n+        DocumentBuilder builder = factory.newDocumentBuilder();\n+\n+        // Load the legacy storage config XML document, parse it and return a list of storage accounts\n+        Document document = builder.parse(new File(fileName));\n+\n+        List<StorageAccountInfo> storages = new ArrayList<StorageAccountInfo>();\n+\n+        NodeList nodeList = document.getElementsByTagName(\"com.microsoftopentechnologies.windowsazurestorage.beans.StorageAccountInfo\");\n+        for (int i = 0; i < nodeList.getLength(); i++) {\n+            Node node = nodeList.item(i);\n+\n+            if (node.getNodeType() == Node.ELEMENT_NODE) {\n+                Element elem = (Element) node;\n+\n+                // Get the value of all sub-elements.\n+                String accName = elem.getElementsByTagName(\"storageAccName\")\n+                        .item(0).getChildNodes().item(0).getNodeValue();\n+\n+                String accKey = elem.getElementsByTagName(\"storageAccountKey\").item(0)\n+                        .getChildNodes().item(0).getNodeValue();\n+\n+                String blobURL = elem.getElementsByTagName(\"blobEndPointURL\").item(0)\n+                        .getChildNodes().item(0).getNodeValue();\n+\n+                storages.add(new StorageAccountInfo(accName, accKey, blobURL));\n+            }\n+        }\n+\n+        return storages;\n+\n+    }\n+\n+    public static void writeXMLElements(String jobConfigFile, Document document, NodeList nodeList, String storageCredId) throws TransformerException {\n+        for (int i = 0; i < nodeList.getLength(); i++) {\n+            Node node = nodeList.item(i);\n+            Element credentialId = document.createElement(\"storageCredentialId\");\n+            credentialId.appendChild(document.createTextNode(storageCredId));\n+            node.appendChild(credentialId);\n+\n+            // write the content into job config xml file\n+            TransformerFactory transformerFactory = TransformerFactory.newInstance();\n+            Transformer transformer = transformerFactory.newTransformer();\n+            DOMSource source = new DOMSource(document);\n+            StreamResult result = new StreamResult(new File(jobConfigFile));\n+            transformer.transform(source, result);\n+        }\n+    }\n+\n+    public static void writeCredentialIdInJob(String jobName, String storageCredId) throws SAXException, IOException, ParserConfigurationException, TransformerConfigurationException, TransformerException {\n+        String jobDirectory = Utils.getWorkDirectory() + \"\\\\jobs\\\\\" + jobName;\n+        String jobConfigFile = jobDirectory + \"\\\\\" + \"config.xml\";\n+\n+        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();\n+        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();\n+        Document document = docBuilder.parse(jobConfigFile);\n+        NodeList nodeList = null;\n+\n+        backupFile(jobConfigFile); //backup jobconfigFile    \n+\n+        if (document.getElementsByTagName(\"storageCredentialId\").getLength() <= 0) {\n+            LOGGER.log(Level.INFO, \"storageCredentialId is not found in the config file of {0}. Migration will continue...\", jobName);\n+            //update download job config\n+            nodeList = document.getElementsByTagName(\"com.microsoftopentechnologies.windowsazurestorage.AzureStorageBuilder\");\n+            writeXMLElements(jobConfigFile, document, nodeList, storageCredId);\n+            //update upload job config\n+            nodeList = document.getElementsByTagName(\"com.microsoftopentechnologies.windowsazurestorage.WAStoragePublisher\");\n+            writeXMLElements(jobConfigFile, document, nodeList, storageCredId);\n+            LOGGER.log(Level.INFO, \"Migration is successfull.\");\n+            \n+            removeFile(jobConfigFile+\".backup\");\n+\n+        } else { //job already upgraded and has credentials-id\n+            return;\n+        }\n+\n+    }\n+\n+    public static void backupFile(String sourceFile) throws IOException {\n+        String backupFile = sourceFile + \".backup\";\n+        LOGGER.log(Level.INFO, sourceFile+\".backup has been created for backup.\");\n+        FileUtils.copyFile(new File(sourceFile), new File(backupFile));\n+    }\n+\n+    /**\n+     *\n+     * Take the legacy local storage credential configuration and create an\n+     * equivalent global credential in Jenkins Credential Store\n+     *\n+     */\n+    public static void removeFile(String sourceFile) throws IOException {","path":"src/main/java/com/microsoftopentechnologies/windowsazurestorage/helper/CredentialMigration.java","position":143,"original_position":143,"commit_id":"2719ffb66ab51f570ffec3d80dce422883e95a22","original_commit_id":"4fcc87905ba35adfb2155a4f408268e721553a5a","user":{"login":"clguimanMSFT","id":22645093,"avatar_url":"https://avatars.githubusercontent.com/u/22645093?v=3","gravatar_id":"","url":"https://api.github.com/users/clguimanMSFT","html_url":"https://github.com/clguimanMSFT","followers_url":"https://api.github.com/users/clguimanMSFT/followers","following_url":"https://api.github.com/users/clguimanMSFT/following{/other_user}","gists_url":"https://api.github.com/users/clguimanMSFT/gists{/gist_id}","starred_url":"https://api.github.com/users/clguimanMSFT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/clguimanMSFT/subscriptions","organizations_url":"https://api.github.com/users/clguimanMSFT/orgs","repos_url":"https://api.github.com/users/clguimanMSFT/repos","events_url":"https://api.github.com/users/clguimanMSFT/events{/privacy}","received_events_url":"https://api.github.com/users/clguimanMSFT/received_events","type":"User","site_admin":false},"body":"nitpick: this class should have only one public method: upgradeStorageConfig","created_at":"2017-02-07T22:12:32Z","updated_at":"2017-02-07T22:15:59Z","html_url":"https://github.com/jenkinsci/windows-azure-storage-plugin/pull/36#discussion_r99943348","pull_request_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/pulls/36","_links":{"self":{"href":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/pulls/comments/99943348"},"html":{"href":"https://github.com/jenkinsci/windows-azure-storage-plugin/pull/36#discussion_r99943348"},"pull_request":{"href":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/pulls/36"}}},"pull_request":{"url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/pulls/36","id":104897918,"html_url":"https://github.com/jenkinsci/windows-azure-storage-plugin/pull/36","diff_url":"https://github.com/jenkinsci/windows-azure-storage-plugin/pull/36.diff","patch_url":"https://github.com/jenkinsci/windows-azure-storage-plugin/pull/36.patch","issue_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/issues/36","number":36,"state":"open","locked":false,"title":"Make storage safe","user":{"login":"arroyc","id":16231002,"avatar_url":"https://avatars.githubusercontent.com/u/16231002?v=3","gravatar_id":"","url":"https://api.github.com/users/arroyc","html_url":"https://github.com/arroyc","followers_url":"https://api.github.com/users/arroyc/followers","following_url":"https://api.github.com/users/arroyc/following{/other_user}","gists_url":"https://api.github.com/users/arroyc/gists{/gist_id}","starred_url":"https://api.github.com/users/arroyc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arroyc/subscriptions","organizations_url":"https://api.github.com/users/arroyc/orgs","repos_url":"https://api.github.com/users/arroyc/repos","events_url":"https://api.github.com/users/arroyc/events{/privacy}","received_events_url":"https://api.github.com/users/arroyc/received_events","type":"User","site_admin":false},"body":"Following are the changes:\r\n1. Moved storage account config to Jenkins credential store which is more secure the original xml file  for storage config.\r\n2. Upgrading plugin to 0.3.3 or future from an old version won't break any existing jobs.\r\n3.  Storage Accounts can be added to credential store via credentials page from Jenkins dashboard, system configuration page as previous and job configuration page (new).\r\n","created_at":"2017-02-06T22:37:20Z","updated_at":"2017-02-07T22:15:59Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5c6d16f4d96b9c459805e61e88f0dd8603c9d1f2","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/pulls/36/commits","review_comments_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/pulls/36/comments","review_comment_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/pulls/comments{/number}","comments_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/issues/36/comments","statuses_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/statuses/2719ffb66ab51f570ffec3d80dce422883e95a22","head":{"label":"arroyc:make-storage-safe","ref":"make-storage-safe","sha":"2719ffb66ab51f570ffec3d80dce422883e95a22","user":{"login":"arroyc","id":16231002,"avatar_url":"https://avatars.githubusercontent.com/u/16231002?v=3","gravatar_id":"","url":"https://api.github.com/users/arroyc","html_url":"https://github.com/arroyc","followers_url":"https://api.github.com/users/arroyc/followers","following_url":"https://api.github.com/users/arroyc/following{/other_user}","gists_url":"https://api.github.com/users/arroyc/gists{/gist_id}","starred_url":"https://api.github.com/users/arroyc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arroyc/subscriptions","organizations_url":"https://api.github.com/users/arroyc/orgs","repos_url":"https://api.github.com/users/arroyc/repos","events_url":"https://api.github.com/users/arroyc/events{/privacy}","received_events_url":"https://api.github.com/users/arroyc/received_events","type":"User","site_admin":false},"repo":{"id":72267176,"name":"windows-azure-storage-plugin","full_name":"arroyc/windows-azure-storage-plugin","owner":{"login":"arroyc","id":16231002,"avatar_url":"https://avatars.githubusercontent.com/u/16231002?v=3","gravatar_id":"","url":"https://api.github.com/users/arroyc","html_url":"https://github.com/arroyc","followers_url":"https://api.github.com/users/arroyc/followers","following_url":"https://api.github.com/users/arroyc/following{/other_user}","gists_url":"https://api.github.com/users/arroyc/gists{/gist_id}","starred_url":"https://api.github.com/users/arroyc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arroyc/subscriptions","organizations_url":"https://api.github.com/users/arroyc/orgs","repos_url":"https://api.github.com/users/arroyc/repos","events_url":"https://api.github.com/users/arroyc/events{/privacy}","received_events_url":"https://api.github.com/users/arroyc/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/arroyc/windows-azure-storage-plugin","description":null,"fork":true,"url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin","forks_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/forks","keys_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/keys{/key_id}","collaborators_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/teams","hooks_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/hooks","issue_events_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/issues/events{/number}","events_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/events","assignees_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/assignees{/user}","branches_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/branches{/branch}","tags_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/tags","blobs_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/git/refs{/sha}","trees_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/git/trees{/sha}","statuses_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/statuses/{sha}","languages_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/languages","stargazers_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/stargazers","contributors_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/contributors","subscribers_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/subscribers","subscription_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/subscription","commits_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/commits{/sha}","git_commits_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/git/commits{/sha}","comments_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/comments{/number}","issue_comment_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/issues/comments{/number}","contents_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/contents/{+path}","compare_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/compare/{base}...{head}","merges_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/merges","archive_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/downloads","issues_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/issues{/number}","pulls_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/pulls{/number}","milestones_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/milestones{/number}","notifications_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/labels{/name}","releases_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/releases{/id}","deployments_url":"https://api.github.com/repos/arroyc/windows-azure-storage-plugin/deployments","created_at":"2016-10-29T05:39:32Z","updated_at":"2017-01-23T20:32:53Z","pushed_at":"2017-02-07T22:09:05Z","git_url":"git://github.com/arroyc/windows-azure-storage-plugin.git","ssh_url":"git@github.com:arroyc/windows-azure-storage-plugin.git","clone_url":"https://github.com/arroyc/windows-azure-storage-plugin.git","svn_url":"https://github.com/arroyc/windows-azure-storage-plugin","homepage":"","size":216,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"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":0,"default_branch":"master"}},"base":{"label":"jenkinsci:master","ref":"master","sha":"4c6caaa8ce4cd594c78c4abe9aaa1f3bdbb1ee30","user":{"login":"jenkinsci","id":107424,"avatar_url":"https://avatars.githubusercontent.com/u/107424?v=3","gravatar_id":"","url":"https://api.github.com/users/jenkinsci","html_url":"https://github.com/jenkinsci","followers_url":"https://api.github.com/users/jenkinsci/followers","following_url":"https://api.github.com/users/jenkinsci/following{/other_user}","gists_url":"https://api.github.com/users/jenkinsci/gists{/gist_id}","starred_url":"https://api.github.com/users/jenkinsci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jenkinsci/subscriptions","organizations_url":"https://api.github.com/users/jenkinsci/orgs","repos_url":"https://api.github.com/users/jenkinsci/repos","events_url":"https://api.github.com/users/jenkinsci/events{/privacy}","received_events_url":"https://api.github.com/users/jenkinsci/received_events","type":"Organization","site_admin":false},"repo":{"id":9200713,"name":"windows-azure-storage-plugin","full_name":"jenkinsci/windows-azure-storage-plugin","owner":{"login":"jenkinsci","id":107424,"avatar_url":"https://avatars.githubusercontent.com/u/107424?v=3","gravatar_id":"","url":"https://api.github.com/users/jenkinsci","html_url":"https://github.com/jenkinsci","followers_url":"https://api.github.com/users/jenkinsci/followers","following_url":"https://api.github.com/users/jenkinsci/following{/other_user}","gists_url":"https://api.github.com/users/jenkinsci/gists{/gist_id}","starred_url":"https://api.github.com/users/jenkinsci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jenkinsci/subscriptions","organizations_url":"https://api.github.com/users/jenkinsci/orgs","repos_url":"https://api.github.com/users/jenkinsci/repos","events_url":"https://api.github.com/users/jenkinsci/events{/privacy}","received_events_url":"https://api.github.com/users/jenkinsci/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/jenkinsci/windows-azure-storage-plugin","description":null,"fork":false,"url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin","forks_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/forks","keys_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/teams","hooks_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/hooks","issue_events_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/issues/events{/number}","events_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/events","assignees_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/assignees{/user}","branches_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/branches{/branch}","tags_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/tags","blobs_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/git/refs{/sha}","trees_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/statuses/{sha}","languages_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/languages","stargazers_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/stargazers","contributors_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/contributors","subscribers_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/subscribers","subscription_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/subscription","commits_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/commits{/sha}","git_commits_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/git/commits{/sha}","comments_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/comments{/number}","issue_comment_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/issues/comments{/number}","contents_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/contents/{+path}","compare_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/merges","archive_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/downloads","issues_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/issues{/number}","pulls_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/pulls{/number}","milestones_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/milestones{/number}","notifications_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/labels{/name}","releases_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/releases{/id}","deployments_url":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/deployments","created_at":"2013-04-03T17:35:44Z","updated_at":"2016-10-29T09:02:05Z","pushed_at":"2017-02-07T22:09:07Z","git_url":"git://github.com/jenkinsci/windows-azure-storage-plugin.git","ssh_url":"git@github.com:jenkinsci/windows-azure-storage-plugin.git","clone_url":"https://github.com/jenkinsci/windows-azure-storage-plugin.git","svn_url":"https://github.com/jenkinsci/windows-azure-storage-plugin","homepage":"","size":172,"stargazers_count":9,"watchers_count":9,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":27,"mirror_url":null,"open_issues_count":18,"forks":27,"open_issues":18,"watchers":9,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/pulls/36"},"html":{"href":"https://github.com/jenkinsci/windows-azure-storage-plugin/pull/36"},"issue":{"href":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/issues/36"},"comments":{"href":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/issues/36/comments"},"review_comments":{"href":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/pulls/36/comments"},"review_comment":{"href":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/pulls/36/commits"},"statuses":{"href":"https://api.github.com/repos/jenkinsci/windows-azure-storage-plugin/statuses/2719ffb66ab51f570ffec3d80dce422883e95a22"}}}}
{"actor":{"display_login":"clguimanMSFT"}}