maven-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (SCM-885) Extend GitChangeLogCommand by using revision only
Date Wed, 23 May 2018 20:43:01 GMT

    [ https://issues.apache.org/jira/browse/SCM-885?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16488005#comment-16488005 ] 

ASF GitHub Bot commented on SCM-885:
------------------------------------

asfgit closed pull request #74: [SCM-885] third implementation
URL: https://github.com/apache/maven-scm/pull/74
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/.gitattributes b/.gitattributes
index 3bb3b5ea8..d09ce69a2 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 b8473ab0b..61242c36f 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 @@ protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo
         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 ScmResult executeCommand( ScmProviderRepository repository, ScmFileSet fi
 
         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 f96c12603..f8723c1c2 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 void setDateRange( Date startDate, Date endDate )
         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 2145eeb83..50b8df861 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 @@ protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo
         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 @@ protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo
         throws ScmException
     {
         return executeChangeLogCommand( repo, fileSet, startDate, endDate, branch, datePattern, startVersion,
-                                        endVersion, null );
+                                        endVersion, null, null );
     }
 
     @Override
@@ -85,21 +93,38 @@ protected ChangeLogScmResult executeChangeLogCommand( ChangeLogScmRequest reques
     {
         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 );
 
@@ -136,9 +161,18 @@ public static Commandline createCommandLine( GitScmProviderRepository repository
                                   null );
     }
 
+    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 @@ static Commandline createCommandLine( GitScmProviderRepository repository, File
         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 000000000..cb089cd89
--- /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 000000000..64280b806
--- /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 000000000..498b267a8
--- /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 000000000..02de1ef84
--- /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 000000000..c5cdb9d7e
--- /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 000000000..e69de29bb
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 000000000..8be6f34ad
--- /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 000000000..b70c8fd36
--- /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 000000000..bcba8937b
--- /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 000000000..eeccc934c
--- /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 000000000..18b87309f
--- /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 000000000..981c454cd
--- /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 000000000..d8c76264b
--- /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 000000000..a5196d1be
--- /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 000000000..ac65cb3c7
--- /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 000000000..01f125c23
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 000000000..6b6bfad97
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 000000000..c8859bdcc
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 000000000..a02d566bd
--- /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 000000000..e99835886
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 000000000..8757376ec
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 000000000..bca48ac73
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 000000000..26470dbae
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 000000000..6c72457a9
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 000000000..395982916
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 000000000..3da7dc7ad
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 000000000..413852b65
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 000000000..53ded79b3
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 000000000..0c410ef5b
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 000000000..32aa1ac8e
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 000000000..94939851d
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 000000000..afce44472
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 000000000..8437a7c3d
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 000000000..314330e20
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 000000000..fe99cd8b9
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 000000000..1612db5a2
--- /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 000000000..461ba2fc7
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 000000000..d3fda4b86
--- /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 000000000..60f2a188e
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 000000000..fbfefebd9
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 000000000..7bc52640e
--- /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 000000000..256052c2c
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 000000000..b543850b6
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 000000000..6c36970db
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 000000000..d0314ac6b
--- /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 000000000..e69de29bb
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 000000000..e69de29bb
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 000000000..402847bea
--- /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 0faa49681..1dceccc8c 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 @@
  * 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 @@
 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 @@ protected CheckOutScmResult checkOut( File workingDirectory, ScmRepository repos
             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 a8fef0160..db556a480 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 @@ protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo
         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}
      */
@@ -80,14 +88,39 @@ protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo
                                                           String datePattern, ScmVersion startVersion,
                                                           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 @@ protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo
         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 000000000..cb089cd89
--- /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 000000000..04d1dd5f1
--- /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 000000000..498b267a8
--- /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 000000000..02de1ef84
--- /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 000000000..c5cdb9d7e
--- /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 000000000..e69de29bb
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 000000000..8be6f34ad
--- /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 000000000..b70c8fd36
--- /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 000000000..bcba8937b
--- /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 000000000..eeccc934c
--- /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 000000000..18b87309f
--- /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 000000000..981c454cd
--- /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 000000000..d8c76264b
--- /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 000000000..a5196d1be
--- /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 000000000..ac65cb3c7
--- /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 000000000..01f125c23
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 000000000..6b6bfad97
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 000000000..c8859bdcc
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 000000000..a02d566bd
--- /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 000000000..e99835886
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 000000000..8757376ec
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 000000000..bca48ac73
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 000000000..26470dbae
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 000000000..6c72457a9
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 000000000..395982916
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 000000000..3da7dc7ad
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 000000000..413852b65
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 000000000..53ded79b3
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 000000000..0c410ef5b
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 000000000..32aa1ac8e
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 000000000..94939851d
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 000000000..afce44472
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 000000000..8437a7c3d
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 000000000..314330e20
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 000000000..fe99cd8b9
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 000000000..1612db5a2
--- /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 000000000..461ba2fc7
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 000000000..d3fda4b86
--- /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 000000000..60f2a188e
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 000000000..fbfefebd9
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 000000000..7bc52640e
--- /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 000000000..256052c2c
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 000000000..b543850b6
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 000000000..6c36970db
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 000000000..d0314ac6b
--- /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 000000000..e69de29bb
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 000000000..e69de29bb
diff --git a/pom.xml b/pom.xml
index 2ad0f86d9..e88f76ff6 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>


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


> Extend GitChangeLogCommand by using revision only
> -------------------------------------------------
>
>                 Key: SCM-885
>                 URL: https://issues.apache.org/jira/browse/SCM-885
>             Project: Maven SCM
>          Issue Type: Improvement
>          Components: maven-scm-provider-gitexe, maven-scm-provider-jgit
>    Affects Versions: 1.9.5
>            Reporter: Matthieu Brouillard
>            Assignee: Michael Osipov
>            Priority: Major
>             Fix For: 1.9.6
>
>         Attachments: scm-885-different-behavior-exe-jgit-patch.diff
>
>
> Invoking execution of a GitChangeLogCommand where only the end revision has been set produces a wrong out.
> +Actual result:+
> {{git whatchanged --date=iso  ..END_REVISION_SHA1 -- PROJECT_PATH}}
> +Expected result:+ only the end revison SHA1 is used without the two dots
> {{git whatchanged --date=iso  END_REVISION_SHA1 -- PROJECT_PATH}}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message