Coverage Report - org.apache.maven.plugins.patchtracker.patching.github.GitHubPatchRepository
 
Classes in this File Line Coverage Branch Coverage Complexity
GitHubPatchRepository
0 %
0/25
0 %
0/2
2,333
 
 1  
 package org.apache.maven.plugins.patchtracker.patching.github;
 2  
 
 3  
 /*
 4  
  * Licensed to the Apache Software Foundation (ASF) under one
 5  
  * or more contributor license agreements.  See the NOTICE file
 6  
  * distributed with this work for additional information
 7  
  * regarding copyright ownership.  The ASF licenses this file
 8  
  * to you under the Apache License, Version 2.0 (the
 9  
  * "License"); you may not use this file except in compliance
 10  
  * with the License.  You may obtain a copy of the License at
 11  
  *
 12  
  *   http://www.apache.org/licenses/LICENSE-2.0
 13  
  *
 14  
  * Unless required by applicable law or agreed to in writing,
 15  
  * software distributed under the License is distributed on an
 16  
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 17  
  * KIND, either express or implied.  See the License for the
 18  
  * specific language governing permissions and limitations
 19  
  * under the License.
 20  
  */
 21  
 
 22  
 import org.apache.commons.io.IOUtils;
 23  
 import org.apache.commons.lang.StringUtils;
 24  
 import org.apache.http.HttpResponse;
 25  
 import org.apache.http.client.ClientProtocolException;
 26  
 import org.apache.http.client.methods.HttpGet;
 27  
 import org.apache.http.impl.client.DefaultHttpClient;
 28  
 import org.apache.maven.plugin.logging.Log;
 29  
 import org.apache.maven.plugins.patchtracker.patching.PatchRepository;
 30  
 import org.apache.maven.plugins.patchtracker.patching.PatchRepositoryException;
 31  
 import org.apache.maven.plugins.patchtracker.patching.PatchRepositoryRequest;
 32  
 import org.apache.maven.plugins.patchtracker.patching.PatchRepositoryResult;
 33  
 import org.codehaus.jackson.JsonProcessingException;
 34  
 import org.codehaus.jackson.map.DeserializationConfig;
 35  
 import org.codehaus.jackson.map.ObjectMapper;
 36  
 
 37  
 import java.io.IOException;
 38  
 
 39  
 /**
 40  
  * @author Olivier Lamy
 41  
  * @plexus.component role="org.apache.maven.plugins.patchtracker.patching.PatchRepository" role-hint="github"
 42  
  */
 43  0
 public class GitHubPatchRepository
 44  
     implements PatchRepository
 45  
 {
 46  0
     DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
 47  
 
 48  
     public PatchRepositoryResult getPatch( PatchRepositoryRequest patchRepositoryRequest, Log log )
 49  
         throws PatchRepositoryException
 50  
     {
 51  
         try
 52  
         {
 53  
             //curl -v https://api.github.com/repos/apache/directmemory/pulls/1
 54  0
             String baseUrl = patchRepositoryRequest.getUrl();
 55  0
             if ( StringUtils.isEmpty( baseUrl ) )
 56  
             {
 57  0
                 baseUrl = "https://api.github.com";
 58  0
                 log.info( "github api url is empty use default:" + baseUrl );
 59  
             }
 60  0
             String url = patchRepositoryRequest.getUrl() + "/repos/" + patchRepositoryRequest.getOrganization() + "/"
 61  
                 + patchRepositoryRequest.getRepository() + "/pulls/" + patchRepositoryRequest.getId();
 62  0
             log.debug( "url" + url );
 63  
 
 64  0
             HttpGet httpGet = new HttpGet( url );
 65  
 
 66  0
             HttpResponse httpResponse = defaultHttpClient.execute( httpGet );
 67  
 
 68  0
             String response = IOUtils.toString( httpResponse.getEntity().getContent() );
 69  
 
 70  0
             log.debug( "response:" + response );
 71  
 
 72  0
             PatchRepositoryResult patchRepositoryResult = fromJson( response );
 73  
 
 74  0
             log.debug( "patchRepositoryResult:" + patchRepositoryResult );
 75  
 
 76  0
             patchRepositoryResult.setPatchContent( getPatchContent( patchRepositoryResult ) );
 77  
 
 78  0
             log.debug( "pullRequest:" + patchRepositoryResult.toString() );
 79  0
             return patchRepositoryResult;
 80  
         }
 81  0
         catch ( IOException e )
 82  
         {
 83  0
             throw new PatchRepositoryException( e.getMessage(), e );
 84  
         }
 85  
     }
 86  
 
 87  
     protected String getPatchContent( PatchRepositoryResult pullRequest )
 88  
         throws IOException, ClientProtocolException
 89  
     {
 90  0
         HttpGet httpGet = new HttpGet( pullRequest.getPatchUrl() );
 91  
 
 92  0
         HttpResponse httpResponse = defaultHttpClient.execute( httpGet );
 93  
 
 94  0
         return IOUtils.toString( httpResponse.getEntity().getContent() );
 95  
     }
 96  
 
 97  
     /**
 98  
      * parse json from gitbut see http://developer.github.com/v3/pulls/
 99  
      *
 100  
      * @param jsonContent
 101  
      * @return
 102  
      * @throws IOException
 103  
      * @throws JsonProcessingException
 104  
      */
 105  
     protected PatchRepositoryResult fromJson( String jsonContent )
 106  
         throws IOException, JsonProcessingException
 107  
     {
 108  0
         ObjectMapper objectMapper = new ObjectMapper();
 109  
 
 110  
         // we don't parse all stuff
 111  
         // se json format below or documentation
 112  0
         objectMapper.configure( DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false );
 113  
 
 114  
         //objectMapper.
 115  
 
 116  0
         return objectMapper.reader( GithubPatchRepositoryResult.class ).readValue( jsonContent );
 117  
     }
 118  
 
 119  
     /**
 120  
      * json format
 121  
      * <p/>
 122  
      * curl -v https://api.github.com/repos/apache/directmemory/pulls/1
 123  
      * <p/>
 124  
      * {
 125  
      * "merged_by": null,
 126  
      * "merged": false,
 127  
      * "title": "test wonderful patch ",
 128  
      * "head": {
 129  
      * "repo": {
 130  
      * "watchers": 1,
 131  
      * "forks": 0,
 132  
      * "pushed_at": "2011-11-26T15:17:32Z",
 133  
      * "svn_url": "https://svn.github.com/olamy/directmemory",
 134  
      * "description": "Mirror of Apache DirectMemory",
 135  
      * "created_at": "2011-11-26T09:39:35Z",
 136  
      * "url": "https://api.github.com/repos/olamy/directmemory",
 137  
      * "fork": true,
 138  
      * "language": "Java",
 139  
      * "git_url": "git://github.com/olamy/directmemory.git",
 140  
      * "clone_url": "https://github.com/olamy/directmemory.git",
 141  
      * "open_issues": 0,
 142  
      * "private": false,
 143  
      * "html_url": "https://github.com/olamy/directmemory",
 144  
      * "homepage": null,
 145  
      * "size": 112,
 146  
      * "master_branch": "trunk",
 147  
      * "updated_at": "2011-11-26T15:17:32Z",
 148  
      * "owner": {
 149  
      * "avatar_url": "https://secure.gravatar.com/avatar/bab29f762bea8e578505424443d8cd41?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
 150  
      * "url": "https://api.github.com/users/olamy",
 151  
      * "login": "olamy",
 152  
      * "gravatar_id": "bab29f762bea8e578505424443d8cd41",
 153  
      * "id": 19728
 154  
      * },
 155  
      * "name": "directmemory",
 156  
      * "id": 2854963,
 157  
      * "ssh_url": "git@github.com:olamy/directmemory.git"
 158  
      * },
 159  
      * "user": {
 160  
      * "avatar_url": "https://secure.gravatar.com/avatar/bab29f762bea8e578505424443d8cd41?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
 161  
      * "url": "https://api.github.com/users/olamy",
 162  
      * "login": "olamy",
 163  
      * "gravatar_id": "bab29f762bea8e578505424443d8cd41",
 164  
      * "id": 19728
 165  
      * },
 166  
      * "ref": "trunk",
 167  
      * "label": "olamy:trunk",
 168  
      * "sha": "73d403199b415108a6f2a72c95b9ec684e6f1dc1"
 169  
      * },
 170  
      * "_links": {
 171  
      * "html": {
 172  
      * "href": "https://github.com/apache/directmemory/pull/1"
 173  
      * },
 174  
      * "review_comments": {
 175  
      * "href": "https://api.github.com/repos/apache/directmemory/pulls/1/comments"
 176  
      * },
 177  
      * "self": {
 178  
      * "href": "https://api.github.com/repos/apache/directmemory/pulls/1"
 179  
      * },
 180  
      * "comments": {
 181  
      * "href": "https://api.github.com/repos/apache/directmemory/issues/1/comments"
 182  
      * }
 183  
      * },
 184  
      * "merged_at": null,
 185  
      * "created_at": "2011-11-26T14:59:52Z",
 186  
      * "state": "open",
 187  
      * "url": "https://api.github.com/repos/apache/directmemory/pulls/1",
 188  
      * "commits": 3,
 189  
      * "deletions": 0,
 190  
      * "changed_files": 2,
 191  
      * "review_comments": 0,
 192  
      * "closed_at": null,
 193  
      * "user": {
 194  
      * "avatar_url": "https://secure.gravatar.com/avatar/bab29f762bea8e578505424443d8cd41?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
 195  
      * "url": "https://api.github.com/users/olamy",
 196  
      * "login": "olamy",
 197  
      * "gravatar_id": "bab29f762bea8e578505424443d8cd41",
 198  
      * "id": 19728
 199  
      * },
 200  
      * "base": {
 201  
      * "repo": {
 202  
      * "watchers": 3,
 203  
      * "forks": 2,
 204  
      * "pushed_at": "2011-11-03T00:02:25Z",
 205  
      * "svn_url": "https://svn.github.com/apache/directmemory",
 206  
      * "description": "Mirror of Apache DirectMemory",
 207  
      * "created_at": "2011-10-15T07:00:08Z",
 208  
      * "url": "https://api.github.com/repos/apache/directmemory",
 209  
      * "fork": false,
 210  
      * "language": "Java",
 211  
      * "git_url": "git://github.com/apache/directmemory.git",
 212  
      * "clone_url": "https://github.com/apache/directmemory.git",
 213  
      * "open_issues": 0,
 214  
      * "private": false,
 215  
      * "html_url": "https://github.com/apache/directmemory",
 216  
      * "homepage": null,
 217  
      * "size": 3076,
 218  
      * "master_branch": "trunk",
 219  
      * "updated_at": "2011-11-26T09:39:35Z",
 220  
      * "owner": {
 221  
      * "avatar_url": "https://secure.gravatar.com/avatar/a676c0bf448fcd49f588249ead719b4c?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
 222  
      * "url": "https://api.github.com/users/apache",
 223  
      * "login": "apache",
 224  
      * "gravatar_id": "a676c0bf448fcd49f588249ead719b4c",
 225  
      * "id": 47359
 226  
      * },
 227  
      * "name": "directmemory",
 228  
      * "id": 2580771,
 229  
      * "ssh_url": "git@github.com:apache/directmemory.git"
 230  
      * },
 231  
      * "user": {
 232  
      * "avatar_url": "https://secure.gravatar.com/avatar/a676c0bf448fcd49f588249ead719b4c?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
 233  
      * "url": "https://api.github.com/users/apache",
 234  
      * "login": "apache",
 235  
      * "gravatar_id": "a676c0bf448fcd49f588249ead719b4c",
 236  
      * "id": 47359
 237  
      * },
 238  
      * "ref": "trunk",
 239  
      * "label": "apache:trunk",
 240  
      * "sha": "f9ddc283dbc4f391a0876b5bd36453ac7e563b79"
 241  
      * },
 242  
      * "html_url": "https://github.com/apache/directmemory/pull/1",
 243  
      * "updated_at": "2011-11-26T15:17:33Z",
 244  
      * "number": 1,
 245  
      * "issue_url": "https://github.com/apache/directmemory/issues/1",
 246  
      * "mergeable": true,
 247  
      * "additions": 6,
 248  
      * "patch_url": "https://github.com/apache/directmemory/pull/1.patch",
 249  
      * "id": 530496,
 250  
      * "comments": 0,
 251  
      * "body": "test email works to directmemory ml .",
 252  
      * "diff_url": "https://github.com/apache/directmemory/pull/1.diff"
 253  
      * }
 254  
      */
 255  
 
 256  
 }