{"action":"created","comment":{"url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/pulls/comments/48263301","id":48263301,"diff_hunk":"@@ -34,348 +44,445 @@\n  * @author Kohsuke Kawaguchi\n  * @author Jonathan Fuerth\n  * @author Ognjen Bubalo\n- * \n  */\n-public class JacocoPublisher extends Recorder {\n-    \n+public class JacocoPublisher extends Recorder implements SimpleBuildStep {\n+\n     /**\n      * Rule to be enforced. Can be null.\n-     *\n+     * <p>\n      * TODO: define a configuration mechanism.\n      */\n     public Rule rule;\n-    @Deprecated public transient String includes;\n-    @Deprecated public transient int moduleNum;\n+    @Deprecated\n+    public transient String includes;\n+    @Deprecated\n+    public transient int moduleNum;\n     /**\n      * {@link hudson.model.HealthReport} thresholds to apply.\n      */\n     public JacocoHealthReportThresholds healthReports;\n \n-    \n+\n     /**\n      * Variables containing the configuration set by the user.\n      */\n-\tprivate final String execPattern;\n-\tprivate final String classPattern;\n-\tprivate final String sourcePattern;\n-\tprivate final String inclusionPattern;\n-\tprivate final String exclusionPattern;\n-\t\n-    \n-    private final String minimumInstructionCoverage;\n-    private final String minimumBranchCoverage;\n-    private final String minimumComplexityCoverage;\n-    private final String minimumLineCoverage;\n-    private final String minimumMethodCoverage;\n-    private final String minimumClassCoverage;\n-    private final String maximumInstructionCoverage;\n-    private final String maximumBranchCoverage;\n-    private final String maximumComplexityCoverage;\n-    private final String maximumLineCoverage;\n-    private final String maximumMethodCoverage;\n-    private final String maximumClassCoverage;\n-    private final boolean changeBuildStatus;\n-    \n-\n-\t/**\n+    private String execPattern;\n+    private String classPattern;\n+    private String sourcePattern;\n+    private String inclusionPattern;\n+    private String exclusionPattern;\n+\n+\n+    private String minimumInstructionCoverage;\n+    private String minimumBranchCoverage;\n+    private String minimumComplexityCoverage;\n+    private String minimumLineCoverage;\n+    private String minimumMethodCoverage;\n+    private String minimumClassCoverage;\n+    private String maximumInstructionCoverage;\n+    private String maximumBranchCoverage;\n+    private String maximumComplexityCoverage;\n+    private String maximumLineCoverage;\n+    private String maximumMethodCoverage;\n+    private String maximumClassCoverage;\n+    private boolean changeBuildStatus;\n+\n+    @DataBoundConstructor\n+    public JacocoPublisher() {\n+        this.execPattern = \"**/**.exec\";\n+        this.classPattern = \"**/classes\";\n+        this.sourcePattern = \"**/src/main/java\";\n+        this.inclusionPattern = \"\";\n+        this.exclusionPattern = \"\";\n+        this.minimumInstructionCoverage = \"0\";\n+        this.minimumBranchCoverage = \"0\";\n+        this.minimumComplexityCoverage = \"0\";\n+        this.minimumLineCoverage = \"0\";\n+        this.minimumMethodCoverage = \"0\";\n+        this.minimumClassCoverage = \"0\";\n+        this.maximumInstructionCoverage = \"0\";\n+        this.maximumBranchCoverage = \"0\";\n+        this.maximumComplexityCoverage = \"0\";\n+        this.maximumLineCoverage = \"0\";\n+        this.maximumMethodCoverage = \"0\";\n+        this.maximumClassCoverage = \"0\";\n+        this.changeBuildStatus = false;\n+    }\n+\n+    /**\n      * Loads the configuration set by user.\n      */\n-    @DataBoundConstructor\n+    @Deprecated\n     public JacocoPublisher(String execPattern, String classPattern, String sourcePattern, String inclusionPattern, String exclusionPattern, String maximumInstructionCoverage, String maximumBranchCoverage\n-    \t\t, String maximumComplexityCoverage, String maximumLineCoverage, String maximumMethodCoverage, String maximumClassCoverage, String minimumInstructionCoverage, String minimumBranchCoverage\n-    \t\t, String minimumComplexityCoverage, String minimumLineCoverage, String minimumMethodCoverage, String minimumClassCoverage, boolean changeBuildStatus) {\n-    \tthis.execPattern = execPattern;\n-    \tthis.classPattern = classPattern;\n-    \tthis.sourcePattern = sourcePattern;\n-    \tthis.inclusionPattern = inclusionPattern;\n-    \tthis.exclusionPattern = exclusionPattern;\n-    \tthis.minimumInstructionCoverage = checkThresholdInput(minimumInstructionCoverage);\n-    \tthis.minimumBranchCoverage = checkThresholdInput(minimumBranchCoverage);\n-    \tthis.minimumComplexityCoverage = checkThresholdInput(minimumComplexityCoverage);\n-    \tthis.minimumLineCoverage = checkThresholdInput(minimumLineCoverage);\n-    \tthis.minimumMethodCoverage = checkThresholdInput(minimumMethodCoverage);\n-    \tthis.minimumClassCoverage = checkThresholdInput(minimumClassCoverage);\n-    \tthis.maximumInstructionCoverage = checkThresholdInput(maximumInstructionCoverage);\n-    \tthis.maximumBranchCoverage = checkThresholdInput(maximumBranchCoverage);\n-    \tthis.maximumComplexityCoverage = checkThresholdInput(maximumComplexityCoverage);\n-    \tthis.maximumLineCoverage = checkThresholdInput(maximumLineCoverage);\n-    \tthis.maximumMethodCoverage = checkThresholdInput(maximumMethodCoverage);\n-    \tthis.maximumClassCoverage = checkThresholdInput(maximumClassCoverage);\n-    \tthis.changeBuildStatus = changeBuildStatus;\n-    }\n-    \n+            , String maximumComplexityCoverage, String maximumLineCoverage, String maximumMethodCoverage, String maximumClassCoverage, String minimumInstructionCoverage, String minimumBranchCoverage\n+            , String minimumComplexityCoverage, String minimumLineCoverage, String minimumMethodCoverage, String minimumClassCoverage, boolean changeBuildStatus) {\n+        this.execPattern = execPattern;\n+        this.classPattern = classPattern;\n+        this.sourcePattern = sourcePattern;\n+        this.inclusionPattern = inclusionPattern;\n+        this.exclusionPattern = exclusionPattern;\n+        this.minimumInstructionCoverage = checkThresholdInput(minimumInstructionCoverage);\n+        this.minimumBranchCoverage = checkThresholdInput(minimumBranchCoverage);\n+        this.minimumComplexityCoverage = checkThresholdInput(minimumComplexityCoverage);\n+        this.minimumLineCoverage = checkThresholdInput(minimumLineCoverage);\n+        this.minimumMethodCoverage = checkThresholdInput(minimumMethodCoverage);\n+        this.minimumClassCoverage = checkThresholdInput(minimumClassCoverage);\n+        this.maximumInstructionCoverage = checkThresholdInput(maximumInstructionCoverage);\n+        this.maximumBranchCoverage = checkThresholdInput(maximumBranchCoverage);\n+        this.maximumComplexityCoverage = checkThresholdInput(maximumComplexityCoverage);\n+        this.maximumLineCoverage = checkThresholdInput(maximumLineCoverage);\n+        this.maximumMethodCoverage = checkThresholdInput(maximumMethodCoverage);\n+        this.maximumClassCoverage = checkThresholdInput(maximumClassCoverage);\n+        this.changeBuildStatus = changeBuildStatus;\n+    }\n+\n     public String checkThresholdInput(String input) {\n-    \tif ((input == null) || (\"\".equals(input))) {\n-    \t\treturn 0+\"\";\n-    \t}\n-    \ttry {\n-    \t\tInteger.parseInt(input);\n-    \t} catch(NumberFormatException nfe) {\n-    \t\treturn  0+\"\";\n-    \t}\n-    \treturn input;\n+        if ((input == null) || (\"\".equals(input))) {\n+            return 0 + \"\";\n+        }\n+        try {\n+            Integer.parseInt(input);\n+        } catch (NumberFormatException nfe) {\n+            return 0 + \"\";\n+        }\n+        return input;\n     }\n \n \n-\t@Override\n-\tpublic String toString() {\n-\t\treturn \"JacocoPublisher [execPattern=\" + execPattern\n-\t\t\t\t+ \", classPattern=\" + classPattern + \", sourcePattern=\"\n-\t\t\t\t+ sourcePattern + \", inclusionPattern=\" + inclusionPattern\n-\t\t\t\t+ \", exclusionPattern=\" + exclusionPattern\n-\t\t\t\t+ \", minimumInstructionCoverage=\" + minimumInstructionCoverage\n-\t\t\t\t+ \", minimumBranchCoverage=\" + minimumBranchCoverage\n-\t\t\t\t+ \", minimumComplexityCoverage=\" + minimumComplexityCoverage\n-\t\t\t\t+ \", minimumLineCoverage=\" + minimumLineCoverage\n-\t\t\t\t+ \", minimumMethodCoverage=\" + minimumMethodCoverage\n-\t\t\t\t+ \", minimumClassCoverage=\" + minimumClassCoverage\n-\t\t\t\t+ \", maximumInstructionCoverage=\" + maximumInstructionCoverage\n-\t\t\t\t+ \", maximumBranchCoverage=\" + maximumBranchCoverage\n-\t\t\t\t+ \", maximumComplexityCoverage=\" + maximumComplexityCoverage\n-\t\t\t\t+ \", maximumLineCoverage=\" + maximumLineCoverage\n-\t\t\t\t+ \", maximumMethodCoverage=\" + maximumMethodCoverage\n-\t\t\t\t+ \", maximumClassCoverage=\" + maximumClassCoverage + \"]\";\n-\t}\n+    @Override\n+    public String toString() {\n+        return \"JacocoPublisher [execPattern=\" + execPattern\n+                + \", classPattern=\" + classPattern + \", sourcePattern=\"\n+                + sourcePattern + \", inclusionPattern=\" + inclusionPattern\n+                + \", exclusionPattern=\" + exclusionPattern\n+                + \", minimumInstructionCoverage=\" + minimumInstructionCoverage\n+                + \", minimumBranchCoverage=\" + minimumBranchCoverage\n+                + \", minimumComplexityCoverage=\" + minimumComplexityCoverage\n+                + \", minimumLineCoverage=\" + minimumLineCoverage\n+                + \", minimumMethodCoverage=\" + minimumMethodCoverage\n+                + \", minimumClassCoverage=\" + minimumClassCoverage\n+                + \", maximumInstructionCoverage=\" + maximumInstructionCoverage\n+                + \", maximumBranchCoverage=\" + maximumBranchCoverage\n+                + \", maximumComplexityCoverage=\" + maximumComplexityCoverage\n+                + \", maximumLineCoverage=\" + maximumLineCoverage\n+                + \", maximumMethodCoverage=\" + maximumMethodCoverage\n+                + \", maximumClassCoverage=\" + maximumClassCoverage + \"]\";\n+    }\n \n \n+    public String getExecPattern() {\n+        return execPattern;\n+    }\n \n-\tpublic String getExecPattern() {\n-\t\treturn execPattern;\n-\t}\n+    public String getClassPattern() {\n+        return classPattern;\n+    }\n \n-\tpublic String getClassPattern() {\n-\t\treturn classPattern;\n-\t}\n+    public String getSourcePattern() {\n+        return sourcePattern;\n+    }\n \n-\tpublic String getSourcePattern() {\n-\t\treturn sourcePattern;\n-\t}\n-\t\n-\tpublic String getInclusionPattern() {\n-\t\treturn inclusionPattern;\n-\t}\n+    public String getInclusionPattern() {\n+        return inclusionPattern;\n+    }\n \n-\tpublic String getExclusionPattern() {\n-\t\treturn exclusionPattern;\n-\t}\n+    public String getExclusionPattern() {\n+        return exclusionPattern;\n+    }\n \n+    public String getMinimumInstructionCoverage() {\n+        return minimumInstructionCoverage;\n+    }\n \n+    public String getMinimumBranchCoverage() {\n+        return minimumBranchCoverage;\n+    }\n \n-\tpublic String getMinimumInstructionCoverage() {\n-\t\treturn minimumInstructionCoverage;\n-\t}\n+    public String getMinimumComplexityCoverage() {\n+        return minimumComplexityCoverage;\n+    }\n \n+    public String getMinimumLineCoverage() {\n+        return minimumLineCoverage;\n+    }\n \n+    public String getMinimumMethodCoverage() {\n+        return minimumMethodCoverage;\n+    }\n \n-\tpublic String getMinimumBranchCoverage() {\n-\t\treturn minimumBranchCoverage;\n-\t}\n+    public String getMinimumClassCoverage() {\n+        return minimumClassCoverage;\n+    }\n \n+    public String getMaximumInstructionCoverage() {\n+        return maximumInstructionCoverage;\n+    }\n \n+    public String getMaximumBranchCoverage() {\n+        return maximumBranchCoverage;\n+    }\n \n-\tpublic String getMinimumComplexityCoverage() {\n-\t\treturn minimumComplexityCoverage;\n-\t}\n+    public String getMaximumComplexityCoverage() {\n+        return maximumComplexityCoverage;\n+    }\n \n+    public String getMaximumLineCoverage() {\n+        return maximumLineCoverage;\n+    }\n \n+    public String getMaximumMethodCoverage() {\n+        return maximumMethodCoverage;\n+    }\n \n-\tpublic String getMinimumLineCoverage() {\n-\t\treturn minimumLineCoverage;\n-\t}\n+    public String getMaximumClassCoverage() {\n+        return maximumClassCoverage;\n+    }\n \n \n+    public boolean isChangeBuildStatus() {\n+        return changeBuildStatus;\n+    }\n \n-\tpublic String getMinimumMethodCoverage() {\n-\t\treturn minimumMethodCoverage;\n-\t}\n+    public boolean getChangeBuildStatus() {\n+        return changeBuildStatus;\n+    }\n \n+    /** Setters for Workflow **/\n \n+    @DataBoundSetter\n+    public void setExecPattern(String execPattern) {\n+        this.execPattern = execPattern;\n+    }\n \n-\tpublic String getMinimumClassCoverage() {\n-\t\treturn minimumClassCoverage;\n-\t}\n+    @DataBoundSetter\n+    public void setClassPattern(String classPattern) {\n+        this.classPattern = classPattern;\n+    }\n \n+    @DataBoundSetter\n+    public void setSourcePattern(String sourcePattern) {\n+        this.sourcePattern = sourcePattern;\n+    }\n \n+    @DataBoundSetter\n+    public void setMinimumInstructionCoverage(String minimumInstructionCoverage) {\n+        this.minimumInstructionCoverage = checkThresholdInput(minimumInstructionCoverage);\n+    }\n \n-\tpublic String getMaximumInstructionCoverage() {\n-\t\treturn maximumInstructionCoverage;\n-\t}\n+    @DataBoundSetter\n+    public void setMinimumBranchCoverage(String minimumBranchCoverage) {\n+        this.minimumBranchCoverage = checkThresholdInput(minimumBranchCoverage);\n+    }\n \n+    @DataBoundSetter\n+    public void setMinimumComplexityCoverage(String minimumComplexityCoverage) {\n+        this.minimumComplexityCoverage = checkThresholdInput(minimumComplexityCoverage);\n+    }\n \n+    @DataBoundSetter\n+    public void setMinimumLineCoverage(String minimumLineCoverage) {\n+        this.minimumLineCoverage = checkThresholdInput(minimumLineCoverage);\n+    }\n \n-\tpublic String getMaximumBranchCoverage() {\n-\t\treturn maximumBranchCoverage;\n-\t}\n+    @DataBoundSetter\n+    public void setMinimumMethodCoverage(String minimumMethodCoverage) {\n+        this.minimumMethodCoverage = checkThresholdInput(minimumMethodCoverage);\n+    }\n \n+    @DataBoundSetter\n+    public void setMinimumClassCoverage(String minimumClassCoverage) {\n+        this.minimumClassCoverage = checkThresholdInput(minimumClassCoverage);\n+    }\n \n+    @DataBoundSetter\n+    public void setMaximumInstructionCoverage(String maximumInstructionCoverage) {\n+        this.maximumInstructionCoverage = checkThresholdInput(maximumInstructionCoverage);\n+    }\n \n-\tpublic String getMaximumComplexityCoverage() {\n-\t\treturn maximumComplexityCoverage;\n-\t}\n+    @DataBoundSetter\n+    public void setMaximumBranchCoverage(String maximumBranchCoverage) {\n+        this.maximumBranchCoverage = checkThresholdInput(maximumBranchCoverage);\n+    }\n \n+    @DataBoundSetter\n+    public void setMaximumComplexityCoverage(String maximumComplexityCoverage) {\n+        this.maximumComplexityCoverage = checkThresholdInput(maximumComplexityCoverage);\n+    }\n \n+    @DataBoundSetter\n+    public void setMaximumLineCoverage(String maximumLineCoverage) {\n+        this.maximumLineCoverage = checkThresholdInput(maximumLineCoverage);\n+    }\n \n-\tpublic String getMaximumLineCoverage() {\n-\t\treturn maximumLineCoverage;\n-\t}\n+    @DataBoundSetter\n+    public void setMaximumMethodCoverage(String maximumMethodCoverage) {\n+        this.maximumMethodCoverage = checkThresholdInput(maximumMethodCoverage);\n+    }\n \n+    @DataBoundSetter\n+    public void setMaximumClassCoverage(String maximumClassCoverage) {\n+        this.maximumClassCoverage = checkThresholdInput(maximumClassCoverage);\n+    }\n \n+    @DataBoundSetter\n+    public void setChangeBuildStatus(boolean changeBuildStatus) {\n+        this.changeBuildStatus = changeBuildStatus;\n+    }\n \n-\tpublic String getMaximumMethodCoverage() {\n-\t\treturn maximumMethodCoverage;\n-\t}\n+    @DataBoundSetter\n+    public void setInclusionPattern(String inclusionPattern) {\n+        this.inclusionPattern = inclusionPattern;\n+    }\n \n+    @DataBoundSetter\n+    public void setExclusionPattern(String exclusionPattern) {\n+        this.exclusionPattern = exclusionPattern;\n+    }\n \n+    /** End Setters for Workflow **/","path":"src/main/java/hudson/plugins/jacoco/JacocoPublisher.java","position":457,"original_position":457,"commit_id":"ce1f7322f1462ba35c2f7cecc1556d2456066c64","original_commit_id":"ce1f7322f1462ba35c2f7cecc1556d2456066c64","user":{"login":"amuniz","id":1017585,"avatar_url":"https://avatars.githubusercontent.com/u/1017585?v=3","gravatar_id":"","url":"https://api.github.com/users/amuniz","html_url":"https://github.com/amuniz","followers_url":"https://api.github.com/users/amuniz/followers","following_url":"https://api.github.com/users/amuniz/following{/other_user}","gists_url":"https://api.github.com/users/amuniz/gists{/gist_id}","starred_url":"https://api.github.com/users/amuniz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/amuniz/subscriptions","organizations_url":"https://api.github.com/users/amuniz/orgs","repos_url":"https://api.github.com/users/amuniz/repos","events_url":"https://api.github.com/users/amuniz/events{/privacy}","received_events_url":"https://api.github.com/users/amuniz/received_events","type":"User","site_admin":false},"body":"Well, it's not for workflow. It's in general a good practice to use `@DataBoundSetter`s for fields that have a default value.","created_at":"2015-12-22T15:26:49Z","updated_at":"2015-12-22T15:26:49Z","html_url":"https://github.com/jenkinsci/jacoco-plugin/pull/63#discussion_r48263301","pull_request_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/pulls/63","_links":{"self":{"href":"https://api.github.com/repos/jenkinsci/jacoco-plugin/pulls/comments/48263301"},"html":{"href":"https://github.com/jenkinsci/jacoco-plugin/pull/63#discussion_r48263301"},"pull_request":{"href":"https://api.github.com/repos/jenkinsci/jacoco-plugin/pulls/63"}}},"pull_request":{"url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/pulls/63","id":54364616,"html_url":"https://github.com/jenkinsci/jacoco-plugin/pull/63","diff_url":"https://github.com/jenkinsci/jacoco-plugin/pull/63.diff","patch_url":"https://github.com/jenkinsci/jacoco-plugin/pull/63.patch","issue_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/issues/63","number":63,"state":"open","locked":false,"title":"[JENKINS-27120] Adding Workflow support for JaCoCo publisher","user":{"login":"lordofthejars","id":1517153,"avatar_url":"https://avatars.githubusercontent.com/u/1517153?v=3","gravatar_id":"","url":"https://api.github.com/users/lordofthejars","html_url":"https://github.com/lordofthejars","followers_url":"https://api.github.com/users/lordofthejars/followers","following_url":"https://api.github.com/users/lordofthejars/following{/other_user}","gists_url":"https://api.github.com/users/lordofthejars/gists{/gist_id}","starred_url":"https://api.github.com/users/lordofthejars/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lordofthejars/subscriptions","organizations_url":"https://api.github.com/users/lordofthejars/orgs","repos_url":"https://api.github.com/users/lordofthejars/repos","events_url":"https://api.github.com/users/lordofthejars/events{/privacy}","received_events_url":"https://api.github.com/users/lordofthejars/received_events","type":"User","site_admin":false},"body":"There is no test since testing JaCoCo plugin in unit test it goes to a chicken-egg problem. JaCoCo needs a classes directory to copy them to its internal structure, so the first idea is to copy those classes before executing the job, but then Jenkins complains that this job has already created a directory and it is not executed. I have tested manually and it works and a test should be added to ATH.\r\n\r\nIn fact if you look at all JaCoCoPublisher tests that were already created you'll notice that they do nothing or are commented, probably because of the same problem I faced during Workflow integration.\r\n\r\nIssue: https://issues.jenkins-ci.org/browse/JENKINS-27120\r\n\r\n@reviewbybees ","created_at":"2015-12-22T12:29:43Z","updated_at":"2015-12-22T15:26:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5f0f53a5c85b495cbceaac34fbfd90d91506b523","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/pulls/63/commits","review_comments_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/pulls/63/comments","review_comment_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/pulls/comments{/number}","comments_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/issues/63/comments","statuses_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/statuses/ce1f7322f1462ba35c2f7cecc1556d2456066c64","head":{"label":"lordofthejars:JENKINS-27120","ref":"JENKINS-27120","sha":"ce1f7322f1462ba35c2f7cecc1556d2456066c64","user":{"login":"lordofthejars","id":1517153,"avatar_url":"https://avatars.githubusercontent.com/u/1517153?v=3","gravatar_id":"","url":"https://api.github.com/users/lordofthejars","html_url":"https://github.com/lordofthejars","followers_url":"https://api.github.com/users/lordofthejars/followers","following_url":"https://api.github.com/users/lordofthejars/following{/other_user}","gists_url":"https://api.github.com/users/lordofthejars/gists{/gist_id}","starred_url":"https://api.github.com/users/lordofthejars/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lordofthejars/subscriptions","organizations_url":"https://api.github.com/users/lordofthejars/orgs","repos_url":"https://api.github.com/users/lordofthejars/repos","events_url":"https://api.github.com/users/lordofthejars/events{/privacy}","received_events_url":"https://api.github.com/users/lordofthejars/received_events","type":"User","site_admin":false},"repo":{"id":48188950,"name":"jacoco-plugin","full_name":"lordofthejars/jacoco-plugin","owner":{"login":"lordofthejars","id":1517153,"avatar_url":"https://avatars.githubusercontent.com/u/1517153?v=3","gravatar_id":"","url":"https://api.github.com/users/lordofthejars","html_url":"https://github.com/lordofthejars","followers_url":"https://api.github.com/users/lordofthejars/followers","following_url":"https://api.github.com/users/lordofthejars/following{/other_user}","gists_url":"https://api.github.com/users/lordofthejars/gists{/gist_id}","starred_url":"https://api.github.com/users/lordofthejars/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lordofthejars/subscriptions","organizations_url":"https://api.github.com/users/lordofthejars/orgs","repos_url":"https://api.github.com/users/lordofthejars/repos","events_url":"https://api.github.com/users/lordofthejars/events{/privacy}","received_events_url":"https://api.github.com/users/lordofthejars/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/lordofthejars/jacoco-plugin","description":"Jenkins JaCoCo Plugin","fork":true,"url":"https://api.github.com/repos/lordofthejars/jacoco-plugin","forks_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/forks","keys_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/teams","hooks_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/hooks","issue_events_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/issues/events{/number}","events_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/events","assignees_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/assignees{/user}","branches_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/branches{/branch}","tags_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/tags","blobs_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/git/refs{/sha}","trees_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/statuses/{sha}","languages_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/languages","stargazers_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/stargazers","contributors_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/contributors","subscribers_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/subscribers","subscription_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/subscription","commits_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/commits{/sha}","git_commits_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/git/commits{/sha}","comments_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/comments{/number}","issue_comment_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/issues/comments{/number}","contents_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/contents/{+path}","compare_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/merges","archive_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/downloads","issues_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/issues{/number}","pulls_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/pulls{/number}","milestones_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/milestones{/number}","notifications_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/labels{/name}","releases_url":"https://api.github.com/repos/lordofthejars/jacoco-plugin/releases{/id}","created_at":"2015-12-17T17:39:51Z","updated_at":"2015-12-17T17:39:52Z","pushed_at":"2015-12-22T12:24:55Z","git_url":"git://github.com/lordofthejars/jacoco-plugin.git","ssh_url":"git@github.com:lordofthejars/jacoco-plugin.git","clone_url":"https://github.com/lordofthejars/jacoco-plugin.git","svn_url":"https://github.com/lordofthejars/jacoco-plugin","homepage":"https://wiki.jenkins-ci.org/display/JENKINS/JaCoCo+Plugin","size":790,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"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":"jenkinsci:master","ref":"master","sha":"c5edf40d484ec11a2ccbc20f73b2c482dbf8c261","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":4522681,"name":"jacoco-plugin","full_name":"jenkinsci/jacoco-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/jacoco-plugin","description":"Jenkins JaCoCo Plugin","fork":false,"url":"https://api.github.com/repos/jenkinsci/jacoco-plugin","forks_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/forks","keys_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/teams","hooks_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/hooks","issue_events_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/issues/events{/number}","events_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/events","assignees_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/assignees{/user}","branches_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/branches{/branch}","tags_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/tags","blobs_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/git/refs{/sha}","trees_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/statuses/{sha}","languages_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/languages","stargazers_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/stargazers","contributors_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/contributors","subscribers_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/subscribers","subscription_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/subscription","commits_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/commits{/sha}","git_commits_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/git/commits{/sha}","comments_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/comments{/number}","issue_comment_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/issues/comments{/number}","contents_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/contents/{+path}","compare_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/merges","archive_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/downloads","issues_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/issues{/number}","pulls_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/pulls{/number}","milestones_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/milestones{/number}","notifications_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/labels{/name}","releases_url":"https://api.github.com/repos/jenkinsci/jacoco-plugin/releases{/id}","created_at":"2012-06-01T18:12:38Z","updated_at":"2015-12-21T10:42:10Z","pushed_at":"2015-12-22T12:29:44Z","git_url":"git://github.com/jenkinsci/jacoco-plugin.git","ssh_url":"git@github.com:jenkinsci/jacoco-plugin.git","clone_url":"https://github.com/jenkinsci/jacoco-plugin.git","svn_url":"https://github.com/jenkinsci/jacoco-plugin","homepage":"https://wiki.jenkins-ci.org/display/JENKINS/JaCoCo+Plugin","size":955,"stargazers_count":44,"watchers_count":44,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":65,"mirror_url":null,"open_issues_count":13,"forks":65,"open_issues":13,"watchers":44,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/jenkinsci/jacoco-plugin/pulls/63"},"html":{"href":"https://github.com/jenkinsci/jacoco-plugin/pull/63"},"issue":{"href":"https://api.github.com/repos/jenkinsci/jacoco-plugin/issues/63"},"comments":{"href":"https://api.github.com/repos/jenkinsci/jacoco-plugin/issues/63/comments"},"review_comments":{"href":"https://api.github.com/repos/jenkinsci/jacoco-plugin/pulls/63/comments"},"review_comment":{"href":"https://api.github.com/repos/jenkinsci/jacoco-plugin/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/jenkinsci/jacoco-plugin/pulls/63/commits"},"statuses":{"href":"https://api.github.com/repos/jenkinsci/jacoco-plugin/statuses/ce1f7322f1462ba35c2f7cecc1556d2456066c64"}}}}