Giter VIP home page Giter VIP logo

qwazer / maven-confluence-plugin Goto Github PK

View Code? Open in Web Editor NEW

This project forked from bsorrentino/maven-confluence-plugin

0.0 0.0 0.0 14.92 MB

Maven's plugin that allow to generate "project's documentation" directly to confluence allowing, in the same time, to keep in-sync both project & documentation

Home Page: http://bsorrentino.github.io/maven-confluence-plugin/

License: Apache License 2.0

Java 55.70% HTML 29.68% Dockerfile 0.05% JavaScript 2.47% CSS 5.68% Mustache 0.07% Shell 0.07% Kotlin 6.28%

maven-confluence-plugin's People

Contributors

3a04huk avatar bsorrentino avatar dependabot[bot] avatar gitter-badger avatar neko-gg avatar pbaris avatar qwazer avatar rmannibucau avatar wattazoum avatar

Watchers

 avatar  avatar

maven-confluence-plugin's Issues

u2

Index: maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/reporting/renderer/GitLogJiraIssuesRenderer.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/reporting/renderer/GitLogJiraIssuesRenderer.java  (date 1431499249000)
+++ maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/reporting/renderer/GitLogJiraIssuesRenderer.java  (date 1431509985000)
@@ -98,11 +98,11 @@
         Set<String> versionTagList = GitLogUtil.loadVersionTagList(repository, gitLogTagNamesPattern);

         if (!CalculateRuleForSinceTagName.NO_RULE.equals(calculateRuleForSinceTagName)) {
-            log.debug(String.format(
+            log.info(String.format(
                     "Try to calculate tag name part by currentVersion %s and rule %s"
                     , currentVersion, calculateRuleForSinceTagName));
             overrideGitLogSinceTagNameIfNeeded(versionTagList);
-            log.info("Nearest version tag name found: " + gitLogSinceTagName);
+            log.info("Override gitLogSinceTagName by nearest version tag name found: " + gitLogSinceTagName);
         }

         if (gitLogSinceTagName==null || gitLogSinceTagName.isEmpty()) {
@@ -127,11 +127,11 @@
                         linkedList,
                         pattern);
             } catch (Exception e) {
-                log.error("cannot extractJiraIssues with error " + e);
+                log.error("cannot extractJiraIssues with error " + e, e);
             }

             if (jiraIssuesByVersion!=null) {
-                log.info(String.format("Found %d versions", jiraIssuesByVersion.keySet().size()));
+                log.info(String.format("Found %d version tags", jiraIssuesByVersion.keySet().size()));
                 log.debug(": " + jiraIssuesByVersion);
                 report = formatJiraIssuesByVersionToString(jiraIssuesByVersion);
             }
@@ -144,9 +144,9 @@
             try {
                 jiraIssues = GitLogUtil.extractJiraIssues(repository, gitLogSinceTagName, gitLogUntilTagName, pattern);
             } catch (Exception e) {
-                log.error("cannot extractJiraIssues with error " + e);
+                log.error("cannot extractJiraIssues with error " + e, e);
             }
-            log.info(String.format("Found %d jira issues", jiraIssues.size()));
+            log.info(String.format("Found %d JIRA issues", jiraIssues.size()));
             log.debug(": " + jiraIssues);
             report = formatJiraIssuesToString(jiraIssues);
         }
Index: maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/GitLogUtil.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/GitLogUtil.java   (date 1431500215000)
+++ maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/GitLogUtil.java   (date 1431510477000)
@@ -41,7 +41,7 @@
         return versionTagList;
     }

-    protected static RevCommit resolveCommitIdByTagName(Repository repository, String tagName) throws IOException {
+    protected static RevCommit resolveCommitIdByTagName(Repository repository, String tagName) throws IOException, GitAPIException {
         if (tagName == null || tagName.isEmpty()) return null;
         RevCommit revCommit = null;
         Map<String, Ref> tagMap = repository.getTags();
@@ -50,8 +50,19 @@
             RevWalk walk = new RevWalk(repository);
             //some reduce memory effors as described in jgit user guide
             walk.setRetainBody(false);
-            ObjectId from = repository.resolve("refs/heads/master");
+            ObjectId from;
+
+            from = repository.resolve("refs/heads/master");
+            if (from == null) {
+                Git git = new Git(repository);
+                String lastTagName = git.describe().call();
+                from = repository.resolve("refs/tags/" + lastTagName);
+            }
             ObjectId to = repository.resolve("refs/remotes/origin/master");
+
+            if (from==null){
+                throw new IllegalStateException("cannot determinate start commit");
+            }
             walk.markStart(walk.parseCommit(from));
             walk.markUninteresting(walk.parseCommit(to));
             try {
@@ -63,7 +74,7 @@
                 }

             } finally {
-                walk.release();
+                walk.close();
             }

         }

d2

Index: maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/CalculateRuleForSinceTagName.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/CalculateRuleForSinceTagName.java (date 1431411830000)
+++ maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/CalculateRuleForSinceTagName.java (date 1431411950000)
@@ -7,7 +7,7 @@
  */
 public enum CalculateRuleForSinceTagName {
     NO_RULE,
-    SINCE_CURRENT_MAJOR_VERSION,
-    SINCE_CURRENT_MINOR_VERSION,
-    SINCE_PREVIOUS_PATCH_VERSION
+    CURRENT_MAJOR_VERSION,
+    CURRENT_MINOR_VERSION,
+    PREVIOUS_PATCH_VERSION
 }
Index: maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/VersionUtil.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/VersionUtil.java  (date 1431411830000)
+++ maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/VersionUtil.java  (date 1431411950000)
@@ -30,14 +30,14 @@
         int patch = artifactVersion.getIncrementalVersion();

         switch (calculateRuleForSinceTagName) {
-            case SINCE_CURRENT_MAJOR_VERSION:
+            case CURRENT_MAJOR_VERSION:
                 minor = 0;
                 patch = 0;
                 break;
-            case SINCE_CURRENT_MINOR_VERSION:
+            case CURRENT_MINOR_VERSION:
                 patch = 0;
                 break;
-            case SINCE_PREVIOUS_PATCH_VERSION:
+            case PREVIOUS_PATCH_VERSION:
                 patch = patch == 0 ? 0 : patch - 1;
                 break;
             default:
Index: maven-confluence-reporting-plugin/src/test/java/com/github/qwazer/mavenplugins/gitlog/VersionUtilTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/test/java/com/github/qwazer/mavenplugins/gitlog/VersionUtilTest.java  (date 1431411830000)
+++ maven-confluence-reporting-plugin/src/test/java/com/github/qwazer/mavenplugins/gitlog/VersionUtilTest.java  (date 1431411950000)
@@ -17,42 +17,42 @@
     @Test
     public void testCalculateVersionTagNamePartPatch() throws Exception {
         String version = "1.2.3";
-        String part = VersionUtil.calculateVersionTagNamePart(version, CalculateRuleForSinceTagName.SINCE_PREVIOUS_PATCH_VERSION);
+        String part = VersionUtil.calculateVersionTagNamePart(version, CalculateRuleForSinceTagName.PREVIOUS_PATCH_VERSION);
         assertEquals("1.2.2", part);
     }

     @Test
     public void testCalculateVersionTagNamePartPatchSame() throws Exception {
         String version = "1.2.0";
-        String part = VersionUtil.calculateVersionTagNamePart(version, CalculateRuleForSinceTagName.SINCE_PREVIOUS_PATCH_VERSION);
+        String part = VersionUtil.calculateVersionTagNamePart(version, CalculateRuleForSinceTagName.PREVIOUS_PATCH_VERSION);
         assertEquals("1.2.0", part);
     }

     @Test
     public void testCalculateVersionTagNamePartMinor() throws Exception {
         String version = "1.2.1";
-        String part = VersionUtil.calculateVersionTagNamePart(version, CalculateRuleForSinceTagName.SINCE_CURRENT_MINOR_VERSION);
+        String part = VersionUtil.calculateVersionTagNamePart(version, CalculateRuleForSinceTagName.CURRENT_MINOR_VERSION);
         assertEquals("1.2.0", part);
     }

     @Test
     public void testCalculateVersionTagNamePartMinorZeroPatch() throws Exception {
         String version = "1.2.0";
-        String part = VersionUtil.calculateVersionTagNamePart(version, CalculateRuleForSinceTagName.SINCE_CURRENT_MINOR_VERSION);
+        String part = VersionUtil.calculateVersionTagNamePart(version, CalculateRuleForSinceTagName.CURRENT_MINOR_VERSION);
         assertEquals("1.2.0", part);
     }

     @Test
     public void testCalculateVersionTagNamePartMajor() throws Exception {
         String version = "1.2.0";
-        String part = VersionUtil.calculateVersionTagNamePart(version, CalculateRuleForSinceTagName.SINCE_CURRENT_MAJOR_VERSION);
+        String part = VersionUtil.calculateVersionTagNamePart(version, CalculateRuleForSinceTagName.CURRENT_MAJOR_VERSION);
         assertEquals("1.0.0", part);
     }

     @Test
     public void testCalculateVersionTagNamePartMajorZero() throws Exception {
         String version = "2.0.0";
-        String part = VersionUtil.calculateVersionTagNamePart(version, CalculateRuleForSinceTagName.SINCE_CURRENT_MAJOR_VERSION);
+        String part = VersionUtil.calculateVersionTagNamePart(version, CalculateRuleForSinceTagName.CURRENT_MAJOR_VERSION);
         assertEquals("2.0.0", part);
     }

\ No newline at end of file
Index: maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/reporting/renderer/GitLogJiraIssuesRenderer.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/reporting/renderer/GitLogJiraIssuesRenderer.java  (date 1431411950000)
+++ maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/reporting/renderer/GitLogJiraIssuesRenderer.java  (date 1431431428000)
@@ -49,7 +49,7 @@
         StringBuilder output = new StringBuilder(100);

         for (String jiraIssueKey : jiraIssues) {
-            output.append("{jira:" + jiraIssueKey + "}\\\\\n");
+            output.append("{jira:").append(jiraIssueKey).append("}\\\\\n");
         }
         return output.toString();

@@ -64,8 +64,12 @@
         while (iter.hasPrevious()) {
             String version = iter.previous();
             output.append(formatJiraIssuesToString(map.get(version)));
+            boolean hasIssues = map.get(version).isEmpty();
             if (iter.hasPrevious()) {
-                output.append("\n \\\\ " + version + " \\\\ \n");
+                if (!hasIssues) {
+                    output.append(" \\\\ ");
+                }
+                output.append(version).append(" \\\\ ");
             }
         }
         return output.toString();
Index: maven-confluence-reporting-plugin/src/test/java/com/github/qwazer/mavenplugins/gitlog/GitLogUtilTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/test/java/com/github/qwazer/mavenplugins/gitlog/GitLogUtilTest.java   (date 1431411950000)
+++ maven-confluence-reporting-plugin/src/test/java/com/github/qwazer/mavenplugins/gitlog/GitLogUtilTest.java   (date 1431431428000)
@@ -1,9 +1,9 @@
 package com.github.qwazer.mavenplugins.gitlog;

-import jdk.nashorn.internal.ir.annotations.Ignore;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.lib.RepositoryBuilder;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;

 import java.io.File;
\ No newline at end of file
Index: maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/confluence/plugin/ConfluenceDeployMojo.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/confluence/plugin/ConfluenceDeployMojo.java   (date 1431411830000)
+++ maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/confluence/plugin/ConfluenceDeployMojo.java   (date 1431440006000)
@@ -142,7 +142,7 @@
     private String gitLogSinceTagName;

     /**
-     * Parse git log commits untill first occurrence of specified tag name
+     * Parse git log commits until first occurrence of specified tag name
      */
     @Parameter(defaultValue = "")
     private String gitLogUntilTagName;
@@ -153,9 +153,9 @@
      * Possible values are
      * <ul>
      *     <li>NO_RULE</li>
-     *     <li>SINCE_CURRENT_MAJOR_VERSION</li>
-     *     <li>SINCE_CURRENT_MINOR_VERSION</li>
-     *     <li>SINCE_PREVIOUS_PATCH_VERSION</li>
+     *     <li>CURRENT_MAJOR_VERSION</li>
+     *     <li>CURRENT_MINOR_VERSION</li>
+     *     <li>PREVIOUS_PATCH_VERSION</li>
      * </ul>
      */
     @Parameter(defaultValue="NO_RULE")
Index: maven-confluence-reporting-plugin/src/site/confluence/codehaus-home.confluence
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/site/confluence/codehaus-home.confluence  (date 1431431428000)
+++ maven-confluence-reporting-plugin/src/site/confluence/codehaus-home.confluence  (date 1431440006000)
@@ -166,6 +166,28 @@
 | $\{pageTitle}            | title of page   | ${pageTitle}  |
 | $\{artifactId}           | artifactId      | ${artifactId} |
 | $\{version}              | version         | ${version} |
+| $\{gitlog.jiraIssues}    | list of jira issuses, extracted from gitlog since start tag   | |
+| $\{gitlog.sinceTagName}  | name of version tag to start extract jira issues   | |
+
+h3. Git log template variables
+Main idea is automated creating of release notes with list of resolved JIRA issues utilizing integration between JIRA and Confluence.
+Prerequrements:
+ # Include JIRA issue key in git commit message
+ # Using git as SCM and using version tags in git
+
+h4. Git log configuration
+
+ * gitLogJiraIssuesEnable   Set to true for enabling substitution of ${gitlog.jiraIssues} build-in variable. Default value is  false.
+ * gitLogSinceTagName      Parse git log commits since last occurrence of specified tag name.
+ * gitLogUntilTagName     Parse git log commits until first occurrence of specified tag name.
+ * gitLogCalculateRuleForSinceTagName    If specified, plugin will try to calculate and replace actual gitLogSinceTagName value based on current project version ${project.version} and provided rule. Possible values are
+     * NO_RULE
+     * CURRENT_MAJOR_VERSION
+     * CURRENT_MINOR_VERSION
+     * PREVIOUS_PATCH_VERSION
+ * gitLogJiraProjectKeyList JIRA projects key to extract issues from gitlog. By default it will try extract all strings that match pattern (A-Za-z+)-\d+
+ * gitLogTagNamesPattern The pattern to filter out tagName. Can be used for filter only version tags
+ * gitLogGroupByVersions Enable grouping by versions tag

 {quote}


e3

Index: maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/reporting/renderer/GitLogJiraIssuesRenderer.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/reporting/renderer/GitLogJiraIssuesRenderer.java  (date 1431499249000)
+++ maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/reporting/renderer/GitLogJiraIssuesRenderer.java  (date 1431500215000)
@@ -98,11 +98,11 @@
         Set<String> versionTagList = GitLogUtil.loadVersionTagList(repository, gitLogTagNamesPattern);

         if (!CalculateRuleForSinceTagName.NO_RULE.equals(calculateRuleForSinceTagName)) {
-            log.debug(String.format(
+            log.info(String.format(
                     "Try to calculate tag name part by currentVersion %s and rule %s"
                     , currentVersion, calculateRuleForSinceTagName));
             overrideGitLogSinceTagNameIfNeeded(versionTagList);
-            log.info("Nearest version tag name found: " + gitLogSinceTagName);
+            log.info("Override gitLogSinceTagName by nearest version tag name found: " + gitLogSinceTagName);
         }

         if (gitLogSinceTagName==null || gitLogSinceTagName.isEmpty()) {
@@ -131,7 +131,7 @@
             }

             if (jiraIssuesByVersion!=null) {
-                log.info(String.format("Found %d versions", jiraIssuesByVersion.keySet().size()));
+                log.info(String.format("Found %d version tags", jiraIssuesByVersion.keySet().size()));
                 log.debug(": " + jiraIssuesByVersion);
                 report = formatJiraIssuesByVersionToString(jiraIssuesByVersion);
             }
@@ -146,7 +146,7 @@
             } catch (Exception e) {
                 log.error("cannot extractJiraIssues with error " + e);
             }
-            log.info(String.format("Found %d jira issues", jiraIssues.size()));
+            log.info(String.format("Found %d JIRA issues", jiraIssues.size()));
             log.debug(": " + jiraIssues);
             report = formatJiraIssuesToString(jiraIssues);
         }

java.lang.ArrayIndexOutOfBoundsException:

[INFO] Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
[INFO] at java.util.ArrayList.elementData(ArrayList.java:371)
[INFO] at java.util.ArrayList.get(ArrayList.java:384)
[INFO] at com.github.qwazer.mavenplugins.gitlog.VersionUtil.findNearestVersionTagsBefore(VersionUtil.java:136)
[INFO] at org.bsc.maven.reporting.renderer.GitLogJiraIssuesRenderer.overrideGitLogSinceTagNameIfNeeded(GitLogJiraIssuesRenderer.java:173)
[INFO] at org.bsc.maven.reporting.renderer.GitLogJiraIssuesRenderer.renderBody(GitLogJiraIssuesRenderer.java:104)
[INFO] at org.apache.maven.reporting.AbstractMavenReportRenderer.render(AbstractMavenReportRenderer.java:79)
[INFO] at org.bsc.maven.confluence.plugin.ConfluenceDeployMojo.generateProjectReport(ConfluenceDeployMojo.java:382)
[INFO] at org.bsc.maven.confluence.plugin.ConfluenceDeployMojo.execute(ConfluenceDeployMojo.java:243)
[INFO] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
[INFO] ... 20 more

grouping

Index: maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/GitLogHelper.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
<+>package com.github.qwazer.mavenplugins.gitlog;\n\nimport org.apache.maven.plugin.logging.Log;\nimport org.eclipse.jgit.lib.ObjectId;\nimport org.eclipse.jgit.lib.Ref;\nimport org.eclipse.jgit.lib.Repository;\nimport org.eclipse.jgit.lib.RepositoryBuilder;\nimport org.eclipse.jgit.revwalk.RevCommit;\nimport org.eclipse.jgit.revwalk.RevObject;\nimport org.eclipse.jgit.revwalk.RevWalk;\n\nimport java.io.IOException;\nimport java.util.*;\nimport java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\npublic class GitLogHelper {\n\n    private RevWalk walk;\n    private Set<String> versionTagList;\n    private final Log log;\n    private Repository repository;\n\n\n\n    public GitLogHelper(Log log) {\n        this.log = log;\n    }\n\n    public void openRepositoryAndInitVersionTagList(String gitLogTagNamesPattern) throws IOException, NoGitRepositoryException {\n        log.debug(\"Try to open git repository.\");\n        try {\n            repository = new RepositoryBuilder().findGitDir().build();\n        } catch (IllegalArgumentException iae) {\n            throw new NoGitRepositoryException();\n        }\n        log.debug(\"Opened \" + repository + \". Try to load the commits.\");\n        walk = createWalk(repository);\n        log.debug(\"Loaded commits. try to load version tags.\");\n        versionTagList = new HashSet<String>();\n\n        for (String tagName : repository.getTags().keySet()){\n            if (tagName.matches(gitLogTagNamesPattern)){\n                versionTagList.add(tagName);\n            }\n        }\n\n        log.debug(\"Loaded version tag names: \" + versionTagList);\n    }\n\n\n    public Date extractDateOfCommitWithTagName(String tagName) throws IOException {\n        return extractDateOfCommitWithTagName(repository, tagName);\n    }\n\n\n    public static Date extractDateOfCommitWithTagName(Repository repository, String tagName) throws IOException {\n        Date result = new Date(0L);\n        Map<String, Ref> tagMap = repository.getTags();\n        Ref ref = tagMap.get(tagName);\n        if (ref != null) {\n            RevWalk revWalk = new RevWalk(repository);\n            try {\n\n                RevObject revObject = revWalk.parseAny(ref.getObjectId());\n                if (revObject!=null ) {\n                    RevCommit revCommit = revWalk.parseCommit(revObject.getId());\n                    result = new Date((long) revCommit.getCommitTime() * 1000);\n                }\n\n            } finally {\n                revWalk.release();\n            }\n\n        }\n\n\n        return result;\n\n    }\n\n\n    public String generateIssuesReport(Date sinceDate, String pattern) {\n        Set<String> jiraIssues = extractJiraIssues(walk, pattern, sinceDate);\n        return formatJiraIssuesToString(jiraIssues);\n    }\n\n    public String formatJiraIssuesToString(Collection<String> jiraIssues) {\n\n        StringBuilder output = new StringBuilder(100);\n\n        for (String jiraIssueKey : jiraIssues) {\n            output.append(\"{jira:\" + jiraIssueKey + \"}\\\\\\\\\\n\");\n        }\n        return output.toString();\n\n    }\n\n\n    public static Set<String> extractJiraIssues(RevWalk revWalk, String jiraIssuePattern, Date sinceTime) {\n        HashSet jiraIssues = new HashSet();\n        final long sinceTimeInSec = sinceTime.getTime() / 1000;\n        for (RevCommit commit : revWalk) {\n            if (commit.getCommitTime() >= sinceTimeInSec) {\n                jiraIssues.addAll(extractJiraIssuesFromString(commit.getFullMessage(), jiraIssuePattern));\n            }\n        }\n\n        return jiraIssues;\n\n    }\n\n\n    protected static List<String> extractJiraIssuesFromString(String s, String jiraIssuePattern) {\n\n        Pattern p = Pattern.compile(jiraIssuePattern);\n        Matcher m = p.matcher(s);\n        List<String> list = new ArrayList<String>();\n        while (m.find()) {\n            list.add(m.group(0));\n        }\n        return list;\n\n    }\n\n\n\n\n    protected static RevWalk createWalk(Repository repository) throws IOException {\n        RevWalk walk = new RevWalk(repository);\n        ObjectId head = repository.resolve(\"HEAD\");\n        if (head != null) {\n            // if head is null, it means there are no commits in the repository.  The walk will be empty.\n            RevCommit mostRecentCommit = walk.parseCommit(head);\n            walk.markStart(mostRecentCommit);\n            //todo  http://wiki.eclipse.org/JGit/User_Guide#Reducing_memory_usage_with_RevWalk\n        }\n        return walk;\n    }\n\n\n    public Set<String> getVersionTagList() {\n        return versionTagList;\n    }\n}\n
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/GitLogHelper.java (date 1431083679000)
+++ maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/GitLogHelper.java (revision )
@@ -1,6 +1,7 @@
 package com.github.qwazer.mavenplugins.gitlog;

 import org.apache.maven.plugin.logging.Log;
+import org.eclipse.jgit.api.LogCommand;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.Ref;
 import org.eclipse.jgit.lib.Repository;
@@ -80,9 +81,18 @@
     }


-    public String generateIssuesReport(Date sinceDate, String pattern) {
+    public Map<String,Set<String>> issuesByVersionMap(String startTagName, String endTagName, String issuePattern){
+        Map<String,Set<String>> map = new HashMap<String,Set<String>>();
+        LogCommand logCommand;
+
+
+        return map;
+    }
+
+
+    public String generateSimpleIssuesReport(Date sinceDate, String pattern) {
         Set<String> jiraIssues = extractJiraIssues(walk, pattern, sinceDate);
-        return formatJiraIssuesToString(jiraIssues);
+        return formatJiraIssuesToString(jiraIssues); //todo remove formatting to another layer
     }

     public String formatJiraIssuesToString(Collection<String> jiraIssues) {
Index: maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/reporting/renderer/GitLogJiraIssuesRenderer.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
<+>package org.bsc.maven.reporting.renderer;\n\nimport com.github.qwazer.mavenplugins.gitlog.CalculateRuleForSinceTagName;\nimport com.github.qwazer.mavenplugins.gitlog.GitLogHelper;\nimport com.github.qwazer.mavenplugins.gitlog.VersionUtil;\nimport org.apache.maven.doxia.sink.Sink;\nimport org.apache.maven.plugin.logging.Log;\nimport org.apache.maven.reporting.AbstractMavenReportRenderer;\n\nimport java.io.IOException;\nimport java.util.Collection;\nimport java.util.Date;\nimport java.util.List;\n\n/**\n * @author ar\n * @since Date: 01.05.2015\n */\npublic class GitLogJiraIssuesRenderer extends AbstractMavenReportRenderer {\n\n    private final Log log;\n    private String gitLogSinceTagName;\n    private CalculateRuleForSinceTagName calculateRuleForSinceTagName;\n    private String currentVersion;\n    private String gitLogTagNamesPattern;\n    private List<String> jiraProjectKeyList;\n\n    /**\n     * Default constructor.\n     *\n     * @param sink the sink to use.\n     */\n    public GitLogJiraIssuesRenderer(Sink sink, String gitLogSinceTagName, List<String> jiraProjectKeyList,\n                                    String currentVersion, CalculateRuleForSinceTagName calculateRuleForSinceTagName,\n                                    String gitLogTagNamesPattern, Log log) {\n        super(sink);\n        this.gitLogSinceTagName = gitLogSinceTagName;\n        this.currentVersion = currentVersion;\n        this.calculateRuleForSinceTagName = calculateRuleForSinceTagName;\n        this.jiraProjectKeyList = jiraProjectKeyList;\n        this.gitLogTagNamesPattern = gitLogTagNamesPattern;\n        this.log = log;\n    }\n\n    @Override\n    public String getTitle() {\n        return \"GitLogJiraIssuesRendererTitle\";  //todo implement getTitle in GitLogJiraIssuesRenderer\n    }\n\n    @Override\n    protected void renderBody() {\n\n\n        //    startSection( getTitle() );\n\n        GitLogHelper gitLogHelper = new GitLogHelper(log);\n        try {\n            gitLogHelper.openRepositoryAndInitVersionTagList(gitLogTagNamesPattern);\n        } catch (Exception e) {\n            log.warn(\"cannot open git repository with message \" + e.getMessage());\n        }\n\n        Date sinceDate = new Date(0L);\n\n\n            if (!CalculateRuleForSinceTagName.NO_RULE.equals(calculateRuleForSinceTagName)) {\n                log.debug(String.format(\n                        \"Try to calculate tag name part by currentVersion %s and rule %s\"\n                        , currentVersion, calculateRuleForSinceTagName));\n                String tagNamePart = VersionUtil.calculateVersionTagNamePart(currentVersion, calculateRuleForSinceTagName);\n                log.info(String.format(\"Calculated tag name part is %s\", tagNamePart));\n                Collection<String> versionTagList = gitLogHelper.getVersionTagList();\n                String nearestVersionTagName = VersionUtil.findNearestVersionTagsBefore(versionTagList, tagNamePart);\n                log.info(\"Nearest version tag name found: \" + nearestVersionTagName);\n                gitLogSinceTagName = nearestVersionTagName;\n            }\n\n\n        try {\n            sinceDate = gitLogHelper.extractDateOfCommitWithTagName(gitLogSinceTagName);\n        } catch (IOException e) {\n            log.warn(\"cannot extract date of commit with tag name \", e);\n        }\n\n        log.debug(\"Date of commit with tagName \" + gitLogSinceTagName + \" is \" + sinceDate);\n\n        String pattern = \"([A-Za-z]+)-\\\\d+\";\n        if (jiraProjectKeyList !=null && !jiraProjectKeyList.isEmpty()) {\n\n            String patternKeys = \"\";\n            for (String pkey : jiraProjectKeyList){\n                patternKeys += pkey + \"|\";\n            }\n            patternKeys = patternKeys.substring(0, patternKeys.length()-1);\n            pattern = \"(\" + patternKeys +\")-\\\\d+\";\n\n        }\n        log.info(\"Extract issues from gitlog since \" + sinceDate + \" by pattern \" + pattern);\n        String report = gitLogHelper.generateIssuesReport(sinceDate, pattern);\n\n        sink.rawText(report);\n\n    }\n\n\n}\n
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/reporting/renderer/GitLogJiraIssuesRenderer.java  (date 1431083679000)
+++ maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/reporting/renderer/GitLogJiraIssuesRenderer.java  (revision )
@@ -8,9 +8,7 @@
 import org.apache.maven.reporting.AbstractMavenReportRenderer;

 import java.io.IOException;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
+import java.util.*;

 /**
  * @author ar
@@ -96,7 +94,13 @@

         }
         log.info("Extract issues from gitlog since " + sinceDate + " by pattern " + pattern);
-        String report = gitLogHelper.generateIssuesReport(sinceDate, pattern);
+        String report = gitLogHelper.generateSimpleIssuesReport(sinceDate, pattern);
+
+
+        Map<String,Set<String>> issuesByVersionMap = new HashMap<String, Set<String>>();
+        //todo
+
+

         sink.rawText(report);


end_of_day

Index: .gitignore
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- .gitignore  (date 1431068156000)
+++ .gitignore  (date 1431083679000)
@@ -57,3 +57,5 @@
 crashlytics-build.properties


+
+patches
\ No newline at end of file
Index: maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/GitLogHelper.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/GitLogHelper.java (date 1431068156000)
+++ maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/GitLogHelper.java (date 1431083679000)
@@ -17,7 +17,7 @@
 public class GitLogHelper {

     private RevWalk walk;
-    private Set<String> tagNames;
+    private Set<String> versionTagList;
     private final Log log;
     private Repository repository;

@@ -27,7 +27,7 @@
         this.log = log;
     }

-    public void openRepository() throws IOException, NoGitRepositoryException {
+    public void openRepositoryAndInitVersionTagList(String gitLogTagNamesPattern) throws IOException, NoGitRepositoryException {
         log.debug("Try to open git repository.");
         try {
             repository = new RepositoryBuilder().findGitDir().build();
@@ -36,12 +36,19 @@
         }
         log.debug("Opened " + repository + ". Try to load the commits.");
         walk = createWalk(repository);
-        log.debug("Loaded commits. try to load the tags.");
-        tagNames = repository.getTags().keySet();
-        log.debug("Loaded tag names: " + tagNames);
+        log.debug("Loaded commits. try to load version tags.");
+        versionTagList = new HashSet<String>();
+
+        for (String tagName : repository.getTags().keySet()){
+            if (tagName.matches(gitLogTagNamesPattern)){
+                versionTagList.add(tagName);
-    }
+            }
+        }

+        log.debug("Loaded version tag names: " + versionTagList);
+    }

+
     public Date extractDateOfCommitWithTagName(String tagName) throws IOException {
         return extractDateOfCommitWithTagName(repository, tagName);
     }
@@ -132,7 +139,7 @@
     }


-    public Set<String> getTagNames() {
-        return tagNames;
+    public Set<String> getVersionTagList() {
+        return versionTagList;
     }
 }
Index: maven-confluence-reporting-plugin/src/test/java/com/github/qwazer/mavenplugins/gitlog/GitLogHelperTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/test/java/com/github/qwazer/mavenplugins/gitlog/GitLogHelperTest.java (date 1431068156000)
+++ maven-confluence-reporting-plugin/src/test/java/com/github/qwazer/mavenplugins/gitlog/GitLogHelperTest.java (date 1431083679000)
@@ -21,6 +21,7 @@
  * @author ar
  * @since Date: 04.05.2015
  */
+@Ignore
 public class GitLogHelperTest {
     private static final String repoFile =
             "/home/ar/projects/github/maven-confluence-plugin/maven-confluence-reporting-plugin/src/it/spring-roo/pom.xml";
\ No newline at end of file
Index: maven-confluence-reporting-plugin/src/test/java/com/github/qwazer/mavenplugins/gitlog/VersionUtilTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/test/java/com/github/qwazer/mavenplugins/gitlog/VersionUtilTest.java  (date 1431083679000)
+++ maven-confluence-reporting-plugin/src/test/java/com/github/qwazer/mavenplugins/gitlog/VersionUtilTest.java  (date 1431083679000)
@@ -0,0 +1,163 @@
+package com.github.qwazer.mavenplugins.gitlog;
+
+import org.junit.Test;
+
+import java.util.List;
+
+import static java.util.Arrays.asList;
+import static junit.framework.Assert.assertEquals;
+
+
+public class VersionUtilTest {
+
+    @Test
+    public void testFindNearestVersionTagsBefore() throws Exception {
+
+        List<String> list = asList("1.0.0", "1.1.0", "2.0.0");
+        String version = "1.2.0";
+
+        String foundVersion = VersionUtil.findNearestVersionTagsBefore(list, version);
+        assertEquals("1.1.0", foundVersion);
+
+    }
+
+    @Test
+    public void testFindNearestVersionTagsBeforeRC() throws Exception {
+
+        List<String> list = asList("1.0.0-RC1", "1.0.0-RC2", "1.0.0-RC3");
+        String version = "1.0.0-RC2";
+
+        String foundVersion = VersionUtil.findNearestVersionTagsBefore(list, version);
+        assertEquals("1.0.0-RC2", foundVersion);
+
+    }
+
+    @Test
+    public void testFindNearestVersionTagsBeforeRC3() throws Exception {
+
+        List<String> list = asList("1.0.0-RC1", "1.0.0-RC2", "1.0.0-RC4");
+        String version = "1.0.0-RC3";
+
+        String foundVersion = VersionUtil.findNearestVersionTagsBefore(list, version);
+        assertEquals("1.0.0-RC2", foundVersion);
+
+    }
+
+    @Test
+    public void testFindNearestVersionTagsBeforeMC1() throws Exception {
+
+        List<String> list = asList("1.0.0-M01", "1.0.0-RC2", "1.0.0-RC4");
+        String version = "1.0.0-RC3";
+
+        String foundVersion = VersionUtil.findNearestVersionTagsBefore(list, version);
+        assertEquals("1.0.0-RC2", foundVersion);
+
+    }
+
+    @Test
+    public void testFindNearestVersionTagsBeforeMC2() throws Exception {
+
+        List<String> list = asList("1.0.0-M01", "1.0.0-M2", "1.0.0-RC4");
+        String version = "1.0.0-RC3";
+
+        String foundVersion = VersionUtil.findNearestVersionTagsBefore(list, version);
+        assertEquals("1.0.0-M2", foundVersion);
+
+    }
+
+    @Test
+    public void testFindNearestVersionTagsBefore1() throws Exception {
+
+        List<String> list = asList("1.0.0");
+        String version = "1.2.0";
+
+        String foundVersion = VersionUtil.findNearestVersionTagsBefore(list, version);
+        assertEquals("1.0.0", foundVersion);
+
+    }
+
+    @Test
+    public void testFindNearestVersionTagsBeforeNull() throws Exception {
+
+        List<String> list = asList();
+        String version = "1.2.0";
+
+        String foundVersion = VersionUtil.findNearestVersionTagsBefore(list, version);
+        assertEquals(null, foundVersion);
+
+
+    }
+
+    @Test
+    public void testFindNearestVersionTagsBefore12() throws Exception {
+
+        List<String> list = asList("tagName");
+        String version = "1.2.0";
+
+        String foundVersion = VersionUtil.findNearestVersionTagsBefore(list, version);
+        assertEquals("tagName", foundVersion);
+
+
+    }
+
+    @Test
+    public void testRemoveNonDigitPrefix() throws Exception {
+        String s = "1.2.3";
+        String r = VersionUtil.removeNonDigitPrefix(s);
+        assertEquals(s,r);
+    }
+    @Test
+    public void testRemoveNonDigitPrefix2() throws Exception {
+        String s = "abs-1.2.3";
+        String r = VersionUtil.removeNonDigitPrefix(s);
+        assertEquals("1.2.3",r);
+    }
+
+    @Test
+    public void testRemoveNonDigitPrefix3() throws Exception {
+        String s = "";
+        String r = VersionUtil.removeNonDigitPrefix(s);
+        assertEquals("",r);
+    }
+
+    @Test
+    public void testFindNearestVersionTagsRealCase01() throws Exception {
+
+        List<String> list = asList("7.17.1_deals_config_fix", "7.17.8", "7.18.0",
+                "7.18.1", "7.18.2", "7.18.3", "build-6.2.14", "build-6.2.4", "build-6.2.5",
+                "build-6.2.6", "build-6.2.7", "build-6.3", "build-6.4", "build-6.4.1",
+                "build-6.6.29", "build-6.8", "build-7.6.122", "cummulative",
+                "v7.18.4", "v7.19.0", "v7.19.1", "v7.19.2", "v7.19.3", "v7.19.4", "v7.19.5", "v7.20.0",
+                "v7.20.1", "v7.20.2", "v7.20.3", "v7.20.4", "v7.20.5", "v7.20.6", "v8.0.0",
+                "v8.0.1", "v8.0.2", "v8.0.3", "v8.0.4", "v8.0.5", "v8.0.6", "v8.0.7", "v8.0.9",
+                "v8.1.1", "v8.1.2", "v8.1.3", "v8.2.0", "v8.2.1", "v8.2.2", "v8.2.3", "v8.2.4",
+                "v8.2.5", "v8.3.0", "v8.3.1");
+        String version = "8.1.0";
+
+        String foundVersion = VersionUtil.findNearestVersionTagsBefore(list, version);
+        assertEquals("v8.0.9", foundVersion);
+
+
+    }
+
+    @Test
+    public void testFindNearestVersionTagsRealCase02() throws Exception {
+
+        List<String> list = asList("7.17.1_deals_config_fix", "7.17.8", "7.18.0",
+                "7.18.1", "7.18.2", "7.18.3", "build-6.2.14", "build-6.2.4", "build-6.2.5",
+                "build-6.2.6", "build-6.2.7", "build-6.3", "build-6.4", "build-6.4.1",
+                "build-6.6.29", "build-6.8", "build-7.6.122", "cummulative",
+                "v7.18.4", "v7.19.0", "v7.19.1", "v7.19.2", "v7.19.3", "v7.19.4", "v7.19.5", "v7.20.0",
+                "v7.20.1", "v7.20.2", "v7.20.3", "v7.20.4", "v7.20.5", "v7.20.6", "v8.0.0",
+                "v8.0.1", "v8.0.2", "v8.0.3", "v8.0.4", "v8.0.5", "v8.0.6", "v8.0.7", "v8.0.9",
+                "v8.1.1", "v8.1.2", "v8.1.3", "v8.2.0", "v8.2.1", "v8.2.2", "v8.2.3", "v8.2.4",
+                "v8.2.5", "v8.3.0", "v8.3.1");
+        String version = "8.2.0";
+
+        String foundVersion = VersionUtil.findNearestVersionTagsBefore(list, version);
+        assertEquals("v8.2.0", foundVersion);
+
+    }
+
+
+}
\ No newline at end of file
Index: maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/VersionUtil.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/VersionUtil.java  (date 1431068156000)
+++ maven-confluence-reporting-plugin/src/main/java/com/github/qwazer/mavenplugins/gitlog/VersionUtil.java  (date 1431091662000)
@@ -6,9 +6,9 @@
 import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
 import org.codehaus.plexus.util.StringUtils;

-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;

 /**
  * @author ar
@@ -17,44 +17,29 @@
 public class VersionUtil {


-    public static List<String> calculateTagNamesOfVersions(Collection<String> versions, String currentVersion, CalculateRuleForSinceTagName calculateRuleForSinceTagName) {
-        String tagNamePart = calculateSinceVersionTagNamePart(currentVersion, calculateRuleForSinceTagName);
-        List<String> resList = new ArrayList<String>();
+    public static String calculateVersionTagNamePart(String version, CalculateRuleForSinceTagName calculateRuleForSinceTagName) {

-        for (String s : versions) {
-            if (s.contains(tagNamePart)) {
-                resList.add(s);
-            }
-        }
-        return resList;
-
-    }
-
-
-    public static String calculateSinceVersionTagNamePart(String version, CalculateRuleForSinceTagName calculateRuleForSinceTagName) {
-
         if (calculateRuleForSinceTagName.equals(CalculateRuleForSinceTagName.NO_RULE)) {
             return null;
         }
-        ArtifactVersion artifactVersion = new DefaultArtifactVersion(version);
-        if (ArtifactUtils.isSnapshot(version)) {
-            artifactVersion = new DefaultArtifactVersion(StringUtils.substring(version, 0, version.length() - Artifact.SNAPSHOT_VERSION.length() - 1));
-        }
-        if (version.equals(artifactVersion.getQualifier())) {
-            //  getLog().debug("The version is not in the regular format");  todo
-        }
+        ArtifactVersion artifactVersion = parseArtifactVersion(version);
         int major = artifactVersion.getMajorVersion();
         int minor = artifactVersion.getMinorVersion();
         int patch = artifactVersion.getIncrementalVersion();

         switch (calculateRuleForSinceTagName) {
             case SINCE_PREV_MAJOR_RELEASE:
+                if (minor == 0 && patch == 0) {
-                major = major == 0 ? 0 : major - 1;
+                    major = major == 0 ? 0 : major - 1;
+                } else {
-                minor = 0;
-                patch = 0;
+                    minor = 0;
+                    patch = 0;
+                }
                 break;
             case SINCE_PREV_MINOR_RELEASE:
+                if (patch == 0) {
-                minor = minor == 0 ? 0 : minor - 1;
+                    minor = minor == 0 ? 0 : minor - 1;
+                }
                 patch = 0;
                 break;
             case SINCE_PREV_PATCH_RELEASE:
@@ -65,6 +50,73 @@
         }

         return major + "." + minor + "." + patch;
+    }
+
+    private static ArtifactVersion parseArtifactVersion(String version) {
+        version = removeNonDigitPrefix(version);
+        ArtifactVersion artifactVersion = new DefaultArtifactVersion(version);
+        if (ArtifactUtils.isSnapshot(version)) {
+            artifactVersion = new DefaultArtifactVersion(StringUtils.substring(version, 0, version.length() - Artifact.SNAPSHOT_VERSION.length() - 1));
+        }
+        return artifactVersion;
+    }
+
+    protected static String removeNonDigitPrefix(String version) {
+        if (version != null && !version.isEmpty()) {
+            if (!Character.isDigit(version.charAt(0))) {
+                Matcher matcher = Pattern.compile("\\d+").matcher(version);
+                int i = 0;
+                if (matcher.find()) {
+                    i = matcher.end();
+                }
+                if (i > 0) {
+                    version = StringUtils.substring(version, i - 1, version.length());
+                }
+            }
+        }
+        return version;
+    }
+
+    public static Collection<String> filterTagNamesByTagNamePart(Collection<String> tagNames, String versionTagNamePart) {
+        List<String> list = new ArrayList<String>();
+        for (String tagName : tagNames) {
+            if (tagName.contains(versionTagNamePart)) {
+                list.add(tagName);
+            }
+        }
+        return list;
+    }
+
+    public static String findNearestVersionTagsBefore(Collection<String> versionTagList, String versionTagNamePart) {
+
+        Map<ArtifactVersion, String> artifactVersionStringMap = new HashMap<ArtifactVersion, String>();
+
+        for (String versionTag : versionTagList) {
+            artifactVersionStringMap.put(parseArtifactVersion(versionTag), versionTag);
+        }
+
+        ArtifactVersion currentVersion = parseArtifactVersion(versionTagNamePart);
+
+        List<ArtifactVersion> sortedList = new ArrayList<ArtifactVersion>(artifactVersionStringMap.keySet());
+
+        Collections.sort(sortedList);
+
+//        Comparator<ArtifactVersion> comparator = new Comparator<ArtifactVersion>() {
+//            public int compare(ArtifactVersion a1, ArtifactVersion a2) {
+//                return a1.compareTo(a2);
+//            }
+//        };
+
+        int index = Collections.binarySearch(sortedList, currentVersion, null);
+
+        if (index >= 0) {
+            return artifactVersionStringMap.get(sortedList.get(index));
+        }
+        if (sortedList.size() > 0) {
+            return artifactVersionStringMap.get(sortedList.get(-index - 2));
+        } else {
+            return null;
+        }
     }

 }
Index: maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/confluence/plugin/ConfluenceDeployMojo.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/confluence/plugin/ConfluenceDeployMojo.java   (date 1431068156000)
+++ maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/confluence/plugin/ConfluenceDeployMojo.java   (date 1431092916000)
@@ -1,12 +1,7 @@
 package org.bsc.maven.confluence.plugin;

-import java.io.StringWriter;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-
+import biz.source_code.miniTemplator.MiniTemplator;
+import biz.source_code.miniTemplator.MiniTemplator.VariableNotDefinedException;
 import com.github.qwazer.mavenplugins.gitlog.CalculateRuleForSinceTagName;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.factory.ArtifactFactory;
@@ -20,37 +15,35 @@
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.project.MavenProjectBuilder;
-import org.apache.maven.project.ProjectBuildingException;
-import org.apache.maven.scm.manager.ScmManager;
-import org.bsc.maven.plugin.confluence.ConfluenceUtils;
-import org.bsc.maven.reporting.renderer.DependenciesRenderer;
-import org.bsc.maven.reporting.renderer.GitLogJiraIssuesRenderer;
-import org.bsc.maven.reporting.renderer.ProjectSummaryRenderer;
-import org.bsc.maven.reporting.renderer.ScmRenderer;
-import org.codehaus.plexus.i18n.I18N;
-import org.codehaus.swizzle.confluence.Confluence;
-import org.codehaus.swizzle.confluence.Page;
-
-import biz.source_code.miniTemplator.MiniTemplator;
-import biz.source_code.miniTemplator.MiniTemplator.VariableNotDefinedException;
-import java.util.List;
-import java.util.Set;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.descriptor.InvalidPluginDescriptorException;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProjectBuilder;
+import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.scm.manager.ScmManager;
 import org.apache.maven.tools.plugin.DefaultPluginToolsRequest;
 import org.apache.maven.tools.plugin.PluginToolsRequest;
 import org.apache.maven.tools.plugin.extractor.ExtractionException;
 import org.apache.maven.tools.plugin.generator.Generator;
 import org.apache.maven.tools.plugin.generator.GeneratorUtils;
 import org.apache.maven.tools.plugin.scanner.MojoScanner;
+import org.bsc.maven.plugin.confluence.ConfluenceUtils;
 import org.bsc.maven.reporting.model.Site;
+import org.bsc.maven.reporting.renderer.DependenciesRenderer;
+import org.bsc.maven.reporting.renderer.GitLogJiraIssuesRenderer;
+import org.bsc.maven.reporting.renderer.ProjectSummaryRenderer;
+import org.bsc.maven.reporting.renderer.ScmRenderer;
 import org.codehaus.plexus.component.repository.ComponentDependency;
+import org.codehaus.plexus.i18n.I18N;
+import org.codehaus.swizzle.confluence.Confluence;
+import org.codehaus.swizzle.confluence.Page;

+import java.io.StringWriter;
+import java.util.*;
+
 /**
  * 
  * Generate Project's documentation in confluence's wiki format and deploy it
@@ -63,6 +56,7 @@
     private static final String PROJECT_SCM_MANAGER_VAR = "project.scmManager";
     private static final String PROJECT_SUMMARY_VAR = "project.summary";
     private static final String GITLOG_JIRA_ISSUES_VAR = "gitlog.jiraIssues";
+    private static final String GITLOG_SINCE_TAG_NAME = "gitlog.sinceTagName";

     /**
      * Local Repository.
@@ -370,19 +364,29 @@
                 //final Sink sink = getSink();
                 String currentVersion = project.getVersion();

-                new GitLogJiraIssuesRenderer(sink, gitLogSinceTagName, gitLogJiraProjectKeyList, currentVersion, gitLogCalculateRuleForSinceTagName, getLog()).render();
+                GitLogJiraIssuesRenderer gitLogJiraIssuesRenderer = new GitLogJiraIssuesRenderer(sink, gitLogSinceTagName, gitLogJiraProjectKeyList, currentVersion,
+                        gitLogCalculateRuleForSinceTagName, gitLogTagNamesPattern, getLog());
+                gitLogJiraIssuesRenderer.render();

+                gitLogSinceTagName = gitLogJiraIssuesRenderer.getGitLogSinceTagName();
+
                 try {
                     final String gitlog_jiraissues_var = w.toString();
-
                     getProperties().put(GITLOG_JIRA_ISSUES_VAR, gitlog_jiraissues_var); // to share with children
-
                     t.setVariable(GITLOG_JIRA_ISSUES_VAR, gitlog_jiraissues_var);

                 } catch (VariableNotDefinedException e) {
-                    getLog().warn(String.format("variable %s not defined in template", GITLOG_JIRA_ISSUES_VAR));
+                    getLog().info(String.format("variable %s not defined in template", GITLOG_JIRA_ISSUES_VAR));
                 }
             }
+
+            try {
+                getProperties().put(GITLOG_SINCE_TAG_NAME, gitLogSinceTagName); // to share with children
+                t.setVariable(GITLOG_SINCE_TAG_NAME, gitLogSinceTagName);
+            } catch (VariableNotDefinedException e) {
+                getLog().debug(String.format("variable %s not defined in template", GITLOG_SINCE_TAG_NAME));
+            }
+
         }

         final String wiki = t.generateOutput();
Index: maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/reporting/renderer/GitLogJiraIssuesRenderer.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>windows-1251
===================================================================
--- maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/reporting/renderer/GitLogJiraIssuesRenderer.java  (date 1431068156000)
+++ maven-confluence-reporting-plugin/src/main/java/org/bsc/maven/reporting/renderer/GitLogJiraIssuesRenderer.java  (date 1431092916000)
@@ -1,7 +1,7 @@
 package org.bsc.maven.reporting.renderer;

-import com.github.qwazer.mavenplugins.gitlog.GitLogHelper;
 import com.github.qwazer.mavenplugins.gitlog.CalculateRuleForSinceTagName;
+import com.github.qwazer.mavenplugins.gitlog.GitLogHelper;
 import com.github.qwazer.mavenplugins.gitlog.VersionUtil;
 import org.apache.maven.doxia.sink.Sink;
 import org.apache.maven.plugin.logging.Log;
@@ -22,6 +22,7 @@
     private String gitLogSinceTagName;
     private CalculateRuleForSinceTagName calculateRuleForSinceTagName;
     private String currentVersion;
+    private String gitLogTagNamesPattern;
     private List<String> jiraProjectKeyList;

     /**
@@ -29,12 +30,15 @@
      *
      * @param sink the sink to use.
      */
-    public GitLogJiraIssuesRenderer(Sink sink, String gitLogSinceTagName, List<String> jiraProjectKeyList, String currentVersion, CalculateRuleForSinceTagName calculateRuleForSinceTagName, Log log) {
+    public GitLogJiraIssuesRenderer(Sink sink, String gitLogSinceTagName, List<String> jiraProjectKeyList,
+                                    String currentVersion, CalculateRuleForSinceTagName calculateRuleForSinceTagName,
+                                    String gitLogTagNamesPattern, Log log) {
         super(sink);
         this.gitLogSinceTagName = gitLogSinceTagName;
         this.currentVersion = currentVersion;
         this.calculateRuleForSinceTagName = calculateRuleForSinceTagName;
         this.jiraProjectKeyList = jiraProjectKeyList;
+        this.gitLogTagNamesPattern = gitLogTagNamesPattern;
         this.log = log;
     }

@@ -51,34 +55,29 @@

         GitLogHelper gitLogHelper = new GitLogHelper(log);
         try {
-            gitLogHelper.openRepository();
+            gitLogHelper.openRepositoryAndInitVersionTagList(gitLogTagNamesPattern);
         } catch (Exception e) {
             log.warn("cannot open git repository with message " + e.getMessage());
         }

         Date sinceDate = new Date(0L);
-        try {

+
             if (!CalculateRuleForSinceTagName.NO_RULE.equals(calculateRuleForSinceTagName)) {
                 log.debug(String.format(
-                        "Try to calculated tag name part by currentVersion %s and sinceVersion %s"
+                        "Try to calculate tag name part by currentVersion %s and rule %s"
                         , currentVersion, calculateRuleForSinceTagName));
-                String tagNamePart = VersionUtil.calculateSinceVersionTagNamePart(currentVersion, calculateRuleForSinceTagName);
-                log.info(String.format("Calculated tag name part %s", tagNamePart));
-                Collection<String> tagNames = gitLogHelper.getTagNames();
-                List<String> tagNamesOfVersions = VersionUtil.calculateTagNamesOfVersions(tagNames, currentVersion, calculateRuleForSinceTagName);
-
-                for (String tagNameWithVersion : tagNamesOfVersions) {
-                    Date date = gitLogHelper.extractDateOfCommitWithTagName(tagNameWithVersion);
-                    if (date.after(sinceDate)) {
-                        sinceDate = date;
+                String tagNamePart = VersionUtil.calculateVersionTagNamePart(currentVersion, calculateRuleForSinceTagName);
+                log.info(String.format("Calculated tag name part is %s", tagNamePart));
+                Collection<String> versionTagList = gitLogHelper.getVersionTagList();
+                String nearestVersionTagName = VersionUtil.findNearestVersionTagsBefore(versionTagList, tagNamePart);
+                log.info("Nearest version tag name found: " + nearestVersionTagName);
+                gitLogSinceTagName = nearestVersionTagName;
-                    }
+            }
-                }


-            } else {
+        try {
-                sinceDate = gitLogHelper.extractDateOfCommitWithTagName(gitLogSinceTagName);
+            sinceDate = gitLogHelper.extractDateOfCommitWithTagName(gitLogSinceTagName);
-            }
         } catch (IOException e) {
             log.warn("cannot extract date of commit with tag name ", e);
         }
@@ -101,12 +100,9 @@

         sink.rawText(report);

-        //    endSection();
-
-        return;
-
-
     }

-
+    public String getGitLogSinceTagName() {
+        return gitLogSinceTagName;
+    }
 }

calculate version

public class VersionUtil {


    public static String calculateVersionTagNamePart(String version, CalculateRuleForSinceTagName calculateRuleForSinceTagName) {

        if (calculateRuleForSinceTagName.equals(CalculateRuleForSinceTagName.NO_RULE)) {
            return null;
        }
        ArtifactVersion artifactVersion = parseArtifactVersion(version);
        int major = artifactVersion.getMajorVersion();
        int minor = artifactVersion.getMinorVersion();
        int patch = artifactVersion.getIncrementalVersion();

        switch (calculateRuleForSinceTagName) {
            case SINCE_PREV_MAJOR_RELEASE:
                if (minor == 0 && patch == 0) {
                    major = major == 0 ? 0 : major - 1;
                } else {
                    minor = 0;
                    patch = 0;
                }
                break;
            case SINCE_PREV_MINOR_RELEASE:
                if (patch == 0) {
                    minor = minor == 0 ? 0 : minor - 1;
                }
                patch = 0;
                break;
            case SINCE_PREV_PATCH_RELEASE:
                patch = patch == 0 ? 0 : patch - 1;
                break;
            default:
                throw new RuntimeException("cannot parse " + calculateRuleForSinceTagName);
        }

        return major + "." + minor + "." + patch;
    }

2

[INFO] [INFO] Override gitLogSinceTagName by nearest version tag name found: v8.3.0
[INFO] [ERROR] cannot extractJiraIssues with error java.lang.NullPointerException
[INFO] java.lang.NullPointerException
[INFO] at org.eclipse.jgit.lib.ObjectIdOwnerMap.get(ObjectIdOwnerMap.java:131)
[INFO] at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:863)
[INFO] at org.eclipse.jgit.revwalk.RevWalk.parseCommit(RevWalk.java:778)
[INFO] at com.github.qwazer.mavenplugins.gitlog.GitLogUtil.resolveCommitIdByTagName(GitLogUtil.java:55)
[INFO] at com.github.qwazer.mavenplugins.gitlog.GitLogUtil.extractJiraIssues(GitLogUtil.java:80)
[INFO] at com.github.qwazer.mavenplugins.gitlog.GitLogUtil.extractJiraIssuesByVersion(GitLogUtil.java:105)
[INFO] at org.bsc.maven.reporting.renderer.GitLogJiraIssuesRenderer.renderBody(GitLogJiraIssuesRenderer.java:126)
[INFO] at org.apache.maven.reporting.AbstractMavenReportRenderer.render(AbstractMavenReportRenderer.java:79)
[INFO] at org.bsc.maven.confluence.plugin.ConfluenceDeployMojo.generateProjectReport(ConfluenceDeployMojo.java:382)
[INFO] at org.bsc.maven.confluence.plugin.ConfluenceDeployMojo.execute(ConfluenceDeployMojo.java:243)
[INFO] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
[INFO] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
[INFO] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
[INFO] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
[INFO] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
[INFO] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
[INFO] at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
[INFO] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
[INFO] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
[INFO] at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
[INFO] at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
[INFO] at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
[INFO] at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[INFO] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[INFO] at java.lang.reflect.Method.invoke(Method.java:601)
[INFO] at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
[INFO] at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
[INFO] at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
[INFO] at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
[INFO] [INFO] Confluence version [5.6.3-5636] development version [false]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.