Maven Changelog Plugin
  1. Maven Changelog Plugin
  2. MCHANGELOG-118

Provide simple sorting based on the content of SCM commit messages on the HTML report.

    Details

    • Type: New Feature New Feature
    • Status: Open Open
    • Priority: Minor Minor
    • Resolution: Unresolved
    • Affects Version/s: 2.2
    • Fix Version/s: None
    • Labels:
      None
    • Testcase included:
      yes
    • Patch Submitted:
      Yes
    • Number of attachments :
      3

      Description

      Purpose:
      In our company we have a 'pre-commit' hook script set up for all projects, that requires from developers to fulfill some formatting rules of SCM commit message. We would like to leverage from this rules and reflect them also on the HTML change log to have a more comprendious and well-arranged change log report. We would like to have commit messages sorted and placed in several additional columns (instead of having them all in one 'Detail' column) in a table on HTML report based on their format and content.

      Example:
      Suppose you want to divide SCM entries displayed on HTML report into four columns labeled as "Bug fixes", "Features", "Improvements" and "Other changes" in this order. Commit messages that contain at the beginning of the line string "[B]" shall be placed in the "Bug fixes" column, messages with "[F]" at the beginning shall come in the "Features" column, and messages with "[I]" shall come in the "Improvements" column. All other messages shall reside in the last "Other changes" column.

      To see an example of how can such customized report look like, see screenshot added as attachment (sample-sorted-report.png).

      I implemented a patch (see changelog-sorting-comment.diff) that contains logic that performs sorting of SCM entries as described above and I did it in a general way, so that other users of changelog-plugin can define their own rules for sorting messages. So, with my implementation, you can customize report layout as described in above example by providing three new plugin configuration parameters:

      • commentSortRegexPattern=^[[BFI]]
        • Standard java regex pattern that is used for searching a match in commit messages.
        • In this case, it matches commit messages that begin with "[B]", "[F]" or "[I]" string
      • commentSortMatchValues=[B],[F],[I]
        • Possible values of result of matches found by above pattern.
        • Used to determine number and order of newly created columns. Also defines which message is placed into which column (messages with [B] at the beginning will be placed in the first column, [F] in the second column, and so on ...).
      • commentSortColumnHeaders=Bug fixes,Features,Improvements,Other changes
        • Header titles for newly created columns.
        • They matches the order and number of 'commentSortMatchValues' values, but with one last additional value that is used as a header title for last column, where all 'unsorted' messages will be placed.
          Complete documentation of these parameters is included in my implementation as javadoc.

      What I did in the patch:

      • 1. I modified 'ChangeLogReport" class as follows:
        • a) I added three new plugin parameters:
          • commentSortRegexPattern
          • commentSortMatchedValues
          • commentSortColumnHeaders
          • including comprehensive documentation - see source code in the patch.
        • b) I added call to newly created method "validateCommentSortParams()" to main "executeReport" method. As it is obvious from its name, this method performs validation of above mentioned three parameters (including different combinations of parameters configuration).
        • c) I slightly modified method "doChangedSetTable" to support creation of new additional column headers used for sorting SCM commit messages. These headers are created only if above mentioned plugin parameters are specified. Otherwise code behaves exactly as it behaved before my change.
        • d) Original method "doChangeSetDetail" was extended with little bit of new logic that distributes SCM messages together with changed files into new columns - if comment sorting functionality is enabled. Because of that, I needed to extract code that deals only with 'detail' column to a separate method - now called "doChangeSetEntryDetail". Finally, I renamed original "doChangeSetDetail" method to "doChangeSetEntry" name, because it deals with whole entry (one row in HTML table including timestamp and author columns) and not only 'detail' part - just to improve a readability of code.
      • 2. I modifies "ChangeLogReportTest" class:
        • f) I add some integration tests that tests both correct and wrong combination of configuration parameters to "ChangeLogReportTest" class.

      If there is something else to do in connection with this patch, please let me know and I can do it. If this patch could be accepted and included in official release of plugin, I would be grateful and I am also willing to provide any following required bug fixes to this functionality.

        Activity

        Hide
        Ivan Mrva added a comment -

        In my opinion, integration tests included in this patch (and also currently existing tests) could be better, if they would include also parsing the resultant output HTML file. I did not want to do it like this, because that would mean a definition of new dependency to project (some HTML parser library). But in this moment, all my tests are at least on the same level as another currently existing tests are (I did them by analogy).

        Show
        Ivan Mrva added a comment - In my opinion, integration tests included in this patch (and also currently existing tests) could be better, if they would include also parsing the resultant output HTML file. I did not want to do it like this, because that would mean a definition of new dependency to project (some HTML parser library). But in this moment, all my tests are at least on the same level as another currently existing tests are (I did them by analogy).
        Hide
        Ivan Mrva added a comment -

        This feature could be more powerful in connection with 'disabled file and revision links' on the HTML report. That would lead to even more readable change log report (see how would it look like: attached sample "changelog-without-file-and-rev-links.png" file).
        For us, this another feature is also required, because we would like to use this report also for our testers, who really don't care about exact set of changed files.

        I will provide another patch for this kind of functionality (disabling file and revision links) in another JIRA issue in a while...

        Show
        Ivan Mrva added a comment - This feature could be more powerful in connection with 'disabled file and revision links' on the HTML report. That would lead to even more readable change log report (see how would it look like: attached sample " changelog-without-file-and-rev-links.png " file). For us, this another feature is also required, because we would like to use this report also for our testers, who really don't care about exact set of changed files. I will provide another patch for this kind of functionality (disabling file and revision links) in another JIRA issue in a while...

          People

          • Assignee:
            Unassigned
            Reporter:
            Ivan Mrva
          • Votes:
            1 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated: