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 2018/05/22 21:05:11 UTC

[maven-scm] branch SCM-885 created (now 89a45c0)

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

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


      at 89a45c0  Some changes

This branch includes the following new commits:

     new 664fece  add linear-changelog repository documentation
     new 89a45c0  Some changes

The 2 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.


-- 
To stop receiving notification emails like this one, please contact
michaelo@apache.org.

[maven-scm] 01/02: add linear-changelog repository documentation

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

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

commit 664fece6243c3a045562dee874ba39ec2591ca18
Author: Matthieu Brouillard <ma...@brouillard.fr>
AuthorDate: Fri May 18 08:01:02 2018 +0200

    add linear-changelog repository documentation
---
 .gitattributes                                     |   5 +
 .../changelog/AbstractChangeLogCommand.java        |  18 ++-
 .../scm/command/changelog/ChangeLogScmRequest.java |  11 ++
 .../command/changelog/GitChangeLogCommand.java     |  58 +++++--
 .../src/test/resources/linear-changelog/HEAD       |   1 +
 .../src/test/resources/linear-changelog/config     |   6 +
 .../test/resources/linear-changelog/description    |   1 +
 .../linear-changelog/hooks/applypatch-msg          |  15 ++
 .../resources/linear-changelog/hooks/commit-msg    |  21 +++
 .../resources/linear-changelog/hooks/empty.txt     |   0
 .../resources/linear-changelog/hooks/post-commit   |   8 +
 .../resources/linear-changelog/hooks/post-receive  |  16 ++
 .../resources/linear-changelog/hooks/post-update   |   8 +
 .../linear-changelog/hooks/pre-applypatch          |  14 ++
 .../resources/linear-changelog/hooks/pre-commit    |  70 ++++++++
 .../resources/linear-changelog/hooks/pre-rebase    | 150 +++++++++++++++++
 .../test/resources/linear-changelog/hooks/update   |  78 +++++++++
 .../test/resources/linear-changelog/info/exclude   |   6 +
 .../0f/1e817725b516978e5daaf35efdbacf83905918      |   3 +
 .../1a/4fb3f570ad2e18dacb7f30d584868b2cea36a1      | Bin 0 -> 149 bytes
 .../3b/459fa9451a94fc1acd10e2e29ab73d93eb816d      | Bin 0 -> 75 bytes
 .../3c/f7bb86c15554148bf5b0b12bfd639e54a77e58      | Bin 0 -> 46 bytes
 .../46/4921bc7cbaaae0779fc863724302d1148d6097      |   1 +
 .../4a/cc5d1fac10c49efc02f2744eb5833367a02952      | Bin 0 -> 36 bytes
 .../56/acdd2af7e3d7b261d231014826ca472c9f6c2b      | Bin 0 -> 45 bytes
 .../61/4a3fd04313593d67f4154855a06941046326b3      | Bin 0 -> 23 bytes
 .../61/a0d22b023d6e31894d736cca8c1a47b6edd822      | Bin 0 -> 45 bytes
 .../67/b6ab2dfd7b2e2d6d9e8463489b92a1dd978d8f      | Bin 0 -> 42 bytes
 .../6c/414f3448323624c05585717a988cbbb77edd88      | Bin 0 -> 149 bytes
 .../74/d05e1e1cbd488c7ecd494a1b84c8c1d1534a45      | Bin 0 -> 149 bytes
 .../7f/3fe9f669f09b9ae0a156d5a61d02c73cf39fe0      | Bin 0 -> 47 bytes
 .../8d/0c7d820a2dc4832f12aa8387d1ba1211abc415      | Bin 0 -> 150 bytes
 .../8d/c8c65a1875c4cc0fe653df01990ba93dea368d      | Bin 0 -> 166 bytes
 .../8f/aa4bd1eb0653a81ca10b071bb138c2e27c84d9      | Bin 0 -> 40 bytes
 .../92/09a983605d6e43e5cf841a1ea18a1914bb7407      | Bin 0 -> 54 bytes
 .../95/86ea07d625757c5af7fe38f6ca7d4bdae8447b      | Bin 0 -> 128 bytes
 .../b2/1030901fb161c452d00b3efda5e11da6dd5f3f      | Bin 0 -> 150 bytes
 .../b5/3306f849b69ef0459ddf5cccff06b5fbb08c23      | Bin 0 -> 36 bytes
 .../ba/cd4ee105073117b30e5dcdba5150373b6b53c6      | Bin 0 -> 60 bytes
 .../c5/7c0fe2bb095a9f6a5e493be5f9306e01c5d5a1      |   3 +
 .../cf/1caee9ac9ff7db791de6e7ee6d3ce88bf2cf26      | Bin 0 -> 50 bytes
 .../db/46d6323f632ee8c2bd781ee14ae80bcd884cde      |   2 +
 .../e3/864d9e9499611b59da3c6a309180b2726b11ea      | Bin 0 -> 166 bytes
 .../e7/5cb5a80d7d26ddff9ac221fc576060719f2bd8      | Bin 0 -> 136 bytes
 .../ee/acfd7ce0a7e1049a320db614a71644a86cb793      |   3 +
 .../f4/499970a6774e5aad19877ee7c65d296ae21366      | Bin 0 -> 164 bytes
 .../f7/1429f9ff9214a546b438c611ae942c9cf5a49e      | Bin 0 -> 46 bytes
 .../fe/a16119a5b4ec0562d4f65b4237314250773bf8      | Bin 0 -> 27 bytes
 .../test/resources/linear-changelog/packed-refs    |   2 +
 .../linear-changelog/refs/heads/.keep-directory    |   0
 .../linear-changelog/refs/tags/.keep-directory     |   0
 .../maven-scm-provider-gittest/readme.txt          |  83 ++++++++++
 .../changelog/GitChangeLogCommandTckTest.java      | 179 ++++++++++++++++++++-
 .../command/changelog/JGitChangeLogCommand.java    |  43 ++++-
 .../src/test/resources/linear-changelog/HEAD       |   1 +
 .../src/test/resources/linear-changelog/config     |   8 +
 .../test/resources/linear-changelog/description    |   1 +
 .../linear-changelog/hooks/applypatch-msg          |  15 ++
 .../resources/linear-changelog/hooks/commit-msg    |  21 +++
 .../resources/linear-changelog/hooks/empty.txt     |   0
 .../resources/linear-changelog/hooks/post-commit   |   8 +
 .../resources/linear-changelog/hooks/post-receive  |  16 ++
 .../resources/linear-changelog/hooks/post-update   |   8 +
 .../linear-changelog/hooks/pre-applypatch          |  14 ++
 .../resources/linear-changelog/hooks/pre-commit    |  70 ++++++++
 .../resources/linear-changelog/hooks/pre-rebase    | 150 +++++++++++++++++
 .../test/resources/linear-changelog/hooks/update   |  78 +++++++++
 .../test/resources/linear-changelog/info/exclude   |   6 +
 .../0f/1e817725b516978e5daaf35efdbacf83905918      |   3 +
 .../1a/4fb3f570ad2e18dacb7f30d584868b2cea36a1      | Bin 0 -> 149 bytes
 .../3b/459fa9451a94fc1acd10e2e29ab73d93eb816d      | Bin 0 -> 75 bytes
 .../3c/f7bb86c15554148bf5b0b12bfd639e54a77e58      | Bin 0 -> 46 bytes
 .../46/4921bc7cbaaae0779fc863724302d1148d6097      |   1 +
 .../4a/cc5d1fac10c49efc02f2744eb5833367a02952      | Bin 0 -> 36 bytes
 .../56/acdd2af7e3d7b261d231014826ca472c9f6c2b      | Bin 0 -> 45 bytes
 .../61/4a3fd04313593d67f4154855a06941046326b3      | Bin 0 -> 23 bytes
 .../61/a0d22b023d6e31894d736cca8c1a47b6edd822      | Bin 0 -> 45 bytes
 .../67/b6ab2dfd7b2e2d6d9e8463489b92a1dd978d8f      | Bin 0 -> 42 bytes
 .../6c/414f3448323624c05585717a988cbbb77edd88      | Bin 0 -> 149 bytes
 .../74/d05e1e1cbd488c7ecd494a1b84c8c1d1534a45      | Bin 0 -> 149 bytes
 .../7f/3fe9f669f09b9ae0a156d5a61d02c73cf39fe0      | Bin 0 -> 47 bytes
 .../8d/0c7d820a2dc4832f12aa8387d1ba1211abc415      | Bin 0 -> 150 bytes
 .../8d/c8c65a1875c4cc0fe653df01990ba93dea368d      | Bin 0 -> 166 bytes
 .../8f/aa4bd1eb0653a81ca10b071bb138c2e27c84d9      | Bin 0 -> 40 bytes
 .../92/09a983605d6e43e5cf841a1ea18a1914bb7407      | Bin 0 -> 54 bytes
 .../95/86ea07d625757c5af7fe38f6ca7d4bdae8447b      | Bin 0 -> 128 bytes
 .../b2/1030901fb161c452d00b3efda5e11da6dd5f3f      | Bin 0 -> 150 bytes
 .../b5/3306f849b69ef0459ddf5cccff06b5fbb08c23      | Bin 0 -> 36 bytes
 .../ba/cd4ee105073117b30e5dcdba5150373b6b53c6      | Bin 0 -> 60 bytes
 .../c5/7c0fe2bb095a9f6a5e493be5f9306e01c5d5a1      |   3 +
 .../cf/1caee9ac9ff7db791de6e7ee6d3ce88bf2cf26      | Bin 0 -> 50 bytes
 .../db/46d6323f632ee8c2bd781ee14ae80bcd884cde      |   2 +
 .../e3/864d9e9499611b59da3c6a309180b2726b11ea      | Bin 0 -> 166 bytes
 .../e7/5cb5a80d7d26ddff9ac221fc576060719f2bd8      | Bin 0 -> 136 bytes
 .../ee/acfd7ce0a7e1049a320db614a71644a86cb793      |   3 +
 .../f4/499970a6774e5aad19877ee7c65d296ae21366      | Bin 0 -> 164 bytes
 .../f7/1429f9ff9214a546b438c611ae942c9cf5a49e      | Bin 0 -> 46 bytes
 .../fe/a16119a5b4ec0562d4f65b4237314250773bf8      | Bin 0 -> 27 bytes
 .../test/resources/linear-changelog/packed-refs    |   2 +
 .../linear-changelog/refs/heads/.keep-directory    |   0
 .../linear-changelog/refs/tags/.keep-directory     |   0
 pom.xml                                            |   1 +
 102 files changed, 1202 insertions(+), 14 deletions(-)

diff --git a/.gitattributes b/.gitattributes
index 3bb3b5e..d09ce69 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -6,3 +6,8 @@
 *.css    text
 *.js     text
 *.sql    text
+
+/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/** binary
+/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/** binary
+/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/* text eol=lf
+/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/* text eol=lf
\ No newline at end of file
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/AbstractChangeLogCommand.java b/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/AbstractChangeLogCommand.java
index b8473ab..61242c3 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/AbstractChangeLogCommand.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/AbstractChangeLogCommand.java
@@ -55,6 +55,14 @@ public abstract class AbstractChangeLogCommand
         throw new ScmException( "Unsupported method for this provider." );
     }
 
+    @Deprecated
+    protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repository, ScmFileSet fileSet,
+                                                          ScmVersion version, String datePattern )
+        throws ScmException
+    {
+        throw new ScmException( "Unsupported method for this provider." );
+    }
+
     /**
      * {@inheritDoc}
      */
@@ -76,13 +84,21 @@ public abstract class AbstractChangeLogCommand
 
         ScmBranch branch = (ScmBranch) parameters.getScmVersion( CommandParameter.BRANCH, null );
 
+        ScmVersion version = parameters.getScmVersion( CommandParameter.SCM_VERSION, null );
+
         ScmVersion startVersion = parameters.getScmVersion( CommandParameter.START_SCM_VERSION, null );
 
         ScmVersion endVersion = parameters.getScmVersion( CommandParameter.END_SCM_VERSION, null );
 
         String datePattern = parameters.getString( CommandParameter.CHANGELOG_DATE_PATTERN, null );
 
-        if ( startVersion != null || endVersion != null )
+        boolean uniqueUsageOfVersion = startVersion == null && endVersion == null && version != null;
+
+        if ( uniqueUsageOfVersion )
+        {
+            return executeChangeLogCommand( repository, fileSet, version, datePattern );
+        }
+        else if ( startVersion != null || endVersion != null )
         {
             return executeChangeLogCommand( repository, fileSet, startVersion, endVersion, datePattern );
         }
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/ChangeLogScmRequest.java b/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/ChangeLogScmRequest.java
index f96c126..f8723c1c 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/ChangeLogScmRequest.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/ChangeLogScmRequest.java
@@ -175,4 +175,15 @@ public class ChangeLogScmRequest
         setEndDate( endDate );
     }
 
+    public void setRevision( ScmVersion revision )
+        throws ScmException
+    {
+        parameters.setScmVersion( CommandParameter.SCM_VERSION, revision );
+    }
+
+    public ScmVersion getRevision()
+        throws ScmException
+    {
+        return parameters.getScmVersion( CommandParameter.SCM_VERSION, 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/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 2145eeb..50b8df8 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
@@ -69,6 +69,14 @@ public class GitChangeLogCommand
         return executeChangeLogCommand( repo, fileSet, startDate, endDate, branch, datePattern, null, null );
     }
 
+    @Override
+    protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repository, ScmFileSet fileSet,
+                                                          ScmVersion version, String datePattern )
+        throws ScmException
+    {
+        return executeChangeLogCommand( repository, fileSet, null, null, null, datePattern, null, null, null, version );
+    }
+
     protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet,
                                                           Date startDate, Date endDate, ScmBranch branch,
                                                           String datePattern, ScmVersion startVersion,
@@ -76,7 +84,7 @@ public class GitChangeLogCommand
         throws ScmException
     {
         return executeChangeLogCommand( repo, fileSet, startDate, endDate, branch, datePattern, startVersion,
-                                        endVersion, null );
+                                        endVersion, null, null );
     }
 
     @Override
@@ -85,21 +93,38 @@ public class GitChangeLogCommand
     {
         final ScmVersion startVersion = request.getStartRevision();
         final ScmVersion endVersion = request.getEndRevision();
+        final ScmVersion revision = request.getRevision();
         final ScmFileSet fileSet = request.getScmFileSet();
         final String datePattern = request.getDatePattern();
-        return executeChangeLogCommand( request.getScmRepository().getProviderRepository(), fileSet,
-            request.getStartDate(), request.getEndDate(), request.getScmBranch(), datePattern, startVersion,
-                endVersion, request.getLimit() );
+        final ScmProviderRepository providerRepository = request.getScmRepository().getProviderRepository();
+        final Date startDate = request.getStartDate();
+        final Date endDate = request.getEndDate();
+        final ScmBranch branch = request.getScmBranch();
+        final Integer limit = request.getLimit();
+        
+        return executeChangeLogCommand( providerRepository, fileSet, startDate, endDate, branch, datePattern,
+                                        startVersion, endVersion, limit, revision );
     }
 
+
     protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet,
                                                           Date startDate, Date endDate, ScmBranch branch,
                                                           String datePattern, ScmVersion startVersion,
                                                           ScmVersion endVersion, Integer limit )
         throws ScmException
     {
+        return executeChangeLogCommand( repo, fileSet, startDate, endDate, branch, datePattern,
+                                        startVersion, endVersion, limit, null );
+    }
+
+    protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet,
+                                                          Date startDate, Date endDate, ScmBranch branch,
+                                                          String datePattern, ScmVersion startVersion,
+                                                          ScmVersion endVersion, Integer limit, ScmVersion version )
+        throws ScmException
+    {
         Commandline cl = createCommandLine( (GitScmProviderRepository) repo, fileSet.getBasedir(), branch, startDate,
-                                            endDate, startVersion, endVersion, limit );
+                                            endDate, startVersion, endVersion, limit, version );
 
         GitChangeLogConsumer consumer = new GitChangeLogConsumer( getLogger(), datePattern );
 
@@ -137,8 +162,17 @@ public class GitChangeLogCommand
     }
 
     static Commandline createCommandLine( GitScmProviderRepository repository, File workingDirectory,
+                                          ScmBranch branch, Date startDate, Date endDate,
+                                          ScmVersion startVersion, ScmVersion endVersion, Integer limit )
+    {
+        return createCommandLine( repository, workingDirectory, branch, startDate, endDate, startVersion, endVersion,
+                            limit, null );
+    }
+
+    static Commandline createCommandLine( GitScmProviderRepository repository, File workingDirectory,
                                                  ScmBranch branch, Date startDate, Date endDate,
-                                                 ScmVersion startVersion, ScmVersion endVersion, Integer limit )
+                                                 ScmVersion startVersion, ScmVersion endVersion, Integer limit,
+                                                 ScmVersion version )
     {
         SimpleDateFormat dateFormat = new SimpleDateFormat( DATE_FORMAT );
         dateFormat.setTimeZone( TimeZone.getTimeZone( "GMT" ) );
@@ -166,21 +200,25 @@ public class GitChangeLogCommand
         if ( startVersion != null || endVersion != null )
         {
             StringBuilder versionRange = new StringBuilder();
-            
+
             if ( startVersion != null )
             {
                 versionRange.append( StringUtils.escape( startVersion.getName() ) );
             }
 
             versionRange.append( ".." );
-            
+
             if ( endVersion != null )
             {
                 versionRange.append( StringUtils.escape( endVersion.getName() ) );
             }
-            
-            cl.createArg().setValue( versionRange.toString() ); 
 
+            cl.createArg().setValue( versionRange.toString() );
+
+        }
+        else if ( version != null )
+        {
+            cl.createArg().setValue( StringUtils.escape( version.getName() ) );
         }
 
         if ( limit != null && limit > 0 )
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/HEAD b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/HEAD
new file mode 100644
index 0000000..cb089cd
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/master
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/config b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/config
new file mode 100644
index 0000000..64280b8
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/config
@@ -0,0 +1,6 @@
+[core]
+	repositoryformatversion = 0
+	filemode = false
+	bare = true
+	symlinks = false
+	ignorecase = true
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/description b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/description
new file mode 100644
index 0000000..498b267
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/description
@@ -0,0 +1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/applypatch-msg b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/applypatch-msg
new file mode 100644
index 0000000..02de1ef
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/applypatch-msg
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, make this file executable.
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/commit-msg b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/commit-msg
new file mode 100644
index 0000000..c5cdb9d
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/commit-msg
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by git-commit with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, make this file executable.
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/empty.txt b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/empty.txt
new file mode 100644
index 0000000..e69de29
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-commit b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-commit
new file mode 100644
index 0000000..8be6f34
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-commit
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script that is called after a successful
+# commit is made.
+#
+# To enable this hook, make this file executable.
+
+: Nothing
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-receive b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-receive
new file mode 100644
index 0000000..b70c8fd
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-receive
@@ -0,0 +1,16 @@
+#!/bin/sh
+#
+# An example hook script for the post-receive event
+#
+# This script is run after receive-pack has accepted a pack and the
+# repository has been updated.  It is passed arguments in through stdin
+# in the form
+#  <oldrev> <newrev> <refname>
+# For example:
+#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
+#
+# see contrib/hooks/ for an sample, or uncomment the next line (on debian)
+#
+
+
+#. /usr/share/doc/git-core/contrib/hooks/post-receive-email
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-update b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-update
new file mode 100644
index 0000000..bcba893
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-update
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, make this file executable by "chmod +x post-update".
+
+exec git-update-server-info
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-applypatch b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-applypatch
new file mode 100644
index 0000000..eeccc93
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-applypatch
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, make this file executable.
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-commit b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-commit
new file mode 100644
index 0000000..18b8730
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-commit
@@ -0,0 +1,70 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by git-commit with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, make this file executable.
+
+# This is slightly modified from Andrew Morton's Perfect Patch.
+# Lines you introduce should not have trailing whitespace.
+# Also check for an indentation that has SP before a TAB.
+
+if git-rev-parse --verify HEAD 2>/dev/null
+then
+	git-diff-index -p -M --cached HEAD
+else
+	# NEEDSWORK: we should produce a diff with an empty tree here
+	# if we want to do the same verification for the initial import.
+	:
+fi |
+perl -e '
+    my $found_bad = 0;
+    my $filename;
+    my $reported_filename = "";
+    my $lineno;
+    sub bad_line {
+	my ($why, $line) = @_;
+	if (!$found_bad) {
+	    print STDERR "*\n";
+	    print STDERR "* You have some suspicious patch lines:\n";
+	    print STDERR "*\n";
+	    $found_bad = 1;
+	}
+	if ($reported_filename ne $filename) {
+	    print STDERR "* In $filename\n";
+	    $reported_filename = $filename;
+	}
+	print STDERR "* $why (line $lineno)\n";
+	print STDERR "$filename:$lineno:$line\n";
+    }
+    while (<>) {
+	if (m|^diff --git a/(.*) b/\1$|) {
+	    $filename = $1;
+	    next;
+	}
+	if (/^@@ -\S+ \+(\d+)/) {
+	    $lineno = $1 - 1;
+	    next;
+	}
+	if (/^ /) {
+	    $lineno++;
+	    next;
+	}
+	if (s/^\+//) {
+	    $lineno++;
+	    chomp;
+	    if (/\s$/) {
+		bad_line("trailing whitespace", $_);
+	    }
+	    if (/^\s* 	/) {
+		bad_line("indent SP followed by a TAB", $_);
+	    }
+	    if (/^(?:[<>=]){7}/) {
+		bad_line("unresolved merge conflict", $_);
+	    }
+	}
+    }
+    exit($found_bad);
+'
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-rebase b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-rebase
new file mode 100644
index 0000000..981c454
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-rebase
@@ -0,0 +1,150 @@
+#!/bin/sh
+#
+# Copyright (c) 2006 Junio C Hamano
+#
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD`
+fi
+
+case "$basebranch,$topic" in
+master,refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Is topic fully merged to master?
+not_in_master=`git-rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git-rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git-rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git-rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up-to-date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git-rev-list --pretty=oneline ^${publish} "$topic"`
+	perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+exit 0
+
+################################################################
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git-rev-list ^master ^topic next
+	git-rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git-rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/update b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/update
new file mode 100644
index 0000000..d8c7626
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/update
@@ -0,0 +1,78 @@
+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by git-receive-pack with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, make this file executable by "chmod +x update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git-repo-config --bool hooks.allowunannotated)
+
+# check for no description
+projectdesc=$(sed -e '1p' "$GIT_DIR/description")
+if [ -z "$projectdesc" -o "$projectdesc" = "Unnamed repository; edit this file to name it for gitweb" ]; then
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+fi
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a branch
+if [ "$newrev" = "0000000000000000000000000000000000000000" ]; then
+	newrev_type=commit
+else
+	newrev_type=$(git-cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		;;
+	refs/heads/*,commit)
+		# branch
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/info/exclude b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/info/exclude
new file mode 100644
index 0000000..a5196d1
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/info/exclude
@@ -0,0 +1,6 @@
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/0f/1e817725b516978e5daaf35efdbacf83905918 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/0f/1e817725b516978e5daaf35efdbacf83905918
new file mode 100644
index 0000000..ac65cb3
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/0f/1e817725b516978e5daaf35efdbacf83905918
@@ -0,0 +1,3 @@
+x���
+�0E]�+f/�ɴyD\��/&�	Uh#1��ەk7�Á7�u�w ���婤���,�6
+�ʈ��}L��G��<���A���qD	B^���3�-����%���}�
nu��ZN���zy�U?�6r]�`��������~��q$�����u2_�Fu
\ 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/1a/4fb3f570ad2e18dacb7f30d584868b2cea36a1 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/1a/4fb3f570ad2e18dacb7f30d584868b2cea36a1
new file mode 100644
index 0000000..01f125c
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/1a/4fb3f570ad2e18dacb7f30d584868b2cea36a1 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/3b/459fa9451a94fc1acd10e2e29ab73d93eb816d b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/3b/459fa9451a94fc1acd10e2e29ab73d93eb816d
new file mode 100644
index 0000000..6b6bfad
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/3b/459fa9451a94fc1acd10e2e29ab73d93eb816d differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/3c/f7bb86c15554148bf5b0b12bfd639e54a77e58 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/3c/f7bb86c15554148bf5b0b12bfd639e54a77e58
new file mode 100644
index 0000000..c8859bd
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/3c/f7bb86c15554148bf5b0b12bfd639e54a77e58 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/46/4921bc7cbaaae0779fc863724302d1148d6097 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/46/4921bc7cbaaae0779fc863724302d1148d6097
new file mode 100644
index 0000000..a02d566
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/46/4921bc7cbaaae0779fc863724302d1148d6097
@@ -0,0 +1 @@
+x�����0DS�+�?��%+p���/$�;`+���Qu�M1Li۶v�֝�P�Ž/,5K�2y��١j��T}u�<Ӂ���)hp��Q@,6��)!r.�T&����i�N��~�uֆ�o��^p�\�v%���Xf��3���Oy.�?٤�׶�7��F�
\ 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/4a/cc5d1fac10c49efc02f2744eb5833367a02952 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/4a/cc5d1fac10c49efc02f2744eb5833367a02952
new file mode 100644
index 0000000..e998358
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/4a/cc5d1fac10c49efc02f2744eb5833367a02952 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/56/acdd2af7e3d7b261d231014826ca472c9f6c2b b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/56/acdd2af7e3d7b261d231014826ca472c9f6c2b
new file mode 100644
index 0000000..8757376
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/56/acdd2af7e3d7b261d231014826ca472c9f6c2b differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/61/4a3fd04313593d67f4154855a06941046326b3 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/61/4a3fd04313593d67f4154855a06941046326b3
new file mode 100644
index 0000000..bca48ac
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/61/4a3fd04313593d67f4154855a06941046326b3 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/61/a0d22b023d6e31894d736cca8c1a47b6edd822 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/61/a0d22b023d6e31894d736cca8c1a47b6edd822
new file mode 100644
index 0000000..26470db
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/61/a0d22b023d6e31894d736cca8c1a47b6edd822 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/67/b6ab2dfd7b2e2d6d9e8463489b92a1dd978d8f b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/67/b6ab2dfd7b2e2d6d9e8463489b92a1dd978d8f
new file mode 100644
index 0000000..6c72457
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/67/b6ab2dfd7b2e2d6d9e8463489b92a1dd978d8f differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/6c/414f3448323624c05585717a988cbbb77edd88 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/6c/414f3448323624c05585717a988cbbb77edd88
new file mode 100644
index 0000000..3959829
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/6c/414f3448323624c05585717a988cbbb77edd88 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/74/d05e1e1cbd488c7ecd494a1b84c8c1d1534a45 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/74/d05e1e1cbd488c7ecd494a1b84c8c1d1534a45
new file mode 100644
index 0000000..3da7dc7
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/74/d05e1e1cbd488c7ecd494a1b84c8c1d1534a45 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/7f/3fe9f669f09b9ae0a156d5a61d02c73cf39fe0 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/7f/3fe9f669f09b9ae0a156d5a61d02c73cf39fe0
new file mode 100644
index 0000000..413852b
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/7f/3fe9f669f09b9ae0a156d5a61d02c73cf39fe0 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/8d/0c7d820a2dc4832f12aa8387d1ba1211abc415 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/8d/0c7d820a2dc4832f12aa8387d1ba1211abc415
new file mode 100644
index 0000000..53ded79
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/8d/0c7d820a2dc4832f12aa8387d1ba1211abc415 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/8d/c8c65a1875c4cc0fe653df01990ba93dea368d b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/8d/c8c65a1875c4cc0fe653df01990ba93dea368d
new file mode 100644
index 0000000..0c410ef
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/8d/c8c65a1875c4cc0fe653df01990ba93dea368d differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/8f/aa4bd1eb0653a81ca10b071bb138c2e27c84d9 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/8f/aa4bd1eb0653a81ca10b071bb138c2e27c84d9
new file mode 100644
index 0000000..32aa1ac
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/8f/aa4bd1eb0653a81ca10b071bb138c2e27c84d9 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/92/09a983605d6e43e5cf841a1ea18a1914bb7407 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/92/09a983605d6e43e5cf841a1ea18a1914bb7407
new file mode 100644
index 0000000..9493985
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/92/09a983605d6e43e5cf841a1ea18a1914bb7407 differ
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
new file mode 100644
index 0000000..afce444
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/95/86ea07d625757c5af7fe38f6ca7d4bdae8447b differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/b2/1030901fb161c452d00b3efda5e11da6dd5f3f b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/b2/1030901fb161c452d00b3efda5e11da6dd5f3f
new file mode 100644
index 0000000..8437a7c
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/b2/1030901fb161c452d00b3efda5e11da6dd5f3f differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/b5/3306f849b69ef0459ddf5cccff06b5fbb08c23 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/b5/3306f849b69ef0459ddf5cccff06b5fbb08c23
new file mode 100644
index 0000000..314330e
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/b5/3306f849b69ef0459ddf5cccff06b5fbb08c23 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/ba/cd4ee105073117b30e5dcdba5150373b6b53c6 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/ba/cd4ee105073117b30e5dcdba5150373b6b53c6
new file mode 100644
index 0000000..fe99cd8
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/ba/cd4ee105073117b30e5dcdba5150373b6b53c6 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/c5/7c0fe2bb095a9f6a5e493be5f9306e01c5d5a1 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/c5/7c0fe2bb095a9f6a5e493be5f9306e01c5d5a1
new file mode 100644
index 0000000..1612db5
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/c5/7c0fe2bb095a9f6a5e493be5f9306e01c5d5a1
@@ -0,0 +1,3 @@
+x��A
+�0E]��J��i& �•�H'S��Fj��ەk7�ǃ_���}8��"φ�:�hZ(Q�QHE� ���7[�	M0ƞG�!E1.9O�m*c�IB�P\~��np��
+�jpz�ԕj�W]�3�f���H	=����x���b�c�y��.k����(�E�
\ 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/cf/1caee9ac9ff7db791de6e7ee6d3ce88bf2cf26 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/cf/1caee9ac9ff7db791de6e7ee6d3ce88bf2cf26
new file mode 100644
index 0000000..461ba2f
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/cf/1caee9ac9ff7db791de6e7ee6d3ce88bf2cf26 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/db/46d6323f632ee8c2bd781ee14ae80bcd884cde b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/db/46d6323f632ee8c2bd781ee14ae80bcd884cde
new file mode 100644
index 0000000..d3fda4b
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/db/46d6323f632ee8c2bd781ee14ae80bcd884cde
@@ -0,0 +1,2 @@
+x��A
+�0E]��Jf��q��[L��Vh#1���ʵ�x��纮K"w�M��<&+T�gGw$v<L��(){�S�n�q�%j�1�4�".q6"�D���b�����V�
�U���i(U/���g֦C��p�82��p���n��]��Ʌ���ܗ��7_�rD�
\ 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/e3/864d9e9499611b59da3c6a309180b2726b11ea b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/e3/864d9e9499611b59da3c6a309180b2726b11ea
new file mode 100644
index 0000000..60f2a18
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/e3/864d9e9499611b59da3c6a309180b2726b11ea differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/e7/5cb5a80d7d26ddff9ac221fc576060719f2bd8 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/e7/5cb5a80d7d26ddff9ac221fc576060719f2bd8
new file mode 100644
index 0000000..fbfefeb
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/e7/5cb5a80d7d26ddff9ac221fc576060719f2bd8 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/ee/acfd7ce0a7e1049a320db614a71644a86cb793 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/ee/acfd7ce0a7e1049a320db614a71644a86cb793
new file mode 100644
index 0000000..7bc5264
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/ee/acfd7ce0a7e1049a320db614a71644a86cb793
@@ -0,0 +1,3 @@
+x��K
+1P�9E�!���".\y�N�2#�Db�뛅�VE���u��D�Л���/�4S�6�#1|��H����Y=���ALp�D�6F���X�d�FG:�'����R��õ
+��M���U7�,�d�u;���5�����O�ut�����׺�U_��D�
\ 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/f4/499970a6774e5aad19877ee7c65d296ae21366 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/f4/499970a6774e5aad19877ee7c65d296ae21366
new file mode 100644
index 0000000..256052c
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/f4/499970a6774e5aad19877ee7c65d296ae21366 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/f7/1429f9ff9214a546b438c611ae942c9cf5a49e b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/f7/1429f9ff9214a546b438c611ae942c9cf5a49e
new file mode 100644
index 0000000..b543850
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/f7/1429f9ff9214a546b438c611ae942c9cf5a49e differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/fe/a16119a5b4ec0562d4f65b4237314250773bf8 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/fe/a16119a5b4ec0562d4f65b4237314250773bf8
new file mode 100644
index 0000000..6c36970
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/fe/a16119a5b4ec0562d4f65b4237314250773bf8 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
new file mode 100644
index 0000000..d0314ac
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/packed-refs
@@ -0,0 +1,2 @@
+# pack-refs with: peeled fully-peeled sorted 
+464921bc7cbaaae0779fc863724302d1148d6097 refs/heads/master
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/refs/heads/.keep-directory b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/refs/heads/.keep-directory
new file mode 100644
index 0000000..e69de29
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/refs/tags/.keep-directory b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/refs/tags/.keep-directory
new file mode 100644
index 0000000..e69de29
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
new file mode 100644
index 0000000..402847b
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/readme.txt
@@ -0,0 +1,83 @@
+#######################################
+Description of linear-changelog repository
+#######################################
+
+The 'linear-changelog' repositories in src\test\resources of git implementations has been created
+    - using the script below
+    - and then using a `clone --bare` command
+
+- - - - - - - - - - - - - - - -
+Repository structure
+- - - - - - - - - - - - - - - -
+
+    $ git log --graph --format="%h - %s (authored) <%an> %ai (commited) <%cn> %ci"
+    * 464921b - action 5 (authored) <John Doe> 2017-10-01 12:00:00 +0000 (commited) <John Doe> 2017-10-10 12:00:00 +0000
+    * db46d63 - action 4 (authored) <John Doe> 2017-08-01 12:00:00 +0000 (commited) <John Doe> 2017-08-10 12:00:00 +0000
+    * e3864d9 - action 3 (authored) <John Doe> 2017-06-01 12:00:00 +0000 (commited) <John Doe> 2017-06-10 12:00:00 +0000
+    * 0f1e817 - action 2 (authored) <John Doe> 2017-04-01 12:00:00 +0000 (commited) <John Doe> 2017-04-10 12:00:00 +0000
+    * e75cb5a - action 1 (authored) <John Doe> 2017-02-01 12:00:00 +0000 (commited) <John Doe> 2017-02-10 12:00:00 +0000
+
+- - - - - - - - - - - - - - - -
+Creation script
+- - - - - - - - - - - - - - - -
+    #!/bin/sh
+
+    cd /tmp
+    rm -rf linear-changelog
+    mkdir linear-changelog
+    cd linear-changelog
+    git init
+    git config user.name "John Doe"
+    git config user.email "john.doe@somewhere.com"
+
+    mkdir -p src/main/java
+    mkdir -p src/test/java
+
+    echo -n "/pom.xml" > pom.xml
+    echo -n "/readme.txt" > readme.txt
+    echo -n "/src/main/java/Application.java" > src/main/java/Application.java
+    echo -n "/src/test/java/Test.java" > src/test/java/Test.java
+
+    echo "## Linear changelog" >> README.md
+    git add .
+
+    echo "- 1" >> README.md
+    git add -u
+    git commit -m "action 1"
+    export GIT_AUTHOR_DATE="2017-02-01T12:00:00Z"
+    export GIT_COMMITTER_DATE="2017-02-10T12:00:00Z"
+    git commit --amend --no-edit --date "$GIT_AUTHOR_DATE"
+
+    echo "- 2" >> README.md
+    git add -u
+    git commit -m "action 2"
+    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"
+
+    echo "- 3" >> README.md
+    git add -u
+    git commit -m "action 3"
+    export GIT_AUTHOR_DATE="2017-06-01T12:00:00Z"
+    export GIT_COMMITTER_DATE="2017-06-10T12:00:00Z"
+    git commit --amend --no-edit --date "$GIT_AUTHOR_DATE"
+
+    echo "- 4" >> README.md
+    git add -u
+    git commit -m "action 4"
+    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"
+
+    echo "- 5" >> README.md
+    git add -u
+    git commit -m "action 5"
+    export GIT_AUTHOR_DATE="2017-10-01T12:00:00Z"
+    export GIT_COMMITTER_DATE="2017-10-10T12:00:00Z"
+    git commit --amend --no-edit --date "$GIT_AUTHOR_DATE"
+
+    unset GIT_COMMITTER_DATE
+
+    echo Repository created.
+    git log --graph --format="%h - %s (authored) <%an> %ai (commited) <%cn> %ci"
+
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 0faa496..1dceccc 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
@@ -19,12 +19,22 @@ package org.apache.maven.scm.provider.git.command.changelog;
  * under the License.
  */
 
+import org.apache.maven.scm.ChangeSet;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmRevision;
+import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
+import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
+import org.apache.maven.scm.provider.ScmProvider;
 import org.apache.maven.scm.provider.git.GitScmTestUtils;
 import org.apache.maven.scm.repository.ScmRepository;
 import org.apache.maven.scm.tck.command.changelog.ChangeLogCommandTckTest;
 
 import java.io.File;
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.startsWith;
+import static org.junit.Assert.assertThat;
 
 /**
  * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
@@ -32,12 +42,13 @@ import java.io.File;
 public abstract class GitChangeLogCommandTckTest
     extends ChangeLogCommandTckTest
 {
+    public static final int SLEEP_TIME_IN_MILLIS = 250;
 
     /** {@inheritDoc} */
     public void initRepo()
         throws Exception
     {
-        GitScmTestUtils.initRepo( "src/test/resources/repository/", getRepositoryRoot(), getWorkingDirectory() );
+        GitScmTestUtils.initRepo( "src/test/resources/linear-changelog/", getRepositoryRoot(), getWorkingDirectory() );
     }
 
     @Override
@@ -52,4 +63,170 @@ public abstract class GitChangeLogCommandTckTest
             GitScmTestUtils.setDefaultUser( workingDirectory );
         }
     }
+
+    public void testChangeLogCommandFromHeadAncestorAndHead()
+        throws Exception
+    {
+        Thread.sleep( SLEEP_TIME_IN_MILLIS );
+        ScmRepository scmRepository = getScmRepository();
+        ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
+        ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
+
+        ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
+        String startVersion = "HEAD~1";
+        clr.setStartRevision( new ScmRevision( startVersion ) );
+        String endVersion = "HEAD";
+        clr.setEndRevision( new ScmRevision( endVersion ) );
+        ChangeLogScmResult changelogResult = provider.changeLog( clr );
+
+        List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
+        assertEquals( String.format( "changelog for %s..%s returned bad number of commits", startVersion, endVersion ),
+                1, logEntries.size() );
+
+
+        assertThat( "bad head commit SHA1 retrieved", logEntries.get( 0 ).getRevision(), startsWith( "464921b" ) );
+    }
+
+    public void testChangeLogCommandFromHeadToHead()
+            throws Exception
+    {
+        Thread.sleep( SLEEP_TIME_IN_MILLIS );
+        ScmRepository scmRepository = getScmRepository();
+        ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
+        ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
+
+        ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
+        String startVersion = "HEAD";
+        clr.setStartRevision( new ScmRevision( startVersion ) );
+        String endVersion = "HEAD";
+        clr.setEndRevision( new ScmRevision( endVersion ) );
+        ChangeLogScmResult changelogResult = provider.changeLog( clr );
+
+        List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
+        assertEquals( String.format( "changelog for %s..%s returned bad number of commits", startVersion, endVersion ),
+                0, logEntries.size() );
+    }
+
+    public void testChangeLogCommandFromUndefinedToHead()
+            throws Exception
+    {
+        Thread.sleep( SLEEP_TIME_IN_MILLIS );
+        ScmRepository scmRepository = getScmRepository();
+        ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
+        ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
+
+        ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
+        String endVersion = "HEAD";
+        clr.setEndRevision( new ScmRevision( endVersion ) );
+        ChangeLogScmResult changelogResult = provider.changeLog( clr );
+
+        List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
+        assertEquals( String.format( "changelog for ..%s returned bad number of commits", endVersion ),
+                0, logEntries.size() );
+    }
+
+    public void testChangeLogCommandFromVersionToUndefined()
+            throws Exception
+    {
+        Thread.sleep( SLEEP_TIME_IN_MILLIS );
+        ScmRepository scmRepository = getScmRepository();
+        ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
+        ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
+
+        ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
+        String startVersion = "e3864d9";
+        clr.setStartRevision( new ScmRevision( startVersion ) );
+        ChangeLogScmResult changelogResult = provider.changeLog( clr );
+
+        List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
+        assertEquals( String.format( "changelog for %s.. returned bad number of commits", startVersion ),
+                2, logEntries.size() );
+
+        assertThat( "bad commit SHA1 retrieved", logEntries.get( 0 ).getRevision(), startsWith( "464921b" ) );
+        assertThat( "bad commit SHA1 retrieved", logEntries.get( 1 ).getRevision(), startsWith( "db46d63" ) );
+    }
+
+    public void testChangeLogCommandFromVoneToVtwo()
+            throws Exception
+    {
+        Thread.sleep( SLEEP_TIME_IN_MILLIS );
+        ScmRepository scmRepository = getScmRepository();
+        ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
+        ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
+
+        ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
+        String startVersion = "0f1e817";
+        clr.setStartRevision( new ScmRevision( startVersion ) );
+        String endVersion = "db46d63";
+        clr.setEndRevision( new ScmRevision( endVersion ) );
+        ChangeLogScmResult changelogResult = provider.changeLog( clr );
+
+        List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
+        assertEquals( String.format( "changelog for %s.. returned bad number of commits", startVersion ),
+                2, logEntries.size() );
+
+        assertThat( "bad commit SHA1 retrieved", logEntries.get( 0 ).getRevision(), startsWith( "db46d63" ) );
+        assertThat( "bad commit SHA1 retrieved", logEntries.get( 1 ).getRevision(), startsWith( "e3864d9" ) );
+    }
+
+    public void testChangeLogCommandWithStartEndInBadOrder()
+            throws Exception
+    {
+        Thread.sleep( SLEEP_TIME_IN_MILLIS );
+        ScmRepository scmRepository = getScmRepository();
+        ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
+        ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
+
+        ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
+        String startVersion = "db46d63";
+        clr.setStartRevision( new ScmRevision( startVersion ) );
+        String endVersion = "0f1e817";
+        clr.setEndRevision( new ScmRevision( endVersion ) );
+        ChangeLogScmResult changelogResult = provider.changeLog( clr );
+
+        List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
+        assertEquals( String.format( "changelog for %s..%s should return no commits", startVersion, endVersion ),
+                0, logEntries.size() );
+    }
+
+    public void testChangeLogCommandFromHEADToStartOfRepository()
+            throws Exception
+    {
+        Thread.sleep( SLEEP_TIME_IN_MILLIS );
+        ScmRepository scmRepository = getScmRepository();
+        ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
+        ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
+
+        ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
+        String version = "HEAD";
+        clr.setRevision( new ScmRevision( version ) );
+        ChangeLogScmResult changelogResult = provider.changeLog( clr );
+
+        List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
+        assertEquals( String.format( "changelog for %s returned bad number of commits", version ),
+                5, logEntries.size() );
+    }
+
+    public void testChangeLogCommandFromVersionToStartOfRepository()
+            throws Exception
+    {
+        Thread.sleep( SLEEP_TIME_IN_MILLIS );
+        ScmRepository scmRepository = getScmRepository();
+        ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
+        ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
+
+        ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
+        String version = "db46d63";
+        clr.setRevision( new ScmRevision( version ) );
+        ChangeLogScmResult changelogResult = provider.changeLog( clr );
+
+        List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
+        assertEquals( String.format( "changelog for %s returned bad number of commits", version ),
+                4, logEntries.size() );
+
+        assertThat( "bad commit SHA1 retrieved", logEntries.get( 0 ).getRevision(), startsWith( "db46d63" ) );
+        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" ) );
+    }
 }
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 a8fef01..db556a4 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
@@ -64,6 +64,14 @@ public class JGitChangeLogCommand
         return executeChangeLogCommand( repo, fileSet, null, null, null, datePattern, startVersion, endVersion );
     }
 
+    @Override
+    protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repository, ScmFileSet fileSet,
+                                                          ScmVersion version, String datePattern )
+            throws ScmException
+    {
+        return executeChangeLogCommand( repository, fileSet, null, null, null, datePattern, null, null, version );
+    }
+
     /**
      * {@inheritDoc}
      */
@@ -81,13 +89,38 @@ public class JGitChangeLogCommand
                                                           ScmVersion endVersion )
         throws ScmException
     {
+        return executeChangeLogCommand( repo, fileSet, startDate, endDate, branch, datePattern,
+                                        startVersion, endVersion, null );
+    }
+
+    protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet,
+                                                          Date startDate, Date endDate, ScmBranch branch,
+                                                          String datePattern, ScmVersion startVersion,
+                                                          ScmVersion endVersion, ScmVersion version )
+        throws ScmException
+    {
         Git git = null;
+        boolean isARangeChangeLog = startVersion != null || endVersion != null;
+
         try
         {
             git = JGitUtils.openRepo( fileSet.getBasedir() );
 
-            String startRev = startVersion != null ? startVersion.getName() : null;
-            String endRev = endVersion != null ? endVersion.getName() : null;
+            boolean fromVersionToStartOfRepository = startVersion == null && endVersion == null && version != null;
+
+            String startRev = null;
+            String endRev = null;
+
+            if ( fromVersionToStartOfRepository )
+            {
+                startRev = null;
+                endRev = version.getName();
+            }
+            else
+            {
+                startRev = startVersion != null ? startVersion.getName() : ( isARangeChangeLog ? "HEAD" : null );
+                endRev = endVersion != null ? endVersion.getName() : ( isARangeChangeLog ? "HEAD" : null );
+            }
 
             List<ChangeEntry> gitChanges =
                 this.whatchanged( git.getRepository(), null, startRev, endRev, startDate, endDate, -1 );
@@ -130,6 +163,12 @@ public class JGitChangeLogCommand
         List<RevCommit> revs = JGitUtils.getRevCommits( repo, sortings, fromRev, toRev, fromDate, toDate, maxLines );
         List<ChangeEntry> changes = new ArrayList<ChangeEntry>( revs.size() );
 
+        if ( fromRev != null && fromRev.equals( toRev ) )
+        {
+            // there are no changes between 2 identical versions
+            return changes;
+        }
+
         for ( RevCommit c : revs )
         {
             ChangeEntry ce = new ChangeEntry();
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/HEAD b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/HEAD
new file mode 100644
index 0000000..cb089cd
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/master
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/config b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/config
new file mode 100644
index 0000000..04d1dd5
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/config
@@ -0,0 +1,8 @@
+[core]
+	repositoryformatversion = 0
+	filemode = false
+	bare = true
+	symlinks = false
+	ignorecase = true
+[remote "origin"]
+	url = D:\\Users\\awxgx\\AppData\\Local\\Temp\\linear-changelog
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/description b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/description
new file mode 100644
index 0000000..498b267
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/description
@@ -0,0 +1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/applypatch-msg b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/applypatch-msg
new file mode 100644
index 0000000..02de1ef
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/applypatch-msg
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, make this file executable.
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/commit-msg b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/commit-msg
new file mode 100644
index 0000000..c5cdb9d
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/commit-msg
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by git-commit with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, make this file executable.
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/empty.txt b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/empty.txt
new file mode 100644
index 0000000..e69de29
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-commit b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-commit
new file mode 100644
index 0000000..8be6f34
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-commit
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script that is called after a successful
+# commit is made.
+#
+# To enable this hook, make this file executable.
+
+: Nothing
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-receive b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-receive
new file mode 100644
index 0000000..b70c8fd
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-receive
@@ -0,0 +1,16 @@
+#!/bin/sh
+#
+# An example hook script for the post-receive event
+#
+# This script is run after receive-pack has accepted a pack and the
+# repository has been updated.  It is passed arguments in through stdin
+# in the form
+#  <oldrev> <newrev> <refname>
+# For example:
+#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
+#
+# see contrib/hooks/ for an sample, or uncomment the next line (on debian)
+#
+
+
+#. /usr/share/doc/git-core/contrib/hooks/post-receive-email
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-update b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-update
new file mode 100644
index 0000000..bcba893
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-update
@@ -0,0 +1,8 @@
+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, make this file executable by "chmod +x post-update".
+
+exec git-update-server-info
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-applypatch b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-applypatch
new file mode 100644
index 0000000..eeccc93
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-applypatch
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, make this file executable.
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-commit b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-commit
new file mode 100644
index 0000000..18b8730
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-commit
@@ -0,0 +1,70 @@
+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by git-commit with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, make this file executable.
+
+# This is slightly modified from Andrew Morton's Perfect Patch.
+# Lines you introduce should not have trailing whitespace.
+# Also check for an indentation that has SP before a TAB.
+
+if git-rev-parse --verify HEAD 2>/dev/null
+then
+	git-diff-index -p -M --cached HEAD
+else
+	# NEEDSWORK: we should produce a diff with an empty tree here
+	# if we want to do the same verification for the initial import.
+	:
+fi |
+perl -e '
+    my $found_bad = 0;
+    my $filename;
+    my $reported_filename = "";
+    my $lineno;
+    sub bad_line {
+	my ($why, $line) = @_;
+	if (!$found_bad) {
+	    print STDERR "*\n";
+	    print STDERR "* You have some suspicious patch lines:\n";
+	    print STDERR "*\n";
+	    $found_bad = 1;
+	}
+	if ($reported_filename ne $filename) {
+	    print STDERR "* In $filename\n";
+	    $reported_filename = $filename;
+	}
+	print STDERR "* $why (line $lineno)\n";
+	print STDERR "$filename:$lineno:$line\n";
+    }
+    while (<>) {
+	if (m|^diff --git a/(.*) b/\1$|) {
+	    $filename = $1;
+	    next;
+	}
+	if (/^@@ -\S+ \+(\d+)/) {
+	    $lineno = $1 - 1;
+	    next;
+	}
+	if (/^ /) {
+	    $lineno++;
+	    next;
+	}
+	if (s/^\+//) {
+	    $lineno++;
+	    chomp;
+	    if (/\s$/) {
+		bad_line("trailing whitespace", $_);
+	    }
+	    if (/^\s* 	/) {
+		bad_line("indent SP followed by a TAB", $_);
+	    }
+	    if (/^(?:[<>=]){7}/) {
+		bad_line("unresolved merge conflict", $_);
+	    }
+	}
+    }
+    exit($found_bad);
+'
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-rebase b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-rebase
new file mode 100644
index 0000000..981c454
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-rebase
@@ -0,0 +1,150 @@
+#!/bin/sh
+#
+# Copyright (c) 2006 Junio C Hamano
+#
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD`
+fi
+
+case "$basebranch,$topic" in
+master,refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Is topic fully merged to master?
+not_in_master=`git-rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git-rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git-rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git-rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up-to-date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git-rev-list --pretty=oneline ^${publish} "$topic"`
+	perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+exit 0
+
+################################################################
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git-rev-list ^master ^topic next
+	git-rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git-rev-list master..topic
+
+	if this is empty, it is fully merged to "master".
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/update b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/update
new file mode 100644
index 0000000..d8c7626
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/update
@@ -0,0 +1,78 @@
+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by git-receive-pack with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, make this file executable by "chmod +x update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git-repo-config --bool hooks.allowunannotated)
+
+# check for no description
+projectdesc=$(sed -e '1p' "$GIT_DIR/description")
+if [ -z "$projectdesc" -o "$projectdesc" = "Unnamed repository; edit this file to name it for gitweb" ]; then
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+fi
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a branch
+if [ "$newrev" = "0000000000000000000000000000000000000000" ]; then
+	newrev_type=commit
+else
+	newrev_type=$(git-cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		;;
+	refs/heads/*,commit)
+		# branch
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/info/exclude b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/info/exclude
new file mode 100644
index 0000000..a5196d1
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/info/exclude
@@ -0,0 +1,6 @@
+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/0f/1e817725b516978e5daaf35efdbacf83905918 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/0f/1e817725b516978e5daaf35efdbacf83905918
new file mode 100644
index 0000000..ac65cb3
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/0f/1e817725b516978e5daaf35efdbacf83905918
@@ -0,0 +1,3 @@
+x���
+�0E]�+f/�ɴyD\��/&�	Uh#1��ەk7�Á7�u�w ���婤���,�6
+�ʈ��}L��G��<���A���qD	B^���3�-����%���}�
nu��ZN���zy�U?�6r]�`��������~��q$�����u2_�Fu
\ 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/1a/4fb3f570ad2e18dacb7f30d584868b2cea36a1 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/1a/4fb3f570ad2e18dacb7f30d584868b2cea36a1
new file mode 100644
index 0000000..01f125c
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/1a/4fb3f570ad2e18dacb7f30d584868b2cea36a1 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/3b/459fa9451a94fc1acd10e2e29ab73d93eb816d b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/3b/459fa9451a94fc1acd10e2e29ab73d93eb816d
new file mode 100644
index 0000000..6b6bfad
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/3b/459fa9451a94fc1acd10e2e29ab73d93eb816d differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/3c/f7bb86c15554148bf5b0b12bfd639e54a77e58 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/3c/f7bb86c15554148bf5b0b12bfd639e54a77e58
new file mode 100644
index 0000000..c8859bd
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/3c/f7bb86c15554148bf5b0b12bfd639e54a77e58 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/46/4921bc7cbaaae0779fc863724302d1148d6097 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/46/4921bc7cbaaae0779fc863724302d1148d6097
new file mode 100644
index 0000000..a02d566
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/46/4921bc7cbaaae0779fc863724302d1148d6097
@@ -0,0 +1 @@
+x�����0DS�+�?��%+p���/$�;`+���Qu�M1Li۶v�֝�P�Ž/,5K�2y��١j��T}u�<Ӂ���)hp��Q@,6��)!r.�T&����i�N��~�uֆ�o��^p�\�v%���Xf��3���Oy.�?٤�׶�7��F�
\ 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/4a/cc5d1fac10c49efc02f2744eb5833367a02952 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/4a/cc5d1fac10c49efc02f2744eb5833367a02952
new file mode 100644
index 0000000..e998358
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/4a/cc5d1fac10c49efc02f2744eb5833367a02952 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/56/acdd2af7e3d7b261d231014826ca472c9f6c2b b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/56/acdd2af7e3d7b261d231014826ca472c9f6c2b
new file mode 100644
index 0000000..8757376
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/56/acdd2af7e3d7b261d231014826ca472c9f6c2b differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/61/4a3fd04313593d67f4154855a06941046326b3 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/61/4a3fd04313593d67f4154855a06941046326b3
new file mode 100644
index 0000000..bca48ac
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/61/4a3fd04313593d67f4154855a06941046326b3 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/61/a0d22b023d6e31894d736cca8c1a47b6edd822 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/61/a0d22b023d6e31894d736cca8c1a47b6edd822
new file mode 100644
index 0000000..26470db
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/61/a0d22b023d6e31894d736cca8c1a47b6edd822 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/67/b6ab2dfd7b2e2d6d9e8463489b92a1dd978d8f b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/67/b6ab2dfd7b2e2d6d9e8463489b92a1dd978d8f
new file mode 100644
index 0000000..6c72457
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/67/b6ab2dfd7b2e2d6d9e8463489b92a1dd978d8f differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/6c/414f3448323624c05585717a988cbbb77edd88 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/6c/414f3448323624c05585717a988cbbb77edd88
new file mode 100644
index 0000000..3959829
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/6c/414f3448323624c05585717a988cbbb77edd88 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/74/d05e1e1cbd488c7ecd494a1b84c8c1d1534a45 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/74/d05e1e1cbd488c7ecd494a1b84c8c1d1534a45
new file mode 100644
index 0000000..3da7dc7
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/74/d05e1e1cbd488c7ecd494a1b84c8c1d1534a45 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/7f/3fe9f669f09b9ae0a156d5a61d02c73cf39fe0 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/7f/3fe9f669f09b9ae0a156d5a61d02c73cf39fe0
new file mode 100644
index 0000000..413852b
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/7f/3fe9f669f09b9ae0a156d5a61d02c73cf39fe0 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/8d/0c7d820a2dc4832f12aa8387d1ba1211abc415 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/8d/0c7d820a2dc4832f12aa8387d1ba1211abc415
new file mode 100644
index 0000000..53ded79
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/8d/0c7d820a2dc4832f12aa8387d1ba1211abc415 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/8d/c8c65a1875c4cc0fe653df01990ba93dea368d b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/8d/c8c65a1875c4cc0fe653df01990ba93dea368d
new file mode 100644
index 0000000..0c410ef
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/8d/c8c65a1875c4cc0fe653df01990ba93dea368d differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/8f/aa4bd1eb0653a81ca10b071bb138c2e27c84d9 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/8f/aa4bd1eb0653a81ca10b071bb138c2e27c84d9
new file mode 100644
index 0000000..32aa1ac
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/8f/aa4bd1eb0653a81ca10b071bb138c2e27c84d9 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/92/09a983605d6e43e5cf841a1ea18a1914bb7407 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/92/09a983605d6e43e5cf841a1ea18a1914bb7407
new file mode 100644
index 0000000..9493985
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/92/09a983605d6e43e5cf841a1ea18a1914bb7407 differ
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
new file mode 100644
index 0000000..afce444
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/95/86ea07d625757c5af7fe38f6ca7d4bdae8447b differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/b2/1030901fb161c452d00b3efda5e11da6dd5f3f b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/b2/1030901fb161c452d00b3efda5e11da6dd5f3f
new file mode 100644
index 0000000..8437a7c
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/b2/1030901fb161c452d00b3efda5e11da6dd5f3f differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/b5/3306f849b69ef0459ddf5cccff06b5fbb08c23 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/b5/3306f849b69ef0459ddf5cccff06b5fbb08c23
new file mode 100644
index 0000000..314330e
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/b5/3306f849b69ef0459ddf5cccff06b5fbb08c23 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/ba/cd4ee105073117b30e5dcdba5150373b6b53c6 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/ba/cd4ee105073117b30e5dcdba5150373b6b53c6
new file mode 100644
index 0000000..fe99cd8
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/ba/cd4ee105073117b30e5dcdba5150373b6b53c6 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/c5/7c0fe2bb095a9f6a5e493be5f9306e01c5d5a1 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/c5/7c0fe2bb095a9f6a5e493be5f9306e01c5d5a1
new file mode 100644
index 0000000..1612db5
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/c5/7c0fe2bb095a9f6a5e493be5f9306e01c5d5a1
@@ -0,0 +1,3 @@
+x��A
+�0E]��J��i& �•�H'S��Fj��ەk7�ǃ_���}8��"φ�:�hZ(Q�QHE� ���7[�	M0ƞG�!E1.9O�m*c�IB�P\~��np��
+�jpz�ԕj�W]�3�f���H	=����x���b�c�y��.k����(�E�
\ 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/cf/1caee9ac9ff7db791de6e7ee6d3ce88bf2cf26 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/cf/1caee9ac9ff7db791de6e7ee6d3ce88bf2cf26
new file mode 100644
index 0000000..461ba2f
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/cf/1caee9ac9ff7db791de6e7ee6d3ce88bf2cf26 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/db/46d6323f632ee8c2bd781ee14ae80bcd884cde b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/db/46d6323f632ee8c2bd781ee14ae80bcd884cde
new file mode 100644
index 0000000..d3fda4b
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/db/46d6323f632ee8c2bd781ee14ae80bcd884cde
@@ -0,0 +1,2 @@
+x��A
+�0E]��Jf��q��[L��Vh#1���ʵ�x��纮K"w�M��<&+T�gGw$v<L��(){�S�n�q�%j�1�4�".q6"�D���b�����V�
�U���i(U/���g֦C��p�82��p���n��]��Ʌ���ܗ��7_�rD�
\ 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/e3/864d9e9499611b59da3c6a309180b2726b11ea b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/e3/864d9e9499611b59da3c6a309180b2726b11ea
new file mode 100644
index 0000000..60f2a18
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/e3/864d9e9499611b59da3c6a309180b2726b11ea differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/e7/5cb5a80d7d26ddff9ac221fc576060719f2bd8 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/e7/5cb5a80d7d26ddff9ac221fc576060719f2bd8
new file mode 100644
index 0000000..fbfefeb
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/e7/5cb5a80d7d26ddff9ac221fc576060719f2bd8 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/ee/acfd7ce0a7e1049a320db614a71644a86cb793 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/ee/acfd7ce0a7e1049a320db614a71644a86cb793
new file mode 100644
index 0000000..7bc5264
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/ee/acfd7ce0a7e1049a320db614a71644a86cb793
@@ -0,0 +1,3 @@
+x��K
+1P�9E�!���".\y�N�2#�Db�뛅�VE���u��D�Л���/�4S�6�#1|��H����Y=���ALp�D�6F���X�d�FG:�'����R��õ
+��M���U7�,�d�u;���5�����O�ut�����׺�U_��D�
\ 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/f4/499970a6774e5aad19877ee7c65d296ae21366 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/f4/499970a6774e5aad19877ee7c65d296ae21366
new file mode 100644
index 0000000..256052c
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/f4/499970a6774e5aad19877ee7c65d296ae21366 differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/f7/1429f9ff9214a546b438c611ae942c9cf5a49e b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/f7/1429f9ff9214a546b438c611ae942c9cf5a49e
new file mode 100644
index 0000000..b543850
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/f7/1429f9ff9214a546b438c611ae942c9cf5a49e differ
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/fe/a16119a5b4ec0562d4f65b4237314250773bf8 b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/fe/a16119a5b4ec0562d4f65b4237314250773bf8
new file mode 100644
index 0000000..6c36970
Binary files /dev/null and b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/fe/a16119a5b4ec0562d4f65b4237314250773bf8 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
new file mode 100644
index 0000000..d0314ac
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/packed-refs
@@ -0,0 +1,2 @@
+# pack-refs with: peeled fully-peeled sorted 
+464921bc7cbaaae0779fc863724302d1148d6097 refs/heads/master
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/refs/heads/.keep-directory b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/refs/heads/.keep-directory
new file mode 100644
index 0000000..e69de29
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/refs/tags/.keep-directory b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/refs/tags/.keep-directory
new file mode 100644
index 0000000..e69de29
diff --git a/pom.xml b/pom.xml
index 2ad0f86..e88f76f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -353,6 +353,7 @@
               <exclude>**/src/main/resources/tck-repository/**</exclude>
               <exclude>src/test/resources/**</exclude>
               <exclude>src/test/repository/**</exclude>
+              <exclude>src/test/linear-changelog/**</exclude>
               <exclude>src/test/tck-repository/**</exclude>
               <exclude>src/main/resources/tck/**</exclude>
               <exclude>.java-version</exclude>

-- 
To stop receiving notification emails like this one, please contact
michaelo@apache.org.

[maven-scm] 02/02: Some changes

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

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

commit 89a45c08d0b3b9df828b6210544648c168a8bdab
Author: Michael Osipov <mi...@apache.org>
AuthorDate: Tue May 22 23:04:26 2018 +0200

    Some changes
---
 .gitattributes                                     |   8 +-
 .../changelog/AbstractChangeLogCommand.java        |   4 +-
 .../src/test/resources/linear-changelog/config     |   3 +-
 .../linear-changelog/hooks/applypatch-msg          |  15 ---
 .../resources/linear-changelog/hooks/commit-msg    |  21 ---
 .../resources/linear-changelog/hooks/post-commit   |   8 --
 .../resources/linear-changelog/hooks/post-receive  |  16 ---
 .../resources/linear-changelog/hooks/post-update   |   8 --
 .../linear-changelog/hooks/pre-applypatch          |  14 --
 .../resources/linear-changelog/hooks/pre-commit    |  70 ----------
 .../resources/linear-changelog/hooks/pre-rebase    | 150 ---------------------
 .../test/resources/linear-changelog/hooks/update   |  78 -----------
 .../src/test/resources/repository/config           |   1 +
 .../maven-scm-provider-gittest/readme.txt          |   2 +-
 .../changelog/GitChangeLogCommandTckTest.java      |   4 +-
 .../command/changelog/JGitChangeLogCommand.java    |   4 +-
 .../src/test/resources/linear-changelog/config     |   5 +-
 .../linear-changelog/hooks/applypatch-msg          |  15 ---
 .../resources/linear-changelog/hooks/commit-msg    |  21 ---
 .../resources/linear-changelog/hooks/post-commit   |   8 --
 .../resources/linear-changelog/hooks/post-receive  |  16 ---
 .../resources/linear-changelog/hooks/post-update   |   8 --
 .../linear-changelog/hooks/pre-applypatch          |  14 --
 .../resources/linear-changelog/hooks/pre-commit    |  70 ----------
 .../resources/linear-changelog/hooks/pre-rebase    | 150 ---------------------
 .../test/resources/linear-changelog/hooks/update   |  78 -----------
 26 files changed, 14 insertions(+), 777 deletions(-)

diff --git a/.gitattributes b/.gitattributes
index d09ce69..129e352 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -7,7 +7,7 @@
 *.js     text
 *.sql    text
 
-/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/** binary
-/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/** binary
-/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/* text eol=lf
-/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/* text eol=lf
\ No newline at end of file
+#/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/objects/** binary
+#/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/objects/** binary
+#/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/* text eol=lf
+#/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/* text eol=lf
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/AbstractChangeLogCommand.java b/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/AbstractChangeLogCommand.java
index 61242c3..aeaae56 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/AbstractChangeLogCommand.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/AbstractChangeLogCommand.java
@@ -92,9 +92,9 @@ public abstract class AbstractChangeLogCommand
 
         String datePattern = parameters.getString( CommandParameter.CHANGELOG_DATE_PATTERN, null );
 
-        boolean uniqueUsageOfVersion = startVersion == null && endVersion == null && version != null;
+        boolean versionOnly = startVersion == null && endVersion == null && version != null;
 
-        if ( uniqueUsageOfVersion )
+        if ( versionOnly )
         {
             return executeChangeLogCommand( repository, fileSet, version, datePattern );
         }
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/config b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/config
index 64280b8..c53d818 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/config
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/config
@@ -1,6 +1,5 @@
 [core]
 	repositoryformatversion = 0
-	filemode = false
+	filemode = true
 	bare = true
-	symlinks = false
 	ignorecase = true
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/applypatch-msg b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/applypatch-msg
deleted file mode 100644
index 02de1ef..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/applypatch-msg
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to check the commit log message taken by
-# applypatch from an e-mail message.
-#
-# The hook should exit with non-zero status after issuing an
-# appropriate message if it wants to stop the commit.  The hook is
-# allowed to edit the commit message file.
-#
-# To enable this hook, make this file executable.
-
-. git-sh-setup
-test -x "$GIT_DIR/hooks/commit-msg" &&
-	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
-:
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/commit-msg b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/commit-msg
deleted file mode 100644
index c5cdb9d..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/commit-msg
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to check the commit log message.
-# Called by git-commit with one argument, the name of the file
-# that has the commit message.  The hook should exit with non-zero
-# status after issuing an appropriate message if it wants to stop the
-# commit.  The hook is allowed to edit the commit message file.
-#
-# To enable this hook, make this file executable.
-
-# Uncomment the below to add a Signed-off-by line to the message.
-# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
-# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
-
-# This example catches duplicate Signed-off-by lines.
-
-test "" = "$(grep '^Signed-off-by: ' "$1" |
-	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
-	echo >&2 Duplicate Signed-off-by lines.
-	exit 1
-}
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-commit b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-commit
deleted file mode 100644
index 8be6f34..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-commit
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-#
-# An example hook script that is called after a successful
-# commit is made.
-#
-# To enable this hook, make this file executable.
-
-: Nothing
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-receive b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-receive
deleted file mode 100644
index b70c8fd..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-receive
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-#
-# An example hook script for the post-receive event
-#
-# This script is run after receive-pack has accepted a pack and the
-# repository has been updated.  It is passed arguments in through stdin
-# in the form
-#  <oldrev> <newrev> <refname>
-# For example:
-#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
-#
-# see contrib/hooks/ for an sample, or uncomment the next line (on debian)
-#
-
-
-#. /usr/share/doc/git-core/contrib/hooks/post-receive-email
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-update b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-update
deleted file mode 100644
index bcba893..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/post-update
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to prepare a packed repository for use over
-# dumb transports.
-#
-# To enable this hook, make this file executable by "chmod +x post-update".
-
-exec git-update-server-info
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-applypatch b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-applypatch
deleted file mode 100644
index eeccc93..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-applypatch
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to verify what is about to be committed
-# by applypatch from an e-mail message.
-#
-# The hook should exit with non-zero status after issuing an
-# appropriate message if it wants to stop the commit.
-#
-# To enable this hook, make this file executable.
-
-. git-sh-setup
-test -x "$GIT_DIR/hooks/pre-commit" &&
-	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
-:
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-commit b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-commit
deleted file mode 100644
index 18b8730..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-commit
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to verify what is about to be committed.
-# Called by git-commit with no arguments.  The hook should
-# exit with non-zero status after issuing an appropriate message if
-# it wants to stop the commit.
-#
-# To enable this hook, make this file executable.
-
-# This is slightly modified from Andrew Morton's Perfect Patch.
-# Lines you introduce should not have trailing whitespace.
-# Also check for an indentation that has SP before a TAB.
-
-if git-rev-parse --verify HEAD 2>/dev/null
-then
-	git-diff-index -p -M --cached HEAD
-else
-	# NEEDSWORK: we should produce a diff with an empty tree here
-	# if we want to do the same verification for the initial import.
-	:
-fi |
-perl -e '
-    my $found_bad = 0;
-    my $filename;
-    my $reported_filename = "";
-    my $lineno;
-    sub bad_line {
-	my ($why, $line) = @_;
-	if (!$found_bad) {
-	    print STDERR "*\n";
-	    print STDERR "* You have some suspicious patch lines:\n";
-	    print STDERR "*\n";
-	    $found_bad = 1;
-	}
-	if ($reported_filename ne $filename) {
-	    print STDERR "* In $filename\n";
-	    $reported_filename = $filename;
-	}
-	print STDERR "* $why (line $lineno)\n";
-	print STDERR "$filename:$lineno:$line\n";
-    }
-    while (<>) {
-	if (m|^diff --git a/(.*) b/\1$|) {
-	    $filename = $1;
-	    next;
-	}
-	if (/^@@ -\S+ \+(\d+)/) {
-	    $lineno = $1 - 1;
-	    next;
-	}
-	if (/^ /) {
-	    $lineno++;
-	    next;
-	}
-	if (s/^\+//) {
-	    $lineno++;
-	    chomp;
-	    if (/\s$/) {
-		bad_line("trailing whitespace", $_);
-	    }
-	    if (/^\s* 	/) {
-		bad_line("indent SP followed by a TAB", $_);
-	    }
-	    if (/^(?:[<>=]){7}/) {
-		bad_line("unresolved merge conflict", $_);
-	    }
-	}
-    }
-    exit($found_bad);
-'
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-rebase b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-rebase
deleted file mode 100644
index 981c454..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/pre-rebase
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2006 Junio C Hamano
-#
-
-publish=next
-basebranch="$1"
-if test "$#" = 2
-then
-	topic="refs/heads/$2"
-else
-	topic=`git symbolic-ref HEAD`
-fi
-
-case "$basebranch,$topic" in
-master,refs/heads/??/*)
-	;;
-*)
-	exit 0 ;# we do not interrupt others.
-	;;
-esac
-
-# Now we are dealing with a topic branch being rebased
-# on top of master.  Is it OK to rebase it?
-
-# Is topic fully merged to master?
-not_in_master=`git-rev-list --pretty=oneline ^master "$topic"`
-if test -z "$not_in_master"
-then
-	echo >&2 "$topic is fully merged to master; better remove it."
-	exit 1 ;# we could allow it, but there is no point.
-fi
-
-# Is topic ever merged to next?  If so you should not be rebasing it.
-only_next_1=`git-rev-list ^master "^$topic" ${publish} | sort`
-only_next_2=`git-rev-list ^master           ${publish} | sort`
-if test "$only_next_1" = "$only_next_2"
-then
-	not_in_topic=`git-rev-list "^$topic" master`
-	if test -z "$not_in_topic"
-	then
-		echo >&2 "$topic is already up-to-date with master"
-		exit 1 ;# we could allow it, but there is no point.
-	else
-		exit 0
-	fi
-else
-	not_in_next=`git-rev-list --pretty=oneline ^${publish} "$topic"`
-	perl -e '
-		my $topic = $ARGV[0];
-		my $msg = "* $topic has commits already merged to public branch:\n";
-		my (%not_in_next) = map {
-			/^([0-9a-f]+) /;
-			($1 => 1);
-		} split(/\n/, $ARGV[1]);
-		for my $elem (map {
-				/^([0-9a-f]+) (.*)$/;
-				[$1 => $2];
-			} split(/\n/, $ARGV[2])) {
-			if (!exists $not_in_next{$elem->[0]}) {
-				if ($msg) {
-					print STDERR $msg;
-					undef $msg;
-				}
-				print STDERR " $elem->[1]\n";
-			}
-		}
-	' "$topic" "$not_in_next" "$not_in_master"
-	exit 1
-fi
-
-exit 0
-
-################################################################
-
-This sample hook safeguards topic branches that have been
-published from being rewound.
-
-The workflow assumed here is:
-
- * Once a topic branch forks from "master", "master" is never
-   merged into it again (either directly or indirectly).
-
- * Once a topic branch is fully cooked and merged into "master",
-   it is deleted.  If you need to build on top of it to correct
-   earlier mistakes, a new topic branch is created by forking at
-   the tip of the "master".  This is not strictly necessary, but
-   it makes it easier to keep your history simple.
-
- * Whenever you need to test or publish your changes to topic
-   branches, merge them into "next" branch.
-
-The script, being an example, hardcodes the publish branch name
-to be "next", but it is trivial to make it configurable via
-$GIT_DIR/config mechanism.
-
-With this workflow, you would want to know:
-
-(1) ... if a topic branch has ever been merged to "next".  Young
-    topic branches can have stupid mistakes you would rather
-    clean up before publishing, and things that have not been
-    merged into other branches can be easily rebased without
-    affecting other people.  But once it is published, you would
-    not want to rewind it.
-
-(2) ... if a topic branch has been fully merged to "master".
-    Then you can delete it.  More importantly, you should not
-    build on top of it -- other people may already want to
-    change things related to the topic as patches against your
-    "master", so if you need further changes, it is better to
-    fork the topic (perhaps with the same name) afresh from the
-    tip of "master".
-
-Let's look at this example:
-
-		   o---o---o---o---o---o---o---o---o---o "next"
-		  /       /           /           /
-		 /   a---a---b A     /           /
-		/   /               /           /
-	       /   /   c---c---c---c B         /
-	      /   /   /             \         /
-	     /   /   /   b---b C     \       /
-	    /   /   /   /             \     /
-    ---o---o---o---o---o---o---o---o---o---o---o "master"
-
-
-A, B and C are topic branches.
-
- * A has one fix since it was merged up to "next".
-
- * B has finished.  It has been fully merged up to "master" and "next",
-   and is ready to be deleted.
-
- * C has not merged to "next" at all.
-
-We would want to allow C to be rebased, refuse A, and encourage
-B to be deleted.
-
-To compute (1):
-
-	git-rev-list ^master ^topic next
-	git-rev-list ^master        next
-
-	if these match, topic has not merged in next at all.
-
-To compute (2):
-
-	git-rev-list master..topic
-
-	if this is empty, it is fully merged to "master".
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/update b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/update
deleted file mode 100644
index d8c7626..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/linear-changelog/hooks/update
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to blocks unannotated tags from entering.
-# Called by git-receive-pack with arguments: refname sha1-old sha1-new
-#
-# To enable this hook, make this file executable by "chmod +x update".
-#
-# Config
-# ------
-# hooks.allowunannotated
-#   This boolean sets whether unannotated tags will be allowed into the
-#   repository.  By default they won't be.
-#
-
-# --- Command line
-refname="$1"
-oldrev="$2"
-newrev="$3"
-
-# --- Safety check
-if [ -z "$GIT_DIR" ]; then
-	echo "Don't run this script from the command line." >&2
-	echo " (if you want, you could supply GIT_DIR then run" >&2
-	echo "  $0 <ref> <oldrev> <newrev>)" >&2
-	exit 1
-fi
-
-if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
-	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
-	exit 1
-fi
-
-# --- Config
-allowunannotated=$(git-repo-config --bool hooks.allowunannotated)
-
-# check for no description
-projectdesc=$(sed -e '1p' "$GIT_DIR/description")
-if [ -z "$projectdesc" -o "$projectdesc" = "Unnamed repository; edit this file to name it for gitweb" ]; then
-	echo "*** Project description file hasn't been set" >&2
-	exit 1
-fi
-
-# --- Check types
-# if $newrev is 0000...0000, it's a commit to delete a branch
-if [ "$newrev" = "0000000000000000000000000000000000000000" ]; then
-	newrev_type=commit
-else
-	newrev_type=$(git-cat-file -t $newrev)
-fi
-
-case "$refname","$newrev_type" in
-	refs/tags/*,commit)
-		# un-annotated tag
-		short_refname=${refname##refs/tags/}
-		if [ "$allowunannotated" != "true" ]; then
-			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
-			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
-			exit 1
-		fi
-		;;
-	refs/tags/*,tag)
-		# annotated tag
-		;;
-	refs/heads/*,commit)
-		# branch
-		;;
-	refs/remotes/*,commit)
-		# tracking branch
-		;;
-	*)
-		# Anything else (is there anything else?)
-		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
-		exit 1
-		;;
-esac
-
-# --- Finished
-exit 0
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/repository/config b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/repository/config
index 07d359d..c53d818 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/repository/config
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/repository/config
@@ -2,3 +2,4 @@
 	repositoryformatversion = 0
 	filemode = true
 	bare = true
+	ignorecase = true
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 402847b..be2943e 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
@@ -2,7 +2,7 @@
 Description of linear-changelog repository
 #######################################
 
-The 'linear-changelog' repositories in src\test\resources of git implementations has been created
+The 'linear-changelog' repositories in src/test/resources of git implementations has been created
     - using the script below
     - and then using a `clone --bare` command
 
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 1dceccc..1b42d94 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
@@ -42,7 +42,7 @@ import static org.junit.Assert.assertThat;
 public abstract class GitChangeLogCommandTckTest
     extends ChangeLogCommandTckTest
 {
-    public static final int SLEEP_TIME_IN_MILLIS = 250;
+    public static final long SLEEP_TIME_IN_MILLIS = 250L;
 
     /** {@inheritDoc} */
     public void initRepo()
@@ -189,7 +189,7 @@ public abstract class GitChangeLogCommandTckTest
                 0, logEntries.size() );
     }
 
