You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2022/05/26 09:29:49 UTC

[maven-scm] branch master updated (087c1b350 -> b04525fa0)

This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/maven-scm.git


    from 087c1b350 [SCM-985] Drop/replace usage of Commons Lang 2
     add 262e8afc6 [SCM-989] Tests fail if svn and/or git are not installed
     new b04525fa0 [SCM-977] Support for retrieving tags from the changelog

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../main/java/org/apache/maven/scm/ChangeSet.java  |  67 ++++++++
 .../java/org/apache/maven/scm/ChangeSetTest.java   |   2 +
 .../apache/maven/scm/plugin/BranchMojoTest.java    |   6 +
 .../apache/maven/scm/plugin/CheckoutMojoTest.java  |  24 +++
 .../apache/maven/scm/plugin/ExportMojoTest.java    |  31 +++-
 .../org/apache/maven/scm/plugin/TagMojoTest.java   |  23 ++-
 .../org/apache/maven/scm/plugin/UntagMojoTest.java |  12 ++
 .../apache/maven/scm/plugin/UpdateMojoTest.java    |   6 +
 .../hg/command/changelog/HgChangeLogConsumer.java  |   5 +-
 .../changelog/HgChangeLogCommandTckTest.java       |   7 +
 .../command/changelog/GitChangeLogCommand.java     |   3 +
 .../command/changelog/GitChangeLogConsumer.java    |  17 +-
 .../command/changelog/GitChangeLogCommandTest.java |  24 +--
 .../changelog/GitChangeLogConsumerTest.java        |  74 ++++++++-
 .../checkin/GitCheckInCommandNoBranchTest.java     |   9 +-
 .../command/checkin/GitCheckInCommandTest.java     |  14 +-
 .../GitExeCheckOutCommandNoBranchTest.java         |  14 +-
 .../gitexe/command/info/GitInfoCommandTest.java    |  10 ++
 .../test/resources/git/changelog/gitlog3.gitlog    | 177 +++++++++++++++++++++
 .../27/3658439f580b289f86d407d85f60f96b9e1b1f      |   2 +
 .../95/86ea07d625757c5af7fe38f6ca7d4bdae8447b      | Bin 128 -> 0 bytes
 .../test/resources/linear-changelog/packed-refs    |   3 +
 .../maven-scm-provider-gittest/readme.txt          |   3 +
 .../changelog/GitChangeLogCommandTckTest.java      |  20 +++
 .../scm/provider/git/jgit/command/JGitUtils.java   |  33 +++-
 .../command/changelog/JGitChangeLogCommand.java    |  20 ++-
 .../27/3658439f580b289f86d407d85f60f96b9e1b1f      |   2 +
 .../95/86ea07d625757c5af7fe38f6ca7d4bdae8447b      | Bin 128 -> 0 bytes
 .../test/resources/linear-changelog/packed-refs    |   3 +
 .../command/list/SvnExeListCommandTckTest.java     |   7 +
 .../remoteinfo/SvnRemoteInfoCommandTest.java       |   6 +
 .../java/org/apache/maven/scm/ScmTestCase.java     |   7 +
 .../command/changelog/ChangeLogCommandTckTest.java |  61 +++++--
 33 files changed, 630 insertions(+), 62 deletions(-)
 create mode 100644 maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/changelog/gitlog3.gitlog
 create mode 100644 maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/27/3658439f580b289f86d407d85f60f96b9e1b1f
 delete mode 100644 maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/95/86ea07d625757c5af7fe38f6ca7d4bdae8447b
 create mode 100644 maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/27/3658439f580b289f86d407d85f60f96b9e1b1f
 delete mode 100644 maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/95/86ea07d625757c5af7fe38f6ca7d4bdae8447b


[maven-scm] 01/01: [SCM-977] Support for retrieving tags from the changelog

Posted by mi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-scm.git

commit b04525fa0716e6de7a65bf9970284efa0e49b177
Author: Niels Basjes <ni...@basjes.nl>
AuthorDate: Thu Feb 10 16:26:30 2022 +0100

    [SCM-977] Support for retrieving tags from the changelog
    
    This closes #135
---
 .../main/java/org/apache/maven/scm/ChangeSet.java  |  67 ++++++++
 .../java/org/apache/maven/scm/ChangeSetTest.java   |   2 +
 .../hg/command/changelog/HgChangeLogConsumer.java  |   5 +-
 .../changelog/HgChangeLogCommandTckTest.java       |   7 +
 .../command/changelog/GitChangeLogCommand.java     |   3 +
 .../command/changelog/GitChangeLogConsumer.java    |  17 +-
 .../command/changelog/GitChangeLogCommandTest.java |  24 +--
 .../changelog/GitChangeLogConsumerTest.java        |  74 ++++++++-
 .../test/resources/git/changelog/gitlog3.gitlog    | 177 +++++++++++++++++++++
 .../27/3658439f580b289f86d407d85f60f96b9e1b1f      |   2 +
 .../95/86ea07d625757c5af7fe38f6ca7d4bdae8447b      | Bin 128 -> 0 bytes
 .../test/resources/linear-changelog/packed-refs    |   3 +
 .../maven-scm-provider-gittest/readme.txt          |   3 +
 .../changelog/GitChangeLogCommandTckTest.java      |  20 +++
 .../scm/provider/git/jgit/command/JGitUtils.java   |  33 +++-
 .../command/changelog/JGitChangeLogCommand.java    |  20 ++-
 .../27/3658439f580b289f86d407d85f60f96b9e1b1f      |   2 +
 .../95/86ea07d625757c5af7fe38f6ca7d4bdae8447b      | Bin 128 -> 0 bytes
 .../test/resources/linear-changelog/packed-refs    |   3 +
 .../command/changelog/ChangeLogCommandTckTest.java |  61 +++++--
 20 files changed, 490 insertions(+), 33 deletions(-)

diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java b/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java
index bc22ba2f6..6e49543f5 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java
@@ -116,6 +116,11 @@ public class ChangeSet
      */
     private List<ChangeFile> files;
 
+    /**
+     * List of tags
+     */
+    private List<String> tags;
+
     /**
      * The SCM revision id for this changeset.
      * @since 1.3
@@ -414,6 +419,53 @@ public class ChangeSet
         return TIME_FORMAT.format( getDate() );
     }
 
+    /**
+     * Getter for property tags.
+     *
+     * @return Value of property author.
+     */
+    public List<String> getTags()
+    {
+        if ( tags == null )
+        {
+            return new ArrayList<>();
+        }
+        return tags;
+    }
+
+    /**
+     * Setter for property tags.
+     *
+     * @param tags New value of property tags. This replaces the existing list (if any).
+     */
+    public void setTags( List<String> tags )
+    {
+        this.tags = tags;
+    }
+
+    /**
+     * Setter for property tags.
+     *
+     * @param tag New tag to add to the list of tags.
+     */
+    public void addTag( String tag )
+    {
+        if ( tag == null )
+        {
+            return;
+        }
+        tag = tag.trim();
+        if ( tag.isEmpty() )
+        {
+            return;
+        }
+        if ( tags == null )
+        {
+            tags = new ArrayList<>();
+        }
+        tags.add( tag );
+    }
+
     /**
      * @return TODO
      * @since 1.3
@@ -466,6 +518,11 @@ public class ChangeSet
     {
         StringBuilder result = new StringBuilder( author == null ? " null " : author );
         result.append( "\n" ).append( date == null ? "null " : date.toString() ).append( "\n" );
+        List<String> tags = getTags();
+        if ( !tags.isEmpty() )
+        {
+            result.append( "tags:" ).append( tags ).append( "\n" );
+        }
         // parent(s)
         if ( parentRevision != null )
         {
@@ -552,6 +609,16 @@ public class ChangeSet
         buffer.append( "\t\t<msg><![CDATA[" )
             .append( removeCDataEnd( comment ) )
             .append( "]]></msg>\n" );
+        List<String> tags = getTags();
+        if ( !tags.isEmpty() )
+        {
+            buffer.append( "\t\t<tags>\n" );
+            for ( String tag: tags )
+            {
+                buffer.append( "\t\t\t<tag>" ).append( escapeValue( tag ) ).append( "</tag>\n" );
+            }
+            buffer.append( "\t\t</tags>\n" );
+        }
         buffer.append( "\t</changelog-entry>\n" );
 
         return buffer.toString();
diff --git a/maven-scm-api/src/test/java/org/apache/maven/scm/ChangeSetTest.java b/maven-scm-api/src/test/java/org/apache/maven/scm/ChangeSetTest.java
index 67627dc72..77caae9b8 100644
--- a/maven-scm-api/src/test/java/org/apache/maven/scm/ChangeSetTest.java
+++ b/maven-scm-api/src/test/java/org/apache/maven/scm/ChangeSetTest.java
@@ -19,6 +19,7 @@ package org.apache.maven.scm;
  * under the License.
  */
 
+import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Date;
 
@@ -59,6 +60,7 @@ public class ChangeSetTest
         instance.setAuthor( "dion" );
         instance.setComment( "comment" );
         instance.setDate( "2002/04/01 00:00:00" );
+        instance.setTags( Arrays.asList( "v3.14", "v2<bla>.7]]1828", "<![CDATA[NastyTag" ) );
         return instance;
     }
 
diff --git a/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogConsumer.java b/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogConsumer.java
index 746876285..828f7aace 100644
--- a/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogConsumer.java
+++ b/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogConsumer.java
@@ -59,9 +59,6 @@ public class HgChangeLogConsumer
 
     private String currentRevision;
 
-    @SuppressWarnings( "unused" )
-    private String currentTag; // don't know what to do with this
-
     @SuppressWarnings( "unused" )
     private String currentBranch; // don't know what to do with this
 
@@ -127,7 +124,7 @@ public class HgChangeLogConsumer
         else if ( line.startsWith( TAG_TAG ) )
         {
             tmpLine = line.substring( TAG_TAG.length() ).trim();
-            currentTag = tmpLine;
+            currentChange.addTag( tmpLine );
         }
         else if ( line.startsWith( FILES_TOKEN ) )
         {
diff --git a/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogCommandTckTest.java b/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogCommandTckTest.java
index 25bbcc56e..8f95b073d 100644
--- a/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogCommandTckTest.java
+++ b/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogCommandTckTest.java
@@ -44,4 +44,11 @@ public class HgChangeLogCommandTckTest
     {
         HgRepoUtils.initRepo();
     }
+
+    @Override
+    public boolean isTagAnExtraCommit()
+    {
+        return true;
+    }
+
 }
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogCommand.java
index fe6ce6bb8..e8670b8ae 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogCommand.java
@@ -209,6 +209,9 @@ public class GitChangeLogCommand
 
         Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "whatchanged" );
         cl.createArg().setValue( "--format=medium" );
+        cl.createArg().setValue( "--decorate=short" );
+        cl.createArg().setValue( "--raw" );
+        cl.createArg().setValue( "--no-merges" );
 
         if ( startDate != null || endDate != null )
         {
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogConsumer.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogConsumer.java
index b231c597e..7d0d6e757 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogConsumer.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogConsumer.java
@@ -95,7 +95,7 @@ public class GitChangeLogConsumer
     /**
      * The pattern used to match git header lines
      */
-    private static final Pattern HEADER_PATTERN = Pattern.compile( "^commit (.*)" );
+    private static final Pattern HEADER_PATTERN = Pattern.compile( "^commit ([A-Fa-f0-9]+)(?: \\((.*)\\))?$" );
 
     /**
      * The pattern used to match git author lines
@@ -246,6 +246,21 @@ public class GitChangeLogConsumer
 
         currentChange.setRevision( currentRevision );
 
+        // Extract the tags (if present)
+        String tagList = matcher.group( 2 );
+        if ( tagList != null )
+        {
+            String[] rawTags = tagList.split( "," );
+            for ( String rawTag : rawTags )
+            {
+                String[] tagParts = rawTag.trim().split( ":" );
+                if ( tagParts.length == 2 && "tag".equals( tagParts[0] ) )
+                {
+                    currentChange.addTag( tagParts[1].trim() );
+                }
+            }
+        }
+
         status = STATUS_GET_AUTHOR;
     }
 
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogCommandTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogCommandTest.java
index f3e708775..be8de2aef 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogCommandTest.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogCommandTest.java
@@ -56,7 +56,7 @@ public class GitChangeLogCommandTest
         throws Exception
     {
         testCommandLine( "scm:git:http://foo.com/git", null, (Date) null, (Date) null, 40,
-                         "git whatchanged --format=medium --date=iso --max-count=40 -- ." );
+                         "git whatchanged --format=medium --decorate=short --raw --no-merges --date=iso --max-count=40 -- ." );
     }
 
     @Test
@@ -64,7 +64,7 @@ public class GitChangeLogCommandTest
         throws Exception
     {
         testCommandLine( "scm:git:http://foo.com/git", null, (Date) null, (Date) null,
-                         "git whatchanged --format=medium --date=iso -- ." );
+                         "git whatchanged --format=medium --decorate=short --raw --no-merges --date=iso -- ." );
     }
 
     @Test
@@ -75,7 +75,7 @@ public class GitChangeLogCommandTest
         Date endDate = getDate( 2007, Calendar.OCTOBER, 10, GMT_TIME_ZONE );
 
         testCommandLine( "scm:git:http://foo.com/git", null, startDate, endDate,
-                         "git whatchanged --format=medium \"--since=2003-09-10 00:00:00 +0000\" \"--until=2007-10-10 00:00:00 +0000\" --date=iso -- ." );
+                         "git whatchanged --format=medium --decorate=short --raw --no-merges \"--since=2003-09-10 00:00:00 +0000\" \"--until=2007-10-10 00:00:00 +0000\" --date=iso -- ." );
     }
 
     @Test
@@ -85,7 +85,7 @@ public class GitChangeLogCommandTest
         Date startDate = getDate( 2003, Calendar.SEPTEMBER, 10, 1, 1, 1, GMT_TIME_ZONE );
 
         testCommandLine( "scm:git:http://foo.com/git", null, startDate, null,
-                         "git whatchanged --format=medium \"--since=2003-09-10 01:01:01 +0000\" --date=iso -- ." );
+                         "git whatchanged --format=medium --decorate=short --raw --no-merges \"--since=2003-09-10 01:01:01 +0000\" --date=iso -- ." );
     }
 
     @Test
@@ -96,7 +96,7 @@ public class GitChangeLogCommandTest
         Date endDate = getDate( 2005, Calendar.NOVEMBER, 13, 23, 23, 23, GMT_TIME_ZONE );
 
         testCommandLine( "scm:git:http://foo.com/git", null, startDate, endDate,
-                         "git whatchanged --format=medium \"--since=2003-09-10 01:01:01 +0000\" \"--until=2005-11-13 23:23:23 +0000\" --date=iso -- ." );
+                         "git whatchanged --format=medium --decorate=short --raw --no-merges \"--since=2003-09-10 01:01:01 +0000\" \"--until=2005-11-13 23:23:23 +0000\" --date=iso -- ." );
     }
 
     @Test
@@ -107,7 +107,7 @@ public class GitChangeLogCommandTest
         Date endDate = getDate( 2005, Calendar.NOVEMBER, 13, 23, 23, 23, GMT_TIME_ZONE );
     
         testCommandLine( "scm:git:http://foo.com/git", null, startDate, endDate, new ScmRevision( "1" ), new ScmRevision( "10" ),
-                         "git whatchanged --format=medium \"--since=2003-09-10 01:01:01 +0000\" \"--until=2005-11-13 23:23:23 +0000\" --date=iso 1..10 -- ." );
+                         "git whatchanged --format=medium --decorate=short --raw --no-merges \"--since=2003-09-10 01:01:01 +0000\" \"--until=2005-11-13 23:23:23 +0000\" --date=iso 1..10 -- ." );
     }
 
     @Test
@@ -118,7 +118,7 @@ public class GitChangeLogCommandTest
 
         // Only specifying end date should print no dates at all
         testCommandLine( "scm:git:http://foo.com/git", null, null, endDate,
-                         "git whatchanged --format=medium \"--until=2003-11-10 00:00:00 +0000\" --date=iso -- ." );
+                         "git whatchanged --format=medium --decorate=short --raw --no-merges \"--until=2003-11-10 00:00:00 +0000\" --date=iso -- ." );
     }
 
     @Test
@@ -126,7 +126,7 @@ public class GitChangeLogCommandTest
         throws Exception
     {
         testCommandLine( "scm:git:http://foo.com/git", new ScmBranch( "my-test-branch" ), (Date) null, (Date) null, 
-                         "git whatchanged --format=medium --date=iso my-test-branch -- ." );
+                         "git whatchanged --format=medium --decorate=short --raw --no-merges --date=iso my-test-branch -- ." );
     }
 
 
@@ -135,7 +135,7 @@ public class GitChangeLogCommandTest
         throws Exception
     {
         testCommandLine( "scm:git:http://foo.com/git", null, new ScmRevision( "1" ), null, 
-                         "git whatchanged --format=medium --date=iso 1.. -- ." );
+                         "git whatchanged --format=medium --decorate=short --raw --no-merges --date=iso 1.. -- ." );
     }
 
     @Test
@@ -143,7 +143,7 @@ public class GitChangeLogCommandTest
         throws Exception
     {
         testCommandLine( "scm:git:http://foo.com/git", null, new ScmRevision( "1" ), new ScmRevision( "10" ), 
-                         "git whatchanged --format=medium --date=iso 1..10 -- ." );
+                         "git whatchanged --format=medium --decorate=short --raw --no-merges --date=iso 1..10 -- ." );
     }
 
     @Test
@@ -151,7 +151,7 @@ public class GitChangeLogCommandTest
         throws Exception
     {
         testCommandLine( "scm:git:http://foo.com/git", null, new ScmRevision( "1" ), new ScmRevision( "1" ), 
-                         "git whatchanged --format=medium --date=iso 1..1 -- ." );
+                         "git whatchanged --format=medium --decorate=short --raw --no-merges --date=iso 1..1 -- ." );
     }
 
     @Test
@@ -159,7 +159,7 @@ public class GitChangeLogCommandTest
         throws Exception
     {
         testCommandLine( "scm:git:http://foo.com/git", new ScmBranch( "my-test-branch" ), new ScmRevision( "1" ), new ScmRevision( "10" ), 
-                         "git whatchanged --format=medium --date=iso 1..10 my-test-branch -- ." );
+                         "git whatchanged --format=medium --decorate=short --raw --no-merges --date=iso 1..10 my-test-branch -- ." );
     }
 
     // ----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogConsumerTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogConsumerTest.java
index 2bac95785..aa419d9d3 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogConsumerTest.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogConsumerTest.java
@@ -28,11 +28,11 @@ import org.junit.Test;
 
 import java.io.File;
 import java.text.SimpleDateFormat;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.TimeZone;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -93,7 +93,7 @@ public class GitChangeLogConsumerTest
 
         assertNotNull( entry.getDate() );
         SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss Z" );
-        sdf.setTimeZone( TimeZone.getTimeZone( "GMT" ) );
+        sdf.setTimeZone( GMT_TIME_ZONE );
 
         assertEquals( "2007-11-24 00:10:42 +0000", sdf.format( entry.getDate() ) );
 
@@ -158,7 +158,7 @@ public class GitChangeLogConsumerTest
 
         assertNotNull( entry.getDate() );
         SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss Z" );
-        sdf.setTimeZone( TimeZone.getTimeZone( "GMT" ) );
+        sdf.setTimeZone( GMT_TIME_ZONE );
 
         assertEquals( "2007-11-27 13:05:36 +0000", sdf.format( entry.getDate() ) );
 
@@ -178,4 +178,72 @@ public class GitChangeLogConsumerTest
         assertTrue( cf.getRevision() != null && cf.getRevision().length() > 0 );
     }
 
+    public void testGitLogConsumer3()
+            throws Exception
+    {
+        GitChangeLogConsumer consumer = new GitChangeLogConsumer( null );
+
+        File f = getTestFile( "/src/test/resources/git/changelog/gitlog3.gitlog" );
+
+        ConsumerUtils.consumeFile( f, consumer );
+
+        List<ChangeSet> modifications = consumer.getModifications();
+
+        assertEquals( 10, modifications.size() );
+
+        SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss Z" );
+        sdf.setTimeZone( GMT_TIME_ZONE );
+
+        ChangeSet first = modifications.get( 0 );
+        assertEquals( "Michael Osipov <mi...@apache.org>", first.getAuthor() );
+        assertEquals( "2022-01-08 20:02:12 +0000", sdf.format( first.getDate() ) );
+        assertEquals( "[maven-release-plugin] prepare for next development iteration", first.getComment() );
+        assertEquals( "4fc34cfa14f2e72506187b03a492ce55ed459d4c", first.getRevision() );
+        assertEquals( Collections.emptyList(), first.getTags() );
+        assertNotNull( first.getFiles() );
+        assertFalse( first.getFiles().isEmpty() );
+
+        ChangeSet second = modifications.get( 1 );
+        assertEquals( "Michael Osipov <mi...@apache.org>", second.getAuthor() );
+        assertEquals( "2022-01-08 20:02:01 +0000", sdf.format( second.getDate() ) );
+        assertEquals( "[maven-release-plugin] prepare release maven-scm-2.0.0-M1", second.getComment() );
+        assertEquals( "3a6d9817fe809c43eca588d7c0f4428254eae17c", second.getRevision() );
+        assertEquals( Collections.singletonList("maven-scm-2.0.0-M1"), second.getTags() );
+        assertNotNull( second.getFiles() );
+        assertFalse( second.getFiles().isEmpty() );
+    }
+
+    public void testTagAndBranchConsumer() {
+        String[] lines = {
+            "commit a6d03ee7bcec7bfd6b0fc890a277f004a1c54077 (HEAD -> main, tag: TestTag, origin/main, origin/HEAD)",
+            "Author: Niels Basjes <ni...@basjes.nl>",
+            "Date:   2022-02-06 16:19:01 +0100",
+            "",
+            "    This",
+            "    is",
+            "    a",
+            "    multiline",
+            "    comment",
+            "",
+            ":100644 100644 2019174 808473f M\tdocumentation/pom.xml",
+            ""
+        };
+        GitChangeLogConsumer consumer = new GitChangeLogConsumer( null );
+
+        for ( String line : lines ) {
+            consumer.consumeLine( line );
+        }
+
+        List<ChangeSet> modifications = consumer.getModifications();
+
+        assertEquals( 1, modifications.size() );
+        ChangeSet changeSet = modifications.get( 0 );
+        assertEquals( Collections.singletonList( "TestTag" ), changeSet.getTags() );
+        assertEquals( "This\nis\na\nmultiline\ncomment", changeSet.getComment() );
+        List<ChangeFile> files = changeSet.getFiles();
+        assertEquals( 1, files.size() );
+        ChangeFile changeFile = files.get (0 );
+        assertEquals( "documentation/pom.xml", changeFile.getName() );
+    }
+
 }
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/changelog/gitlog3.gitlog b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/changelog/gitlog3.gitlog
new file mode 100644
index 000000000..d6c2045b9
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/changelog/gitlog3.gitlog
@@ -0,0 +1,177 @@
+commit 4fc34cfa14f2e72506187b03a492ce55ed459d4c (origin/master, origin/HEAD, master)
+Author: Michael Osipov <mi...@apache.org>
+Date:   2022-01-08 21:02:12 +0100
+
+    [maven-release-plugin] prepare for next development iteration
+
+:100644 100644 be8e3e1b a3d92db0 M	maven-scm-api/pom.xml
+:100644 100644 e5781e29 553ff1d7 M	maven-scm-client/pom.xml
+:100644 100644 ab1cc646 6548b95c M	maven-scm-managers/maven-scm-manager-plexus/pom.xml
+:100644 100644 2fd5532b e7570140 M	maven-scm-managers/pom.xml
+:100644 100644 51cfb787 3cac2d6b M	maven-scm-plugin/pom.xml
+:100644 100644 75f12fe0 fe860fe0 M	maven-scm-providers/maven-scm-provider-hg/pom.xml
+:100644 100644 c9f04356 0fb552f9 M	maven-scm-providers/maven-scm-provider-local/pom.xml
+:100644 100644 3d4b057e 17e1a308 M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/pom.xml
+:100644 100644 ae5efa48 3cf0b9e3 M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/pom.xml
+:100644 100644 54fab957 c7f27883 M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/pom.xml
+:100644 100644 97c35b97 ce46192b M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/pom.xml
+:100644 100644 589149c6 be12b7d9 M	maven-scm-providers/maven-scm-providers-git/pom.xml
+:100644 100644 5a22b634 f8dbd96f M	maven-scm-providers/maven-scm-providers-standard/pom.xml
+:100644 100644 45c963ff 53730cd2 M	maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/pom.xml
+:100644 100644 ba3f06b8 13cb5b48 M	maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/pom.xml
+:100644 100644 de81e728 e073434e M	maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svntest/pom.xml
+:100644 100644 23ee449e 8b329b0f M	maven-scm-providers/maven-scm-providers-svn/pom.xml
+:100644 100644 12b67d0b 5f7814a8 M	maven-scm-providers/pom.xml
+:100644 100644 5468c16f a8315a5e M	maven-scm-test/pom.xml
+:100644 100644 3221e2c9 03b18176 M	pom.xml
+
+commit 3a6d9817fe809c43eca588d7c0f4428254eae17c (tag: maven-scm-2.0.0-M1)
+Author: Michael Osipov <mi...@apache.org>
+Date:   2022-01-08 21:02:01 +0100
+
+    [maven-release-plugin] prepare release maven-scm-2.0.0-M1
+
+:100644 100644 a845fd86 be8e3e1b M	maven-scm-api/pom.xml
+:100644 100644 52c4b38b e5781e29 M	maven-scm-client/pom.xml
+:100644 100644 1425b849 ab1cc646 M	maven-scm-managers/maven-scm-manager-plexus/pom.xml
+:100644 100644 bd239c1a 2fd5532b M	maven-scm-managers/pom.xml
+:100644 100644 4779338c 51cfb787 M	maven-scm-plugin/pom.xml
+:100644 100644 86988f10 75f12fe0 M	maven-scm-providers/maven-scm-provider-hg/pom.xml
+:100644 100644 9b8b0163 c9f04356 M	maven-scm-providers/maven-scm-provider-local/pom.xml
+:100644 100644 22d9e17c 3d4b057e M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/pom.xml
+:100644 100644 df7d0ba4 ae5efa48 M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/pom.xml
+:100644 100644 017b7211 54fab957 M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/pom.xml
+:100644 100644 04a71865 97c35b97 M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/pom.xml
+:100644 100644 c8dbe617 589149c6 M	maven-scm-providers/maven-scm-providers-git/pom.xml
+:100644 100644 b4e6e76b 5a22b634 M	maven-scm-providers/maven-scm-providers-standard/pom.xml
+:100644 100644 7a2a4627 45c963ff M	maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/pom.xml
+:100644 100644 d8cf0a9e ba3f06b8 M	maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/pom.xml
+:100644 100644 47c24d64 de81e728 M	maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svntest/pom.xml
+:100644 100644 e7d1282e 23ee449e M	maven-scm-providers/maven-scm-providers-svn/pom.xml
+:100644 100644 e7c82f45 12b67d0b M	maven-scm-providers/pom.xml
+:100644 100644 9975ee65 5468c16f M	maven-scm-test/pom.xml
+:100644 100644 c383fda5 3221e2c9 M	pom.xml
+
+commit 6cf3ed02e19db47f20d95dac4a24f2c40121e67f
+Author: Michael Osipov <mi...@apache.org>
+Date:   2022-01-08 20:49:53 +0100
+
+    Use canonical name 'Maven SCM'
+
+:100644 100644 8838f745 815bbf01 M	src/site/apt/guide/index.apt
+:100644 100644 1d10177a 603601a0 M	src/site/apt/guide/new_provider.apt
+:100644 100644 2b9549ea be9af836 M	src/site/apt/guide/usage.apt
+:100644 100644 d7a51d3a b6a6a153 M	src/site/site.xml
+
+commit 8b64075b41174b581be3606aea08a88f9f06f73c
+Author: Michael Osipov <mi...@apache.org>
+Date:   2022-01-08 20:42:33 +0100
+
+    Fix issues reported by Checkstyle
+
+:100644 100644 a2cb04e7 3591ed00 M	maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/ChangeLogScmRequest.java
+:100644 100644 68a22e22 2af52046 M	maven-scm-api/src/main/java/org/apache/maven/scm/manager/BasicScmManager.java
+:100644 100644 3da92d68 0845ad05 M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/util/GitUtil.java
+:100644 100644 cc18268f db8fc52a M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java
+:100644 100644 75935bf6 d4d87f56 M	maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/util/SvnUtil.java
+
+commit 95018b3dc06938599fc463ccdc987a22c8662b71
+Author: Michael Osipov <mi...@apache.org>
+Date:   2022-01-03 21:26:38 +0100
+
+    [SCM-975] Broken link to Maven SCM plugin Release Notes
+
+:100644 100644 308b80bd 623dc00d M	maven-scm-plugin/src/site/site.xml
+
+commit 0336f89637fe5eb0ffe3080284d616fdda723c02
+Author: Michael Osipov <mi...@apache.org>
+Date:   2021-12-28 23:08:40 +0100
+
+    Fix formatting
+
+:100644 100644 89ed70ab 122e5707 M	src/site/apt/index.apt
+
+commit 4d475daf2ac407edf6b469c73f1c1c7fa4bb55ad
+Author: Michael Osipov <mi...@apache.org>
+Date:   2021-12-28 22:01:43 +0100
+
+    Fix Javadoc 8 issues (-Preporting)
+
+:100644 100644 85ba5388 c383fda5 M	pom.xml
+
+commit 2541e0d2bd87e18bebe612dab07379e6db4fe422
+Author: Michael Osipov <mi...@apache.org>
+Date:   2021-12-28 20:20:32 +0100
+
+    Fix Javadoc 8 issues
+
+:100644 100644 2d4c4e5d e4c40d62 M	maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java
+:100644 100644 7aa8ae4a 3c71b65f M	maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameters.java
+:100644 100644 1e861b24 6a3a8720 M	maven-scm-api/src/main/java/org/apache/maven/scm/ScmFileStatus.java
+:100644 100644 ae1ef0e8 aefd9a55 M	maven-scm-api/src/main/java/org/apache/maven/scm/ScmResult.java
+:100644 100644 446fd65b 09fbf4d2 M	maven-scm-api/src/main/java/org/apache/maven/scm/command/branch/AbstractBranchCommand.java
+:100644 100644 f8723c1c a2cb04e7 M	maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/ChangeLogScmRequest.java
+:100644 100644 e7e83238 7a545df9 M	maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/ChangeLogSet.java
+:100644 100644 d9a2d491 3a5d8000 M	maven-scm-api/src/main/java/org/apache/maven/scm/command/checkin/CheckInScmResult.java
+:100644 100644 a9e56487 6e3ae21b M	maven-scm-api/src/main/java/org/apache/maven/scm/command/checkout/CheckOutScmResult.java
+:100644 100644 a6ee259d e5089a33 M	maven-scm-api/src/main/java/org/apache/maven/scm/command/list/AbstractListCommand.java
+:100644 100644 a1d0ecbf daa4ac58 M	maven-scm-api/src/main/java/org/apache/maven/scm/command/mkdir/AbstractMkdirCommand.java
+:100644 100644 c0b4d56e 17188c91 M	maven-scm-api/src/main/java/org/apache/maven/scm/command/tag/AbstractTagCommand.java
+:100644 100644 996bbcbb 7e06bcdb M	maven-scm-api/src/main/java/org/apache/maven/scm/manager/AbstractScmManager.java
+:100644 100644 009c5270 f125b9a7 M	maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java
+:100644 100644 dcacd115 de30c6f4 M	maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
+:100644 100644 db60ef8d d7e69e97 M	maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java
+:100644 100644 39f70b29 a32e76a1 M	maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java
+:100644 100644 e2f6634b e1bef9ee M	maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmUrlUtils.java
+:100644 100644 ae6aeab9 1b511797 M	maven-scm-api/src/main/java/org/apache/maven/scm/repository/ScmRepository.java
+:100644 100644 389d7a43 8069101d M	maven-scm-api/src/main/java/org/apache/maven/scm/util/AbstractConsumer.java
+:100644 100644 a18ec572 9272ae50 M	maven-scm-api/src/main/java/org/apache/maven/scm/util/ConsumerUtils.java
+:100644 100644 8030fc3e 907149a8 M	maven-scm-api/src/main/java/org/apache/maven/scm/util/FilenameUtils.java
+:100644 100644 1923dd0b 1425b849 M	maven-scm-managers/maven-scm-manager-plexus/pom.xml
+:100644 100644 ecc4dd2d e146b1c6 M	maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/BootstrapMojo.java
+:100644 100644 3648e5c1 c787d8f8 M	maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/HgUtils.java
+:100644 100644 64a6f980 ede3501e M	maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgCommandConstants.java
+:100644 100644 d2b9d911 20886cc5 M	maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgConsumer.java
+:100644 100644 9446b9d3 e7e19840 M	maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/metadata/LocalScmMetadataUtils.java
+:100644 100644 6553c051 1a242043 M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java
+:100644 100644 bb1dad11 4f25def9 M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/GitCommandLineUtils.java
+:100644 100644 7fcda9cc a831e5ba M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
+:100644 100644 d129ed3e c5a42560 M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommand.java
+:100644 100644 c5e87c96 d01eb215 M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitStatusConsumer.java
+:100644 100644 6ad56ba2 cc18268f M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java
+:100644 100644 0ba09b7c 9f77adec M	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java
+:100644 100644 d4f1c200 dc5d9a1d M	maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnCommandUtils.java
+:100644 100644 1ebeff4e 6656eb12 M	maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnTagBranchUtils.java
+:100644 100644 cd786173 8929635e M	maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnBranchCommand.java
+:100644 100644 f5f7a172 3bcdd82d M	maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnTagCommand.java
+:100644 100644 20ca5dbe 4f2a4029 M	maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svntest/src/main/java/org/apache/maven/scm/provider/svn/command/list/SvnListCommandTckTest.java
+:100644 100644 89471ac1 996a4fe2 M	maven-scm-test/src/main/java/org/apache/maven/scm/ScmTckTestCase.java
+:100644 100644 69b4d9d2 e7e8e0bd M	maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/remoteinfo/AbstractRemoteInfoCommandTckTest.java
+:100644 100644 8329ed55 6b07a0c4 M	maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/status/StatusCommandTckTest.java
+:100644 100644 006a673c 8020bba4 M	maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/update/UpdateCommandTckTest.java
+:100644 100644 3ea7f80b 85ba5388 M	pom.xml
+
+commit 4c5b1d5f771b34af73b77d9a92fc1afe0b9b58e1
+Author: Michael Osipov <mi...@apache.org>
+Date:   2021-12-27 23:37:36 +0100
+
+    [SCM-974] Upgrade Plexus Utils to 3.3.1
+
+:100644 100644 93e5f062 3ea7f80b M	pom.xml
+
+commit ceb0e24ffa6095195ab7acd34b7aa5c807105537
+Author: Michael Osipov <mi...@apache.org>
+Date:   2021-12-27 22:05:17 +0100
+
+    [SCM-973] GitCheckInCommandNoBranchTest fails with Git 2.34.0+
+    
+    This closes #133
+
+:100644 100644 e69de29b e69de29b R100	maven-scm-plugin/src/test/resources/git/hooks/empty.txt	maven-scm-plugin/src/test/resources/git/hooks/.gitkeep
+:100644 100644 6068d6a5 6068d6a5 R100	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/info/dotgit/hooks/empty.txt	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/info/dotgit/hooks/.gitkeep
+:100644 100644 e69de29b e69de29b R100	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/empty.txt	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/.gitkeep
+:100644 100644 e69de29b e69de29b R100	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/repository/hooks/empty.txt	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/repository/hooks/.gitkeep
+:100644 100644 e69de29b e69de29b R100	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/repository_no_branch/hooks/empty.txt	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/repository_no_branch/hooks/.gitkeep
+:100644 100644 e69de29b e69de29b R100	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/repository_no_branch/objects/empty.txt	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/repository_no_branch/objects/.gitkeep
+:100644 100644 e69de29b e69de29b R100	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/repository_no_branch/refs/empty.txt	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/repository_no_branch/refs/.gitkeep
+:100644 100644 e69de29b e69de29b R100	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/empty.txt	maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/.gitkeep
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/27/3658439f580b289f86d407d85f60f96b9e1b1f b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/27/3658439f580b289f86d407d85f60f96b9e1b1f
new file mode 100644
index 000000000..3d842f384
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/27/3658439f580b289f86d407d85f60f96b9e1b1f
@@ -0,0 +1,2 @@
+x��K
+1P�9E�!�t���p�-�i���1����UQ�"�oLp�q0�/h�"�jWo�h��R$*9��V"�>��i;܅��m�·�t�6>x)ү`�����zF�u^�{D��F��L�R��`�H�7Q
\ No newline at end of file
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/95/86ea07d625757c5af7fe38f6ca7d4bdae8447b b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/95/86ea07d625757c5af7fe38f6ca7d4bdae8447b
deleted file mode 100644
index afce44472..000000000
Binary files a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/95/86ea07d625757c5af7fe38f6ca7d4bdae8447b and /dev/null differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/packed-refs b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/packed-refs
index d0314ac6b..a45720250 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/packed-refs
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/packed-refs
@@ -1,2 +1,5 @@
 # pack-refs with: peeled fully-peeled sorted 
 464921bc7cbaaae0779fc863724302d1148d6097 refs/heads/master
+0f1e817725b516978e5daaf35efdbacf83905918 refs/tags/Tag2
+db46d6323f632ee8c2bd781ee14ae80bcd884cde refs/tags/Tag4a
+db46d6323f632ee8c2bd781ee14ae80bcd884cde refs/tags/Tag4b
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/readme.txt b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/readme.txt
index be2943e01..a675d5fb9 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/readme.txt
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/readme.txt
@@ -54,6 +54,7 @@ Creation script
     export GIT_AUTHOR_DATE="2017-04-01T12:00:00Z"
     export GIT_COMMITTER_DATE="2017-04-10T12:00:00Z"
     git commit --amend --no-edit --date "$GIT_AUTHOR_DATE"
+    git tag "Tag2"
 
     echo "- 3" >> README.md
     git add -u
@@ -68,6 +69,8 @@ Creation script
     export GIT_AUTHOR_DATE="2017-08-01T12:00:00Z"
     export GIT_COMMITTER_DATE="2017-08-10T12:00:00Z"
     git commit --amend --no-edit --date "$GIT_AUTHOR_DATE"
+    git tag "Tag4a"
+    git tag "Tag4b"
 
     echo "- 5" >> README.md
     git add -u
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/changelog/GitChangeLogCommandTckTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/changelog/GitChangeLogCommandTckTest.java
index 6fa3acfa5..759b1c3cc 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/changelog/GitChangeLogCommandTckTest.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/changelog/GitChangeLogCommandTckTest.java
@@ -32,6 +32,9 @@ import org.apache.maven.scm.tck.command.changelog.ChangeLogCommandTckTest;
 import org.junit.Test;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 import static org.hamcrest.CoreMatchers.startsWith;
@@ -238,5 +241,22 @@ public abstract class GitChangeLogCommandTckTest
         assertThat( "bad commit SHA1 retrieved", logEntries.get( 1 ).getRevision(), startsWith( "e3864d9" ) );
         assertThat( "bad commit SHA1 retrieved", logEntries.get( 2 ).getRevision(), startsWith( "0f1e817" ) );
         assertThat( "bad commit SHA1 retrieved", logEntries.get( 3 ).getRevision(), startsWith( "e75cb5a" ) );
+
+        List<String> tags4 = Arrays.asList( "Tag4a", "Tag4b" );
+        List<String> tags2 = Collections.singletonList( "Tag2" );
+        List<String> noTags = Collections.emptyList();
+
+        assertEquals( "Incorrect tags found", tags4,  sorted( logEntries.get( 0 ).getTags() ) );
+        assertEquals( "Incorrect tags found", noTags, sorted( logEntries.get( 1 ).getTags() ) );
+        assertEquals( "Incorrect tags found", tags2,  sorted( logEntries.get( 2 ).getTags() ) );
+        assertEquals( "Incorrect tags found", noTags, sorted( logEntries.get( 3 ).getTags() ) );
+    }
+
+    private List<String> sorted( List<String> input )
+    {
+        List<String> result = new ArrayList<>( input );
+        Collections.sort( result );
+        return result;
     }
+
 }
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java
index dde42d764..8bfb2ecfd 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java
@@ -44,6 +44,7 @@ import org.eclipse.jgit.errors.StopWalkException;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.ProgressMonitor;
+import org.eclipse.jgit.lib.Ref;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.lib.RepositoryBuilder;
 import org.eclipse.jgit.lib.StoredConfig;
@@ -74,8 +75,11 @@ import java.util.Date;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
+import static org.eclipse.jgit.lib.Constants.R_TAGS;
+
 /**
  * JGit utility functions.
  *
@@ -462,4 +466,31 @@ public class JGitUtils
         }
     }
 
-}
+    /**
+     * Get a list of tags that has been set in the specified commit.
+     *
+     * @param repo the repository to work on
+     * @param commit the commit for which we want the tags
+     * @return a list of tags, might be empty, and never <code>null</code>
+     */
+    public static List<String> getTags( Repository repo, RevCommit commit ) throws IOException
+    {
+        Map<String, Ref> refList = repo.getRefDatabase().getRefs( R_TAGS );
+
+        RevWalk revWalk = new RevWalk( repo );
+
+        ObjectId commitId = commit.getId();
+        List<String> result = new ArrayList<>();
+
+        for ( Map.Entry<String, Ref> refEntry : refList.entrySet() )
+        {
+            ObjectId tagId = refEntry.getValue().getObjectId();
+            RevCommit tagCommit = revWalk.parseCommit( tagId );
+            if ( tagCommit != null && commitId.equals( tagCommit.getId() ) )
+            {
+                result.add( refEntry.getKey() );
+            }
+        }
+        return result;
+    }
+}
\ No newline at end of file
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/changelog/JGitChangeLogCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/changelog/JGitChangeLogCommand.java
index edef9d969..bf3df71e0 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/changelog/JGitChangeLogCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/changelog/JGitChangeLogCommand.java
@@ -43,6 +43,8 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+import static org.apache.maven.scm.provider.git.jgit.command.JGitUtils.getTags;
+
 /**
  * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
  * @author Dominik Bartholdi (imod)
@@ -108,8 +110,8 @@ public class JGitChangeLogCommand
 
             boolean versionOnly = startVersion == null && endVersion == null && version != null;
 
-            String startRev = null;
-            String endRev = null;
+            String startRev;
+            String endRev;
 
             if ( versionOnly )
             {
@@ -135,6 +137,7 @@ public class JGitChangeLogCommand
                 scmChange.setComment( change.getBody() );
                 scmChange.setDate( change.getAuthorDate() );
                 scmChange.setRevision( change.getCommitHash() );
+                scmChange.setTags( change.getTags() );
                 // X TODO scmChange.setFiles( change.get )
 
                 modifications.add( scmChange );
@@ -186,6 +189,7 @@ public class JGitChangeLogCommand
             ce.setCommitHash( c.getId().name() );
             ce.setTreeHash( c.getTree().getId().name() );
 
+            ce.setTags( getTags( repo, c ) );
             // X TODO missing: file list
 
             changes.add( ce );
@@ -220,6 +224,8 @@ public class JGitChangeLogCommand
         private String body;
 
         private List<File> files;
+        
+        private List<String> tags;
 
         public String getCommitHash()
         {
@@ -330,5 +336,15 @@ public class JGitChangeLogCommand
         {
             this.files = files;
         }
+
+        public List<String> getTags()
+        {
+            return tags;
+        }
+
+        public void setTags( List<String> tags )
+        {
+            this.tags = tags;
+        }
     }
 }
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/27/3658439f580b289f86d407d85f60f96b9e1b1f b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/27/3658439f580b289f86d407d85f60f96b9e1b1f
new file mode 100644
index 000000000..3d842f384
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/27/3658439f580b289f86d407d85f60f96b9e1b1f
@@ -0,0 +1,2 @@
+x��K
+1P�9E�!�t���p�-�i���1����UQ�"�oLp�q0�/h�"�jWo�h��R$*9��V"�>��i;܅��m�·�t�6>x)ү`�����zF�u^�{D��F��L�R��`�H�7Q
\ No newline at end of file
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/95/86ea07d625757c5af7fe38f6ca7d4bdae8447b b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/95/86ea07d625757c5af7fe38f6ca7d4bdae8447b
deleted file mode 100644
index afce44472..000000000
Binary files a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/95/86ea07d625757c5af7fe38f6ca7d4bdae8447b and /dev/null differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/packed-refs b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/packed-refs
index d0314ac6b..a45720250 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/packed-refs
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/packed-refs
@@ -1,2 +1,5 @@
 # pack-refs with: peeled fully-peeled sorted 
 464921bc7cbaaae0779fc863724302d1148d6097 refs/heads/master
+0f1e817725b516978e5daaf35efdbacf83905918 refs/tags/Tag2
+db46d6323f632ee8c2bd781ee14ae80bcd884cde refs/tags/Tag4a
+db46d6323f632ee8c2bd781ee14ae80bcd884cde refs/tags/Tag4b
diff --git a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/changelog/ChangeLogCommandTckTest.java b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/changelog/ChangeLogCommandTckTest.java
index 40d6228ff..a5c0a7ff8 100644
--- a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/changelog/ChangeLogCommandTckTest.java
+++ b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/changelog/ChangeLogCommandTckTest.java
@@ -22,15 +22,19 @@ package org.apache.maven.scm.tck.command.changelog;
 import org.apache.maven.scm.ChangeSet;
 import org.apache.maven.scm.ScmBranch;
 import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmTagParameters;
 import org.apache.maven.scm.ScmTckTestCase;
 import org.apache.maven.scm.ScmTestCase;
-import org.apache.maven.scm.ScmVersion;
+import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
 import org.apache.maven.scm.command.checkin.CheckInScmResult;
+import org.apache.maven.scm.command.tag.TagScmResult;
 import org.apache.maven.scm.provider.ScmProvider;
 import org.junit.Test;
 
+import java.util.Collections;
 import java.util.Date;
+import java.util.List;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -49,6 +53,16 @@ public abstract class ChangeLogCommandTckTest
     extends ScmTckTestCase
 {
     private static final String COMMIT_MSG = "Second changelog";
+    private static final String COMMIT_TAG = "v3.14";
+
+    /**
+     * In some SCMs (Hg) adding a tag creates an extra commit which offsets the expectations.
+     * @return If an extra commit will be present for a tag.
+     */
+    public boolean isTagAnExtraCommit()
+    {
+        return false;
+    }
 
     @Test
     public void testChangeLogCommand()
@@ -79,22 +93,49 @@ public abstract class ChangeLogCommandTckTest
         CheckInScmResult checkInResult = provider.checkIn( getScmRepository(), fileSet, COMMIT_MSG );
         assertTrue( "Unable to checkin changes to the repository", checkInResult.isSuccess() );
 
-        ChangeLogScmResult secondResult = provider.changeLog( getScmRepository(), fileSet, (ScmVersion) null, null );
+        ScmTagParameters scmTagParameters = new ScmTagParameters();
+        TagScmResult tagResult = provider.tag( getScmRepository(), fileSet, COMMIT_TAG, scmTagParameters );
+        assertTrue( "Unable to tag the changes in the repository", tagResult.isSuccess() );
+
+        ChangeLogScmRequest changeLogScmRequest = new ChangeLogScmRequest( getScmRepository(), fileSet );
+        ChangeLogScmResult secondResult = provider.changeLog( changeLogScmRequest );
         assertTrue( secondResult.getProviderMessage(), secondResult.isSuccess() );
-        assertEquals( firstLogSize + 1, secondResult.getChangeLog().getChangeSets().size() );
+
+        List<ChangeSet> changeSets = secondResult.getChangeLog().getChangeSets();
+
+        int expectedChangeSets = firstLogSize + 1;
+        boolean lastCommitIsCausedByTagging = false;
+        int lastCodeCommitIndex = 0;
+
+        if ( isTagAnExtraCommit() )
+        {
+            // This is for example Mercurial which creates an extra commit after tagging.
+            lastCommitIsCausedByTagging = true;
+            expectedChangeSets += 1;
+            lastCodeCommitIndex = 1;
+        }
+
+        assertEquals( expectedChangeSets, changeSets.size() );
+
+        // Check if the tag has been retrieved again
+        ChangeSet changeSetWithTag = changeSets.get( lastCodeCommitIndex );
+        assertEquals( Collections.singletonList( COMMIT_TAG ), changeSetWithTag.getTags() );
 
         //Now only retrieve the changelog after timeBeforeSecondChangeLog
         Date currentTime = new Date();
-        ChangeLogScmResult thirdResult = provider
-            .changeLog( getScmRepository(), fileSet, timeBeforeSecond, currentTime, 0, new ScmBranch( "" ) );
+        changeLogScmRequest = new ChangeLogScmRequest( getScmRepository(), fileSet );
+        changeLogScmRequest.setStartDate( timeBeforeSecond );
+        changeLogScmRequest.setEndDate( currentTime );
+        changeLogScmRequest.setScmBranch( new ScmBranch( "" ) );
+        ChangeLogScmResult thirdResult = provider.changeLog( changeLogScmRequest );
 
         //Thorough assert of the last result
         assertTrue( thirdResult.getProviderMessage(), thirdResult.isSuccess() );
-        assertEquals( 1, thirdResult.getChangeLog().getChangeSets().size() );
-        ChangeSet changeset = thirdResult.getChangeLog().getChangeSets().get( 0 );
-        assertTrue( changeset.getDate().after( timeBeforeSecond ) );
-
 
-        assertEquals( COMMIT_MSG, changeset.getComment() );
+        List<ChangeSet> thirdChangeSets = thirdResult.getChangeLog().getChangeSets();
+        assertEquals( lastCommitIsCausedByTagging ? 2 : 1, thirdChangeSets.size() );
+        ChangeSet changeset = thirdChangeSets.get( lastCodeCommitIndex );
+        assertTrue( changeset.getDate().after( timeBeforeSecond ) );
+        assertTrue( changeset.getComment().startsWith( COMMIT_MSG ) );
     }
 }