You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2011/11/26 23:50:04 UTC

svn commit: r1206627 - in /maven/sandbox/trunk/plugins/maven-patch-tracker-plugin: ./ src/main/java/org/apache/maven/plugins/patchtracker/ src/main/java/org/apache/maven/plugins/patchtracker/github/

Author: olamy
Date: Sat Nov 26 22:50:03 2011
New Revision: 1206627

URL: http://svn.apache.org/viewvc?rev=1206627&view=rev
Log:
mojo to create a jira issue from a pull request

Added:
    maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/PullRequestToJiraMojo.java   (with props)
    maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/github/
    maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/github/PullRequest.java   (with props)
Modified:
    maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/pom.xml
    maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/AbstractPatchMojo.java

Modified: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/pom.xml?rev=1206627&r1=1206626&r2=1206627&view=diff
==============================================================================
--- maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/pom.xml (original)
+++ maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/pom.xml Sat Nov 26 22:50:03 2011
@@ -146,6 +146,29 @@ under the License.
     </dependency>
 
     <dependency>
+      <groupId>org.codehaus.jackson</groupId>
+      <artifactId>jackson-mapper-asl</artifactId>
+      <version>1.9.2</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.httpcomponents</groupId>
+      <artifactId>httpclient</artifactId>
+      <version>4.1.2</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.httpcomponents</groupId>
+      <artifactId>httpcore</artifactId>
+      <version>4.1.2</version>
+    </dependency>
+
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <version>2.0.1</version>
+    </dependency>
+
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>4.10</version>

Modified: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/AbstractPatchMojo.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/AbstractPatchMojo.java?rev=1206627&r1=1206626&r2=1206627&view=diff
==============================================================================
--- maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/AbstractPatchMojo.java (original)
+++ maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/AbstractPatchMojo.java Sat Nov 26 22:50:03 2011
@@ -34,10 +34,14 @@ import org.apache.maven.scm.repository.S
 import org.apache.maven.scm.repository.ScmRepositoryException;
 import org.apache.maven.settings.Server;
 import org.apache.maven.settings.Settings;
+import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.components.interactivity.Prompter;
 import org.codehaus.plexus.components.interactivity.PrompterException;
+import org.codehaus.plexus.context.Context;
+import org.codehaus.plexus.context.ContextException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
 
 import java.io.File;
 import java.util.Arrays;
@@ -49,6 +53,7 @@ import java.util.List;
  */
 public abstract class AbstractPatchMojo
     extends AbstractMojo