-    public void testChangeLogCommandFromHEADToStartOfRepository()
+    public void testChangeLogCommandFromHeadToStartOfRepository()
             throws Exception
     {
         Thread.sleep( SLEEP_TIME_IN_MILLIS );
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 db556a4..2cafeb2 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
@@ -106,12 +106,12 @@ public class JGitChangeLogCommand
         {
             git = JGitUtils.openRepo( fileSet.getBasedir() );
 
-            boolean fromVersionToStartOfRepository = startVersion == null && endVersion == null && version != null;
+            boolean versionOnly = startVersion == null && endVersion == null && version != null;
 
             String startRev = null;
             String endRev = null;
 
-            if ( fromVersionToStartOfRepository )
+            if ( versionOnly )
             {
                 startRev = null;
                 endRev = version.getName();
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/config b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/config
index 04d1dd5..c53d818 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/config
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/config
@@ -1,8 +1,5 @@
 [core]
 	repositoryformatversion = 0
-	filemode = false
+	filemode = true
 	bare = true
-	symlinks = false
 	ignorecase = true
-[remote "origin"]
-	url = D:\\Users\\awxgx\\AppData\\Local\\Temp\\linear-changelog
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/applypatch-msg b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/applypatch-msg
deleted file mode 100644
index 02de1ef..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/applypatch-msg
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to check the commit log message taken by
-# applypatch from an e-mail message.
-#
-# The hook should exit with non-zero status after issuing an
-# appropriate message if it wants to stop the commit.  The hook is
-# allowed to edit the commit message file.
-#
-# To enable this hook, make this file executable.
-
-. git-sh-setup
-test -x "$GIT_DIR/hooks/commit-msg" &&
-	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
-:
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/commit-msg b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/commit-msg
deleted file mode 100644
index c5cdb9d..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/commit-msg
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to check the commit log message.
-# Called by git-commit with one argument, the name of the file
-# that has the commit message.  The hook should exit with non-zero
-# status after issuing an appropriate message if it wants to stop the
-# commit.  The hook is allowed to edit the commit message file.
-#
-# To enable this hook, make this file executable.
-
-# Uncomment the below to add a Signed-off-by line to the message.
-# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
-# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
-
-# This example catches duplicate Signed-off-by lines.
-
-test "" = "$(grep '^Signed-off-by: ' "$1" |
-	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
-	echo >&2 Duplicate Signed-off-by lines.
-	exit 1
-}
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-commit b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-commit
deleted file mode 100644
index 8be6f34..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-commit
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-#
-# An example hook script that is called after a successful
-# commit is made.
-#
-# To enable this hook, make this file executable.
-
-: Nothing
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-receive b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-receive
deleted file mode 100644
index b70c8fd..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-receive
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-#
-# An example hook script for the post-receive event
-#
-# This script is run after receive-pack has accepted a pack and the
-# repository has been updated.  It is passed arguments in through stdin
-# in the form
-#  <oldrev> <newrev> <refname>
-# For example:
-#  aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
-#
-# see contrib/hooks/ for an sample, or uncomment the next line (on debian)
-#
-
-
-#. /usr/share/doc/git-core/contrib/hooks/post-receive-email
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-update b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-update
deleted file mode 100644
index bcba893..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/post-update
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to prepare a packed repository for use over
-# dumb transports.
-#
-# To enable this hook, make this file executable by "chmod +x post-update".
-
-exec git-update-server-info
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-applypatch b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-applypatch
deleted file mode 100644
index eeccc93..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-applypatch
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to verify what is about to be committed
-# by applypatch from an e-mail message.
-#
-# The hook should exit with non-zero status after issuing an
-# appropriate message if it wants to stop the commit.
-#
-# To enable this hook, make this file executable.
-
-. git-sh-setup
-test -x "$GIT_DIR/hooks/pre-commit" &&
-	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
-:
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-commit b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-commit
deleted file mode 100644
index 18b8730..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-commit
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to verify what is about to be committed.
-# Called by git-commit with no arguments.  The hook should
-# exit with non-zero status after issuing an appropriate message if
-# it wants to stop the commit.
-#
-# To enable this hook, make this file executable.
-
-# This is slightly modified from Andrew Morton's Perfect Patch.
-# Lines you introduce should not have trailing whitespace.
-# Also check for an indentation that has SP before a TAB.
-
-if git-rev-parse --verify HEAD 2>/dev/null
-then
-	git-diff-index -p -M --cached HEAD
-else
-	# NEEDSWORK: we should produce a diff with an empty tree here
-	# if we want to do the same verification for the initial import.
-	:
-fi |
-perl -e '
-    my $found_bad = 0;
-    my $filename;
-    my $reported_filename = "";
-    my $lineno;
-    sub bad_line {
-	my ($why, $line) = @_;
-	if (!$found_bad) {
-	    print STDERR "*\n";
-	    print STDERR "* You have some suspicious patch lines:\n";
-	    print STDERR "*\n";
-	    $found_bad = 1;
-	}
-	if ($reported_filename ne $filename) {
-	    print STDERR "* In $filename\n";
-	    $reported_filename = $filename;
-	}
-	print STDERR "* $why (line $lineno)\n";
-	print STDERR "$filename:$lineno:$line\n";
-    }
-    while (<>) {
-	if (m|^diff --git a/(.*) b/\1$|) {
-	    $filename = $1;
-	    next;
-	}
-	if (/^@@ -\S+ \+(\d+)/) {
-	    $lineno = $1 - 1;
-	    next;
-	}
-	if (/^ /) {
-	    $lineno++;
-	    next;
-	}
-	if (s/^\+//) {
-	    $lineno++;
-	    chomp;
-	    if (/\s$/) {
-		bad_line("trailing whitespace", $_);
-	    }
-	    if (/^\s* 	/) {
-		bad_line("indent SP followed by a TAB", $_);
-	    }
-	    if (/^(?:[<>=]){7}/) {
-		bad_line("unresolved merge conflict", $_);
-	    }
-	}
-    }
-    exit($found_bad);
-'
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-rebase b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-rebase
deleted file mode 100644
index 981c454..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/pre-rebase
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2006 Junio C Hamano
-#
-
-publish=next
-basebranch="$1"
-if test "$#" = 2
-then
-	topic="refs/heads/$2"
-else
-	topic=`git symbolic-ref HEAD`
-fi
-
-case "$basebranch,$topic" in
-master,refs/heads/??/*)
-	;;
-*)
-	exit 0 ;# we do not interrupt others.
-	;;
-esac
-
-# Now we are dealing with a topic branch being rebased
-# on top of master.  Is it OK to rebase it?
-
-# Is topic fully merged to master?
-not_in_master=`git-rev-list --pretty=oneline ^master "$topic"`
-if test -z "$not_in_master"
-then
-	echo >&2 "$topic is fully merged to master; better remove it."
-	exit 1 ;# we could allow it, but there is no point.
-fi
-
-# Is topic ever merged to next?  If so you should not be rebasing it.
-only_next_1=`git-rev-list ^master "^$topic" ${publish} | sort`
-only_next_2=`git-rev-list ^master           ${publish} | sort`
-if test "$only_next_1" = "$only_next_2"
-then
-	not_in_topic=`git-rev-list "^$topic" master`
-	if test -z "$not_in_topic"
-	then
-		echo >&2 "$topic is already up-to-date with master"
-		exit 1 ;# we could allow it, but there is no point.
-	else
-		exit 0
-	fi
-else
-	not_in_next=`git-rev-list --pretty=oneline ^${publish} "$topic"`
-	perl -e '
-		my $topic = $ARGV[0];
-		my $msg = "* $topic has commits already merged to public branch:\n";
-		my (%not_in_next) = map {
-			/^([0-9a-f]+) /;
-			($1 => 1);
-		} split(/\n/, $ARGV[1]);
-		for my $elem (map {
-				/^([0-9a-f]+) (.*)$/;
-				[$1 => $2];
-			} split(/\n/, $ARGV[2])) {
-			if (!exists $not_in_next{$elem->[0]}) {
-				if ($msg) {
-					print STDERR $msg;
-					undef $msg;
-				}
-				print STDERR " $elem->[1]\n";
-			}
-		}
-	' "$topic" "$not_in_next" "$not_in_master"
-	exit 1
-fi
-
-exit 0
-
-################################################################
-
-This sample hook safeguards topic branches that have been
-published from being rewound.
-
-The workflow assumed here is:
-
- * Once a topic branch forks from "master", "master" is never
-   merged into it again (either directly or indirectly).
-
- * Once a topic branch is fully cooked and merged into "master",
-   it is deleted.  If you need to build on top of it to correct
-   earlier mistakes, a new topic branch is created by forking at
-   the tip of the "master".  This is not strictly necessary, but
-   it makes it easier to keep your history simple.
-
- * Whenever you need to test or publish your changes to topic
-   branches, merge them into "next" branch.
-
-The script, being an example, hardcodes the publish branch name
-to be "next", but it is trivial to make it configurable via
-$GIT_DIR/config mechanism.
-
-With this workflow, you would want to know:
-
-(1) ... if a topic branch has ever been merged to "next".  Young
-    topic branches can have stupid mistakes you would rather
-    clean up before publishing, and things that have not been
-    merged into other branches can be easily rebased without
-    affecting other people.  But once it is published, you would
-    not want to rewind it.
-
-(2) ... if a topic branch has been fully merged to "master".
-    Then you can delete it.  More importantly, you should not
-    build on top of it -- other people may already want to
-    change things related to the topic as patches against your
-    "master", so if you need further changes, it is better to
-    fork the topic (perhaps with the same name) afresh from the
-    tip of "master".
-
-Let's look at this example:
-
-		   o---o---o---o---o---o---o---o---o---o "next"
-		  /       /           /           /
-		 /   a---a---b A     /           /
-		/   /               /           /
-	       /   /   c---c---c---c B         /
-	      /   /   /             \         /
-	     /   /   /   b---b C     \       /
-	    /   /   /   /             \     /
-    ---o---o---o---o---o---o---o---o---o---o---o "master"
-
-
-A, B and C are topic branches.
-
- * A has one fix since it was merged up to "next".
-
- * B has finished.  It has been fully merged up to "master" and "next",
-   and is ready to be deleted.
-
- * C has not merged to "next" at all.
-
-We would want to allow C to be rebased, refuse A, and encourage
-B to be deleted.
-
-To compute (1):
-
-	git-rev-list ^master ^topic next
-	git-rev-list ^master        next
-
-	if these match, topic has not merged in next at all.
-
-To compute (2):
-
-	git-rev-list master..topic
-
-	if this is empty, it is fully merged to "master".
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/update b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/update
deleted file mode 100644
index d8c7626..0000000
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/resources/linear-changelog/hooks/update
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/bin/sh
-#
-# An example hook script to blocks unannotated tags from entering.
-# Called by git-receive-pack with arguments: refname sha1-old sha1-new
-#
-# To enable this hook, make this file executable by "chmod +x update".
-#
-# Config
-# ------
-# hooks.allowunannotated
-#   This boolean sets whether unannotated tags will be allowed into the
-#   repository.  By default they won't be.
-#
-
-# --- Command line
-refname="$1"
-oldrev="$2"
-newrev="$3"
-
-# --- Safety check
-if [ -z "$GIT_DIR" ]; then
-	echo "Don't run this script from the command line." >&2
-	echo " (if you want, you could supply GIT_DIR then run" >&2
-	echo "  $0 <ref> <oldrev> <newrev>)" >&2
-	exit 1
-fi
-
-if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
-	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
-	exit 1
-fi
-
-# --- Config
-allowunannotated=$(git-repo-config --bool hooks.allowunannotated)
-
-# check for no description
-projectdesc=$(sed -e '1p' "$GIT_DIR/description")
-if [ -z "$projectdesc" -o "$projectdesc" = "Unnamed repository; edit this file to name it for gitweb" ]; then
-	echo "*** Project description file hasn't been set" >&2
-	exit 1
-fi
-
-# --- Check types
-# if $newrev is 0000...0000, it's a commit to delete a branch
-if [ "$newrev" = "0000000000000000000000000000000000000000" ]; then
-	newrev_type=commit
-else
-	newrev_type=$(git-cat-file -t $newrev)
-fi
-
-case "$refname","$newrev_type" in
-	refs/tags/*,commit)
-		# un-annotated tag
-		short_refname=${refname##refs/tags/}
-		if [ "$allowunannotated" != "true" ]; then
-			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
-			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
-			exit 1
-		fi
-		;;
-	refs/tags/*,tag)
-		# annotated tag
-		;;
-	refs/heads/*,commit)
-		# branch
-		;;
-	refs/remotes/*,commit)
-		# tracking branch
-		;;
-	*)
-		# Anything else (is there anything else?)
-		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
-		exit 1
-		;;
-esac
-
-# --- Finished
-exit 0

-- 
To stop receiving notification emails like this one, please contact
michaelo@apache.org.