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:50 UTC
[maven-scm] 01/01: [SCM-977] Support for retrieving tags from the changelog
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 ) );
}
}