+    implements Contextualizable
 {
     /**
      * The Maven Project Object.
@@ -142,9 +147,6 @@ public abstract class AbstractPatchMojo
      */
     protected Prompter prompter;
 
-    /**
-     * @component
-     */
     protected PlexusContainer plexusContainer;
 
     /**
@@ -418,4 +420,10 @@ public abstract class AbstractPatchMojo
 
         return (PatchTracker) plexusContainer.lookup( PatchTracker.class.getName(), system );
     }
+
+    public void contextualize( Context context )
+        throws ContextException
+    {
+        this.plexusContainer = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+    }
 }

Added: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/PullRequestToJiraMojo.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/PullRequestToJiraMojo.java?rev=1206627&view=auto
==============================================================================
--- maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/PullRequestToJiraMojo.java (added)
+++ maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/PullRequestToJiraMojo.java Sat Nov 26 22:50:03 2011
@@ -0,0 +1,148 @@
+package org.apache.maven.plugins.patchtracker;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.io.IOUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.patchtracker.github.PullRequest;
+import org.apache.maven.plugins.patchtracker.tracking.PatchTracker;
+import org.apache.maven.plugins.patchtracker.tracking.PatchTrackerException;
+import org.apache.maven.plugins.patchtracker.tracking.PatchTrackerRequest;
+import org.apache.maven.plugins.patchtracker.tracking.PatchTrackerResult;
+import org.codehaus.jackson.map.DeserializationConfig;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+
+import java.io.IOException;
+
+
+/**
+ * @author Olivier Lamy
+ * @goal create-issue-from-patch-request
+ * @aggregator
+ */
+public class PullRequestToJiraMojo
+    extends AbstractPatchMojo
+{
+
+    /**
+     * github user/organization  : github.com/apache use apache
+     *
+     * @parameter expression="${patch.pullrequest.user}" default-value=""
+     */
+    protected String user;
+
+    /**
+     * github repo  : github.com/apache/maven-3 use maven-3
+     *
+     * @parameter expression="${patch.pullrequest.repo}" default-value=""
+     */
+    protected String repo;
+
+    /**
+     * pull request id
+     *
+     * @parameter expression="${patch.pullrequest.id}" default-value=""
+     */
+    protected String pullRequestId;
+
+
+    /**
+     * github api url
+     *
+     * @parameter expression="${patch.pullrequest.githubApiUrl}" default-value="https://api.github.com/repos"
+     */
+    protected String githubApiUrl;
+
+
+    DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
+
+    public void execute()
+        throws MojoExecutionException, MojoFailureException
+    {
+        // format curl -v https://api.github.com/repos/apache/directmemory/pulls/1
+        try
+        {
+
+            String url = githubApiUrl + "/" + user + "/" + repo + "/pulls/" + pullRequestId;
+            getLog().debug( "url" + url );
+
+            HttpGet httpGet = new HttpGet( url );
+
+            HttpResponse httpResponse = defaultHttpClient.execute( httpGet );
+
+            ObjectMapper objectMapper = new ObjectMapper();
+
+            // we don't parse all stuff
+            objectMapper.configure( DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false );
+
+            String response = IOUtils.toString( httpResponse.getEntity().getContent() );
+
+            getLog().debug( "response:" + response );
+
+            PullRequest pullRequest = objectMapper.reader( PullRequest.class ).readValue( response );
+
+            getLog().debug( "pullRequest:" + pullRequest.toString() );
+
+            PatchTrackerRequest patchTrackerRequest = buidPatchTrackerRequest( false );
+
+            patchTrackerRequest.setSummary( pullRequest.getTitle() );
+
+            patchTrackerRequest.setDescription( pullRequest.getBody() + ". url: " + pullRequest.getPatch_url() );
+
+            patchTrackerRequest.setPatchContent( getPatchContent( pullRequest ) );
+
+            PatchTracker patchTracker = getPatchTracker();
+
+            PatchTrackerResult result = patchTracker.createPatch( patchTrackerRequest );
+            getLog().info( "issue created with id:" + result.getPatchId() + ", url:" + result.getPatchUrl() );
+        }
+        catch ( ClientProtocolException e )
+        {
+            throw new MojoExecutionException( e.getMessage(), e );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( e.getMessage(), e );
+        }
+        catch ( ComponentLookupException e )
+        {
+            throw new MojoExecutionException( e.getMessage(), e );
+        }
+        catch ( PatchTrackerException e )
+        {
+            throw new MojoExecutionException( e.getMessage(), e );
+        }
+    }
+
+    protected String getPatchContent( PullRequest pullRequest )
+        throws IOException, ClientProtocolException
+    {
+        HttpGet httpGet = new HttpGet( pullRequest.getPatch_url() );
+
+        HttpResponse httpResponse = defaultHttpClient.execute( httpGet );
+
+        return IOUtils.toString( httpResponse.getEntity().getContent() );
+    }
+}

Propchange: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/PullRequestToJiraMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/PullRequestToJiraMojo.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/github/PullRequest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/github/PullRequest.java?rev=1206627&view=auto
==============================================================================
--- maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/github/PullRequest.java (added)
+++ maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/github/PullRequest.java Sat Nov 26 22:50:03 2011
@@ -0,0 +1,231 @@
+package org.apache.maven.plugins.patchtracker.github;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.Serializable;
+
+/**
+ * @author Olivier Lamy
+ */
+public class PullRequest
+    implements Serializable
+{
+    /**
+     * json format
+     * <p/>
+     * curl -v https://api.github.com/repos/apache/directmemory/pulls/1
+     * <p/>
+     * {
+     * "merged_by": null,
+     * "merged": false,
+     * "title": "test wonderful patch ",
+     * "head": {
+     * "repo": {
+     * "watchers": 1,
+     * "forks": 0,
+     * "pushed_at": "2011-11-26T15:17:32Z",
+     * "svn_url": "https://svn.github.com/olamy/directmemory",
+     * "description": "Mirror of Apache DirectMemory",
+     * "created_at": "2011-11-26T09:39:35Z",
+     * "url": "https://api.github.com/repos/olamy/directmemory",
+     * "fork": true,
+     * "language": "Java",
+     * "git_url": "git://github.com/olamy/directmemory.git",
+     * "clone_url": "https://github.com/olamy/directmemory.git",
+     * "open_issues": 0,
+     * "private": false,
+     * "html_url": "https://github.com/olamy/directmemory",
+     * "homepage": null,
+     * "size": 112,
+     * "master_branch": "trunk",
+     * "updated_at": "2011-11-26T15:17:32Z",
+     * "owner": {
+     * "avatar_url": "https://secure.gravatar.com/avatar/bab29f762bea8e578505424443d8cd41?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
+     * "url": "https://api.github.com/users/olamy",
+     * "login": "olamy",
+     * "gravatar_id": "bab29f762bea8e578505424443d8cd41",
+     * "id": 19728
+     * },
+     * "name": "directmemory",
+     * "id": 2854963,
+     * "ssh_url": "git@github.com:olamy/directmemory.git"
+     * },
+     * "user": {
+     * "avatar_url": "https://secure.gravatar.com/avatar/bab29f762bea8e578505424443d8cd41?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
+     * "url": "https://api.github.com/users/olamy",
+     * "login": "olamy",
+     * "gravatar_id": "bab29f762bea8e578505424443d8cd41",
+     * "id": 19728
+     * },
+     * "ref": "trunk",
+     * "label": "olamy:trunk",
+     * "sha": "73d403199b415108a6f2a72c95b9ec684e6f1dc1"
+     * },
+     * "_links": {
+     * "html": {
+     * "href": "https://github.com/apache/directmemory/pull/1"
+     * },
+     * "review_comments": {
+     * "href": "https://api.github.com/repos/apache/directmemory/pulls/1/comments"
+     * },
+     * "self": {
+     * "href": "https://api.github.com/repos/apache/directmemory/pulls/1"
+     * },
+     * "comments": {
+     * "href": "https://api.github.com/repos/apache/directmemory/issues/1/comments"
+     * }
+     * },
+     * "merged_at": null,
+     * "created_at": "2011-11-26T14:59:52Z",
+     * "state": "open",
+     * "url": "https://api.github.com/repos/apache/directmemory/pulls/1",
+     * "commits": 3,
+     * "deletions": 0,
+     * "changed_files": 2,
+     * "review_comments": 0,
+     * "closed_at": null,
+     * "user": {
+     * "avatar_url": "https://secure.gravatar.com/avatar/bab29f762bea8e578505424443d8cd41?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
+     * "url": "https://api.github.com/users/olamy",
+     * "login": "olamy",
+     * "gravatar_id": "bab29f762bea8e578505424443d8cd41",
+     * "id": 19728
+     * },
+     * "base": {
+     * "repo": {
+     * "watchers": 3,
+     * "forks": 2,
+     * "pushed_at": "2011-11-03T00:02:25Z",
+     * "svn_url": "https://svn.github.com/apache/directmemory",
+     * "description": "Mirror of Apache DirectMemory",
+     * "created_at": "2011-10-15T07:00:08Z",
+     * "url": "https://api.github.com/repos/apache/directmemory",
+     * "fork": false,
+     * "language": "Java",
+     * "git_url": "git://github.com/apache/directmemory.git",
+     * "clone_url": "https://github.com/apache/directmemory.git",
+     * "open_issues": 0,
+     * "private": false,
+     * "html_url": "https://github.com/apache/directmemory",
+     * "homepage": null,
+     * "size": 3076,
+     * "master_branch": "trunk",
+     * "updated_at": "2011-11-26T09:39:35Z",
+     * "owner": {
+     * "avatar_url": "https://secure.gravatar.com/avatar/a676c0bf448fcd49f588249ead719b4c?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
+     * "url": "https://api.github.com/users/apache",
+     * "login": "apache",
+     * "gravatar_id": "a676c0bf448fcd49f588249ead719b4c",
+     * "id": 47359
+     * },
+     * "name": "directmemory",
+     * "id": 2580771,
+     * "ssh_url": "git@github.com:apache/directmemory.git"
+     * },
+     * "user": {
+     * "avatar_url": "https://secure.gravatar.com/avatar/a676c0bf448fcd49f588249ead719b4c?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png",
+     * "url": "https://api.github.com/users/apache",
+     * "login": "apache",
+     * "gravatar_id": "a676c0bf448fcd49f588249ead719b4c",
+     * "id": 47359
+     * },
+     * "ref": "trunk",
+     * "label": "apache:trunk",
+     * "sha": "f9ddc283dbc4f391a0876b5bd36453ac7e563b79"
+     * },
+     * "html_url": "https://github.com/apache/directmemory/pull/1",
+     * "updated_at": "2011-11-26T15:17:33Z",
+     * "number": 1,
+     * "issue_url": "https://github.com/apache/directmemory/issues/1",
+     * "mergeable": true,
+     * "additions": 6,
+     * "patch_url": "https://github.com/apache/directmemory/pull/1.patch",
+     * "id": 530496,
+     * "comments": 0,
+     * "body": "test email works to directmemory ml .",
+     * "diff_url": "https://github.com/apache/directmemory/pull/1.diff"
+     * }
+     */
+
+    private String title;
+
+    private String html_url;
+
+    private String patch_url;
+
+    private String body;
+
+    public PullRequest()
+    {
+        // no op
+    }
+
+    public String getTitle()
+    {
+        return title;
+    }
+
+    public void setTitle( String title )
+    {
+        this.title = title;
+    }
+
+    public String getHtml_url()
+    {
+        return html_url;
+    }
+
+    public void setHtml_url( String html_url )
+    {
+        this.html_url = html_url;
+    }
+
+    public String getPatch_url()
+    {
+        return patch_url;
+    }
+
+    public void setPatch_url( String patch_url )
+    {
+        this.patch_url = patch_url;
+    }
+
+    public String getBody()
+    {
+        return body;
+    }
+
+    public void setBody( String body )
+    {
+        this.body = body;
+    }
+
+    @Override
+    public String toString()
+    {
+        final StringBuilder sb = new StringBuilder();
+        sb.append( "PullRequest" );
+        sb.append( "{title='" ).append( title ).append( '\'' );
+        sb.append( ", html_url='" ).append( html_url ).append( '\'' );
+        sb.append( ", patch_url='" ).append( patch_url ).append( '\'' );
+        sb.append( ", body='" ).append( body ).append( '\'' );
+        sb.append( '}' );
+        return sb.toString();
+    }
+}

Propchange: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/github/PullRequest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/github/PullRequest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision