You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2012/06/22 10:33:40 UTC

svn commit: r1352801 - in /maven/scm/trunk: maven-scm-api/src/main/java/org/apache/maven/scm/ maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/ maven-scm-api/src/main/java/org/apache/maven/scm/manager/ maven-scm-api/src/main/java/org/...

Author: olamy
Date: Fri Jun 22 08:33:37 2012
New Revision: 1352801

URL: http://svn.apache.org/viewvc?rev=1352801&view=rev
Log:
[SCM-679] enhance scm api to support limited number of returned changesets by changelog command.
Submitted by Petr Kozelka.

Added:
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmRequest.java   (with props)
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/ChangeLogScmRequest.java   (with props)
Modified:
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameter.java
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameters.java
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/AbstractChangeLogCommand.java
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/AbstractScmManager.java
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgCommandConstants.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditCommandTest.java
    maven/scm/trunk/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
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogCommandTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommandTest.java
    maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/manager/ScmManagerStub.java
    maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/provider/ScmProviderStub.java

Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameter.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameter.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameter.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameter.java Fri Jun 22 08:33:37 2012
@@ -44,6 +44,8 @@ public class CommandParameter
 
     public static final CommandParameter NUM_DAYS = new CommandParameter( "numDays" );
 
+    public static final CommandParameter LIMIT = new CommandParameter( "limit" );
+
     public static final CommandParameter BRANCH = new CommandParameter( "branch" );
 
     public static final CommandParameter START_SCM_VERSION = new CommandParameter( "startScmVersion" );

Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameters.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameters.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameters.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameters.java Fri Jun 22 08:33:37 2012
@@ -390,4 +390,14 @@ public class CommandParameters
 
         parameters.put( parameter.getName(), value );
     }
+
+    /**
+     * Removes a parameter, silent if it didn't exist.
+     *
+     * @param parameter name of the parameter to remove
+     */
+    public void remove( CommandParameter parameter )
+    {
+        parameters.remove( parameter );
+    }
 }

Added: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmRequest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmRequest.java?rev=1352801&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmRequest.java (added)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmRequest.java Fri Jun 22 08:33:37 2012
@@ -0,0 +1,96 @@
+package org.apache.maven.scm;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.scm.repository.ScmRepository;
+
+import java.io.Serializable;
+
+/**
+ * Base class for SCM wrapped parameters.
+ * Unlike {@link ScmResult}, this is mutable, as its use requires more flexibility when configuring the call.
+ * <p>Most parameters should be stored in {@link #getCommandParameters() parameters} field, as it makes them easy to pass
+ * down to the implementation side.</p>
+ * <p>
+ * Methods in descendant classes should perform all neccessary (un)marshalling so that user can work with nice
+ * semantic typesafe properties.</p>
+ *
+ * @author Petr Kozelka
+ * @since 1.8
+ */
+public class ScmRequest
+    implements Serializable
+{
+    private static final long serialVersionUID = 20120620L;
+
+    private ScmRepository scmRepository;
+
+    private ScmFileSet scmFileSet;
+
+    protected final CommandParameters parameters = new CommandParameters();
+
+    public ScmRequest()
+    {
+    }
+
+    public ScmRequest( ScmRepository scmRepository, ScmFileSet scmFileSet )
+    {
+        this.scmRepository = scmRepository;
+        this.scmFileSet = scmFileSet;
+    }
+
+    public ScmRepository getScmRepository()
+    {
+        return scmRepository;
+    }
+
+    /**
+     * @param scmRepository the source control system
+     */
+    public void setScmRepository( ScmRepository scmRepository )
+    {
+        this.scmRepository = scmRepository;
+    }
+
+    public ScmFileSet getScmFileSet()
+    {
+        return scmFileSet;
+    }
+
+    /**
+     * The files being processed. Implementations can also work with all files from the
+     *      {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
+     * @param scmFileSet working copy and its selected files
+     */
+    public void setScmFileSet( ScmFileSet scmFileSet )
+    {
+        this.scmFileSet = scmFileSet;
+    }
+
+    /**
+     * Holds all parameter values passed to the implementing part.
+     * These parameters are usually translated to commandline options or arguments.
+     * @return command parameters
+     */
+    public CommandParameters getCommandParameters()
+    {
+        return parameters;
+    }
+}

Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmRequest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmRequest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/AbstractChangeLogCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/AbstractChangeLogCommand.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/AbstractChangeLogCommand.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/AbstractChangeLogCommand.java Fri Jun 22 08:33:37 2012
@@ -40,11 +40,13 @@ public abstract class AbstractChangeLogC
     extends AbstractCommand
     implements ChangeLogCommand
 {
+    @Deprecated
     protected abstract ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repository, ScmFileSet fileSet,
                                                                    Date startDate, Date endDate, ScmBranch branch,
                                                                    String datePattern )
         throws ScmException;
 
+    @Deprecated
     protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repository, ScmFileSet fileSet,
                                                           ScmVersion startVersion, ScmVersion endVersion,
                                                           String datePattern )
@@ -66,6 +68,11 @@ public abstract class AbstractChangeLogC
 
         int numDays = parameters.getInt( CommandParameter.NUM_DAYS, 0 );
 
+        Integer limit = parameters.getInt( CommandParameter.LIMIT, -1 );
+        if ( limit < 1 ) {
+            limit = null;
+        }
+
         ScmBranch branch = (ScmBranch) parameters.getScmVersion( CommandParameter.BRANCH, null );
 
         ScmVersion startVersion = parameters.getScmVersion( CommandParameter.START_SCM_VERSION, null );
@@ -105,4 +112,10 @@ public abstract class AbstractChangeLogC
             return executeChangeLogCommand( repository, fileSet, startDate, endDate, branch, datePattern );
         }
     }
+
+    protected ChangeLogScmResult executeChangeLogCommand( ChangeLogScmRequest request )
+        throws ScmException
+    {
+        throw new ScmException( "Unsupported method for this provider." );
+    }
 }

Added: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/ChangeLogScmRequest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/ChangeLogScmRequest.java?rev=1352801&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/ChangeLogScmRequest.java (added)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/ChangeLogScmRequest.java Fri Jun 22 08:33:37 2012
@@ -0,0 +1,176 @@
+package org.apache.maven.scm.command.changelog;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.scm.CommandParameter;
+import org.apache.maven.scm.ScmBranch;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmRequest;
+import org.apache.maven.scm.ScmVersion;
+import org.apache.maven.scm.repository.ScmRepository;
+
+import java.util.Date;
+
+/**
+ * @author Petr Kozelka
+ * @since 1.8
+ */
+public class ChangeLogScmRequest
+    extends ScmRequest
+{
+    private static final long serialVersionUID = 20120620L;
+
+    public ChangeLogScmRequest( ScmRepository scmRepository, ScmFileSet scmFileSet )
+    {
+        super( scmRepository, scmFileSet );
+    }
+
+    public ScmBranch getScmBranch()
+        throws ScmException
+    {
+        return (ScmBranch) parameters.getScmVersion( CommandParameter.BRANCH, null );
+    }
+
+    public void setScmBranch( ScmBranch scmBranch )
+        throws ScmException
+    {
+        parameters.setScmVersion( CommandParameter.BRANCH, scmBranch );
+    }
+
+    public Date getStartDate()
+        throws ScmException
+    {
+        return parameters.getDate( CommandParameter.START_DATE );
+    }
+
+    /**
+     * @param startDate the start date of the period
+     */
+    public void setStartDate( Date startDate )
+        throws ScmException
+    {
+        parameters.setDate( CommandParameter.START_DATE, startDate );
+    }
+
+    public Date getEndDate()
+        throws ScmException
+    {
+        return parameters.getDate( CommandParameter.END_DATE );
+    }
+
+    /**
+     * @param endDate the end date of the period
+     */
+    public void setEndDate( Date endDate )
+        throws ScmException
+    {
+        parameters.setDate( CommandParameter.END_DATE, endDate );
+    }
+
+    public int getNumDays()
+        throws ScmException
+    {
+        return parameters.getInt( CommandParameter.START_DATE );
+    }
+
+    /**
+     * @param numDays the number days before the current time if startdate and enddate are null
+     */
+    public void setNumDays( int numDays )
+        throws ScmException
+    {
+        parameters.setInt( CommandParameter.NUM_DAYS, numDays );
+    }
+
+    public ScmVersion getStartRevision()
+        throws ScmException
+    {
+        return parameters.getScmVersion( CommandParameter.START_SCM_VERSION, null );
+    }
+
+    /**
+     * @param startRevision the start branch/tag/revision
+     */
+    public void setStartRevision( ScmVersion startRevision )
+        throws ScmException
+    {
+        parameters.setScmVersion( CommandParameter.START_SCM_VERSION, startRevision );
+    }
+
+    public ScmVersion getEndRevision()
+        throws ScmException
+    {
+        return parameters.getScmVersion( CommandParameter.END_SCM_VERSION, null );
+    }
+
+    /**
+     * @param endRevision the end branch/tag/revision
+     */
+    public void setEndRevision( ScmVersion endRevision )
+        throws ScmException
+    {
+        parameters.setScmVersion( CommandParameter.END_SCM_VERSION, endRevision );
+    }
+
+    public String getDatePattern()
+        throws ScmException
+    {
+        return parameters.getString( CommandParameter.CHANGELOG_DATE_PATTERN, null );
+    }
+
+    /**
+     * @param datePattern the date pattern used in changelog output returned by scm tool
+     */
+    public void setDatePattern( String datePattern )
+        throws ScmException
+    {
+        parameters.setString( CommandParameter.CHANGELOG_DATE_PATTERN, datePattern );
+    }
+
+    public Integer getLimit()
+        throws ScmException
+    {
+        final int limit = parameters.getInt( CommandParameter.LIMIT, -1 );
+        return limit > 0 ? limit : null;
+    }
+
+    /**
+     * @param limit the maximal count of returned changesets
+     */
+    public void setLimit( Integer limit )
+        throws ScmException
+    {
+        if ( limit != null ) {
+            parameters.setInt( CommandParameter.LIMIT, limit );
+        } else {
+            parameters.remove( CommandParameter.LIMIT );
+        }
+
+    }
+
+    public void setDateRange( Date startDate, Date endDate )
+        throws ScmException
+    {
+        setStartDate( startDate );
+        setEndDate( endDate );
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/ChangeLogScmRequest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/changelog/ChangeLogScmRequest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/AbstractScmManager.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/AbstractScmManager.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/AbstractScmManager.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/AbstractScmManager.java Fri Jun 22 08:33:37 2012
@@ -36,6 +36,7 @@ import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.command.add.AddScmResult;
 import org.apache.maven.scm.command.blame.BlameScmResult;
 import org.apache.maven.scm.command.branch.BranchScmResult;
+import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
 import org.apache.maven.scm.command.checkin.CheckInScmResult;
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
@@ -190,7 +191,7 @@ public abstract class AbstractScmManager
         ScmProvider provider = getProviderByType( providerType );
 
         String scmSpecificUrl = cleanScmUrl( scmUrl.substring( providerType.length() + 5 ) );
-        
+
         ScmProviderRepository providerRepository = provider.makeProviderScmRepository( scmSpecificUrl, delimiter );
 
         return new ScmRepository( providerType, providerRepository );
@@ -355,6 +356,13 @@ public abstract class AbstractScmManager
     }
 
     /** {@inheritDoc} */
+    public ChangeLogScmResult changeLog( ChangeLogScmRequest scmRequest )
+        throws ScmException
+    {
+        return this.getProviderByRepository( scmRequest.getScmRepository() ).changeLog( scmRequest );
+    }
+
+    /** {@inheritDoc} */
     public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
                                          ScmVersion endVersion )
         throws ScmException
@@ -472,7 +480,7 @@ public abstract class AbstractScmManager
     {
         return this.getProviderByRepository( repository ).mkdir( repository, fileSet, message, createInLocal );
     }
-    
+
     /** {@inheritDoc} */
     public RemoveScmResult remove( ScmRepository repository, ScmFileSet fileSet, String message )
         throws ScmException

Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java Fri Jun 22 08:33:37 2012
@@ -26,6 +26,7 @@ import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.command.add.AddScmResult;
 import org.apache.maven.scm.command.blame.BlameScmResult;
 import org.apache.maven.scm.command.branch.BranchScmResult;
+import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
 import org.apache.maven.scm.command.checkin.CheckInScmResult;
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
@@ -184,7 +185,9 @@ public interface ScmManager
      * @param branch the branch/tag
      * @return The SCM result of the changelog command
      * @throws ScmException if any
+     * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
      */
+    @Deprecated
     ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
                                   int numDays, ScmBranch branch )
         throws ScmException;
@@ -203,12 +206,26 @@ public interface ScmManager
      * @param datePattern the date pattern use in changelog output returned by scm tool
      * @return The SCM result of the changelog command
      * @throws ScmException if any
+     * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
      */
+    @Deprecated
     ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
                                   int numDays, ScmBranch branch, String datePattern )
         throws ScmException;
 
     /**
+     * Returns the changes that have happend in the source control system in a certain period of time. This can be
+     * adding, removing, updating, ... of files
+     *
+     * @param scmRequest request wrapping detailed parameters for the changelog command
+     * @return The SCM result of the changelog command
+     * @throws ScmException if any
+     * @since 1.8
+     */
+    ChangeLogScmResult changeLog( ChangeLogScmRequest scmRequest )
+        throws ScmException;
+
+    /**
      * Returns the changes that have happend in the source control system between two tags. This can be adding,
      * removing, updating, ... of files
      * 
@@ -219,7 +236,9 @@ public interface ScmManager
      * @param endVersion the end branch/tag/revision
      * @return The SCM result of the changelog command
      * @throws ScmException if any
+     * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
      */
+    @Deprecated
     ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
                                   ScmVersion endVersion )
         throws ScmException;
@@ -236,7 +255,9 @@ public interface ScmManager
      * @param datePattern the date pattern use in changelog output returned by scm tool
      * @return
      * @throws ScmException if any
+     * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
      */
+    @Deprecated
     ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startRevision,
                                   ScmVersion endRevision, String datePattern )
         throws ScmException;

Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java Fri Jun 22 08:33:37 2012
@@ -32,6 +32,7 @@ import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.command.add.AddScmResult;
 import org.apache.maven.scm.command.blame.BlameScmResult;
 import org.apache.maven.scm.command.branch.BranchScmResult;
+import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
 import org.apache.maven.scm.command.checkin.CheckInScmResult;
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
@@ -273,21 +274,24 @@ public abstract class AbstractScmProvide
                                          int numDays, ScmBranch branch, String datePattern )
         throws ScmException
     {
-        login( repository, fileSet );
-
-        CommandParameters parameters = new CommandParameters();
-
-        parameters.setDate( CommandParameter.START_DATE, startDate );
-
-        parameters.setDate( CommandParameter.END_DATE, endDate );
-
-        parameters.setInt( CommandParameter.NUM_DAYS, numDays );
-
-        parameters.setScmVersion( CommandParameter.BRANCH, branch );
-
-        parameters.setString( CommandParameter.CHANGELOG_DATE_PATTERN, datePattern );
+        final ChangeLogScmRequest request = new ChangeLogScmRequest( repository, fileSet );
+        request.setDateRange( startDate, endDate );
+        request.setNumDays( numDays );
+        request.setScmBranch( branch );
+        request.setDatePattern( datePattern );
+        return changeLog( request );
+    }
 
-        return changelog( repository.getProviderRepository(), fileSet, parameters );
+    /**
+     * {@inheritDoc}
+     */
+    public ChangeLogScmResult changeLog( ChangeLogScmRequest request )
+        throws ScmException
+    {
+        final ScmRepository scmRepository = request.getScmRepository();
+        final ScmFileSet scmFileSet = request.getScmFileSet();
+        login( scmRepository, scmFileSet );
+        return changelog( scmRepository.getProviderRepository(), scmFileSet, request.getCommandParameters() );
     }
 
 

Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java Fri Jun 22 08:33:37 2012
@@ -29,6 +29,7 @@ import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.command.add.AddScmResult;
 import org.apache.maven.scm.command.blame.BlameScmResult;
 import org.apache.maven.scm.command.branch.BranchScmResult;
+import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
 import org.apache.maven.scm.command.checkin.CheckInScmResult;
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
@@ -182,7 +183,6 @@ public interface ScmProvider
      * @param fileSet    the files to branch. Implementations can also give the changes from the
      *                   {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
      * @param branchName the branch name to apply to the files
-     * @param message    the commit message used for the tag creation
      * @return
      * @throws ScmException if any
      * @since 1.3
@@ -224,7 +224,9 @@ public interface ScmProvider
      * @param branch     the branch/tag
      * @return The SCM result of the changelog command
      * @throws ScmException if any
+     * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
      */
+    @Deprecated
     ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
                                   int numDays, ScmBranch branch )
         throws ScmException;
@@ -243,9 +245,9 @@ public interface ScmProvider
      * @param datePattern the date pattern use in changelog output returned by scm tool
      * @return The SCM result of the changelog command
      * @throws ScmException if any
-     * @deprecated you must use {@link ScmProvider#changeLog(org.apache.maven.scm.repository.ScmRepository,
-     *             org.apache.maven.scm.ScmFileSet, java.util.Date, java.util.Date, int, org.apache.maven.scm.ScmBranch, String)}
+     * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
      */
+    @Deprecated
     ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
                                   int numDays, String branch, String datePattern )
         throws ScmException;
@@ -264,12 +266,25 @@ public interface ScmProvider
      * @param datePattern the date pattern use in changelog output returned by scm tool
      * @return The SCM result of the changelog command
      * @throws ScmException if any
+     * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
      */
     ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
                                   int numDays, ScmBranch branch, String datePattern )
         throws ScmException;
 
     /**
+     * Returns the changes that have happend in the source control system in a certain period of time.
+     * This can be adding, removing, updating, ... of files
+     *
+     * @param scmRequest request wrapping detailed parameters for the changelog command
+     * @return The SCM result of the changelog command
+     * @throws ScmException if any
+     * @since 1.8
+     */
+    ChangeLogScmResult changeLog( ChangeLogScmRequest scmRequest )
+        throws ScmException;
+
+    /**
      * Returns the changes that have happend in the source control system between two tags.
      * This can be adding, removing, updating, ... of files
      *
@@ -280,9 +295,9 @@ public interface ScmProvider
      * @param endTag     the end tag
      * @return The SCM result of the changelog command
      * @throws ScmException if any
-     * @deprecated you must use {@link ScmProvider#changeLog(org.apache.maven.scm.repository.ScmRepository,
-     *             org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, org.apache.maven.scm.ScmVersion)}
+     * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
      */
+    @Deprecated
     ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, String startTag, String endTag )
         throws ScmException;
 
@@ -297,7 +312,9 @@ public interface ScmProvider
      * @param endVersion   the end branch/tag/revision
      * @return The SCM result of the changelog command
      * @throws ScmException if any
+     * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
      */
+    @Deprecated
     ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
                                   ScmVersion endVersion )
         throws ScmException;
@@ -314,9 +331,9 @@ public interface ScmProvider
      * @param datePattern the date pattern use in changelog output returned by scm tool
      * @return
      * @throws ScmException if any
-     * @deprecated you must use {@link ScmProvider#changeLog(org.apache.maven.scm.repository.ScmRepository,
-     *             org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, org.apache.maven.scm.ScmVersion, String)}
+     * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
      */
+    @Deprecated
     ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, String startTag, String endTag,
                                   String datePattern )
         throws ScmException;
@@ -333,7 +350,9 @@ public interface ScmProvider
      * @param datePattern   the date pattern use in changelog output returned by scm tool
      * @return
      * @throws ScmException if any
+     * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
      */
+    @Deprecated
     ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startRevision,
                                   ScmVersion endRevision, String datePattern )
         throws ScmException;
@@ -871,7 +890,7 @@ public interface ScmProvider
      * @param repository
      * @param fileSet
      * @param createInLocal
-     * @param messageFile
+     * @param message
      * @return
      * @throws ScmException
      */

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java Fri Jun 22 08:33:37 2012
@@ -128,4 +128,9 @@ public class BazaarConstants
     public static final String VERSION = "version";
 
     public static final String CHECK = "check";
+
+    /**
+     * Limit the output to the first N revisions.
+     */
+    public static final String LIMIT_OPTION = "--limit";
 }
\ No newline at end of file

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogCommand.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogCommand.java Fri Jun 22 08:33:37 2012
@@ -20,6 +20,7 @@ package org.apache.maven.scm.provider.ba
  */
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -28,8 +29,10 @@ import org.apache.maven.scm.ScmBranch;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.command.Command;
 import org.apache.maven.scm.command.changelog.AbstractChangeLogCommand;
+import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
 import org.apache.maven.scm.command.changelog.ChangeLogSet;
 import org.apache.maven.scm.provider.ScmProviderRepository;
@@ -45,15 +48,49 @@ public class BazaarChangeLogCommand
     extends AbstractChangeLogCommand
     implements Command
 {
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    protected ChangeLogScmResult executeChangeLogCommand( ChangeLogScmRequest request )
+        throws ScmException
+    {
+        final ScmVersion startVersion = request.getStartRevision();
+        final ScmVersion endVersion = request.getEndRevision();
+        final ScmFileSet fileSet = request.getScmFileSet();
+        final String datePattern = request.getDatePattern();
+        if ( startVersion != null || endVersion != null ) {
+            final ScmProviderRepository scmProviderRepository = request.getScmRepository().getProviderRepository();
+            return executeChangeLogCommand( scmProviderRepository, fileSet, startVersion, endVersion, datePattern );
+        }
+        return executeChangeLogCommand( fileSet, request.getStartDate(), request.getEndDate(),
+            datePattern, request.getLimit() );
+    }
+
     /** {@inheritDoc} */
     protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet,
                                                           Date startDate, Date endDate, ScmBranch branch,
                                                           String datePattern )
         throws ScmException
     {
-        String[] cmd = new String[]{BazaarConstants.LOG_CMD, BazaarConstants.VERBOSE_OPTION};
+        return executeChangeLogCommand( fileSet, startDate, endDate, datePattern, null );
+    }
+
+    private ChangeLogScmResult executeChangeLogCommand( ScmFileSet fileSet,
+                                                        Date startDate, Date endDate,
+                                                        String datePattern, Integer limit )
+        throws ScmException
+    {
+        List<String> cmd = new ArrayList<String>();
+        cmd.addAll( Arrays.asList( BazaarConstants.LOG_CMD, BazaarConstants.VERBOSE_OPTION ) );
+        if ( limit != null && limit > 0 ) {
+            cmd.add( BazaarConstants.LIMIT_OPTION );
+            cmd.add( Integer.toString( limit ) );
+        }
+
         BazaarChangeLogConsumer consumer = new BazaarChangeLogConsumer( getLogger(), datePattern );
-        ScmResult result = BazaarUtils.execute( consumer, getLogger(), fileSet.getBasedir(), cmd );
+        ScmResult result = BazaarUtils.execute( consumer, getLogger(), fileSet.getBasedir(),
+            cmd.toArray( new String[cmd.size()] ) );
 
         List<ChangeSet> logEntries = consumer.getModifications();
         List<ChangeSet> inRangeAndValid = new ArrayList<ChangeSet>();

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgCommandConstants.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgCommandConstants.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgCommandConstants.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgCommandConstants.java Fri Jun 22 08:33:37 2012
@@ -152,4 +152,9 @@ public final class HgCommandConstants
 
     public static final String CLEAN_OPTION = "-c";
 
+    /**
+     * limit number of changes displayed
+     */
+    public static final String LIMIT_OPTION = "--limit";
+
 }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogCommand.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogCommand.java Fri Jun 22 08:33:37 2012
@@ -27,6 +27,7 @@ import org.apache.maven.scm.ScmResult;
 import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.command.Command;
 import org.apache.maven.scm.command.changelog.AbstractChangeLogCommand;
+import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
 import org.apache.maven.scm.command.changelog.ChangeLogSet;
 import org.apache.maven.scm.provider.ScmProviderRepository;
@@ -34,6 +35,8 @@ import org.apache.maven.scm.provider.hg.
 import org.apache.maven.scm.provider.hg.command.HgCommandConstants;
 
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -49,11 +52,37 @@ public class HgChangeLogCommand
     /**
      * {@inheritDoc}
      */
+    @Override
+    protected ChangeLogScmResult executeChangeLogCommand( ChangeLogScmRequest request )
+            throws ScmException
+    {
+        final ScmVersion startVersion = request.getStartRevision();
+        final ScmVersion endVersion = request.getEndRevision();
+        final ScmFileSet fileSet = request.getScmFileSet();
+        final String datePattern = request.getDatePattern();
+        if ( startVersion != null || endVersion != null ) {
+            final ScmProviderRepository scmProviderRepository = request.getScmRepository().getProviderRepository();
+            return  executeChangeLogCommand( scmProviderRepository, fileSet, startVersion, endVersion, datePattern );
+        }
+        return executeChangeLogCommand( fileSet, request.getStartDate(), request.getEndDate(),
+            datePattern, request.getLimit() );
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository scmProviderRepository,
                                                           ScmFileSet fileSet, Date startDate, Date endDate,
                                                           ScmBranch branch, String datePattern )
         throws ScmException
     {
+        return executeChangeLogCommand( fileSet, startDate, endDate, datePattern, null );
+    }
+
+    private ChangeLogScmResult executeChangeLogCommand( ScmFileSet fileSet, Date startDate, Date endDate,
+                                                          String datePattern, Integer limit )
+        throws ScmException
+    {
         SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
         StringBuilder dateInterval = new StringBuilder();
         // TRICK: Mercurial 1.9.3 don't accept 1970-01-01
@@ -62,10 +91,17 @@ public class HgChangeLogCommand
         dateInterval.append( " to " );
         dateInterval.append( dateFormat.format( endDate == null ? new Date() : endDate ) ); // Upto now
 
-        String[] cmd = new String[]{ HgCommandConstants.LOG_CMD, HgCommandConstants.VERBOSE_OPTION,
-            HgCommandConstants.NO_MERGES_OPTION, HgCommandConstants.DATE_OPTION, dateInterval.toString() };
+        List<String> cmd = new ArrayList<String>();
+        cmd.addAll( Arrays.asList( HgCommandConstants.LOG_CMD, HgCommandConstants.VERBOSE_OPTION,
+            HgCommandConstants.NO_MERGES_OPTION, HgCommandConstants.DATE_OPTION, dateInterval.toString() ));
+
+        if ( limit != null && limit > 0 ) {
+            cmd.add( HgCommandConstants.LIMIT_OPTION );
+            cmd.add( Integer.toString( limit ) );
+        }
+
         HgChangeLogConsumer consumer = new HgChangeLogConsumer( getLogger(), datePattern );
-        ScmResult result = HgUtils.execute( consumer, getLogger(), fileSet.getBasedir(), cmd );
+        ScmResult result = HgUtils.execute( consumer, getLogger(), fileSet.getBasedir(), cmd.toArray( new String[ cmd.size() ] ) );
 
         List<ChangeSet> logEntries = consumer.getModifications();
         ChangeLogSet changeLogSet = new ChangeLogSet( logEntries, startDate, endDate );

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditCommand.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditCommand.java Fri Jun 22 08:33:37 2012
@@ -92,6 +92,7 @@ public class PerforceEditCommand
 
     public static Commandline createCommandLine( PerforceScmProviderRepository repo, File workingDirectory,
                                                  ScmFileSet files )
+        throws ScmException
     {
         Commandline command = PerforceScmProvider.createP4Command( repo, workingDirectory );
 
@@ -100,17 +101,17 @@ public class PerforceEditCommand
         try
         {
             String candir = workingDirectory.getCanonicalPath();
-            List<File> fs = files.getFileList();
-            for ( int i = 0; i < fs.size(); i++ )
+
+            for ( File f : files.getFileList() )
             {
                 File file = null;
-                if ( fs.get( i ).isAbsolute() )
+                if ( f.isAbsolute() )
                 {
-                    file = new File( fs.get( i ).getPath() );
+                    file = new File( f.getPath() );
                 }
                 else
                 {
-                    file = new File( workingDirectory, fs.get( i ).getPath() );
+                    file = new File( workingDirectory, f.getPath() );
                 }
                 // I want to use relative paths to add files to make testing
                 // simpler.
@@ -127,7 +128,7 @@ public class PerforceEditCommand
         }
         catch ( IOException e )
         {
-            e.printStackTrace();
+            throw new ScmException( e.getMessage(), e );
         }
         return command;
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditCommandTest.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditCommandTest.java Fri Jun 22 08:33:37 2012
@@ -19,19 +19,19 @@ package org.apache.maven.scm.provider.pe
  * under the License.
  */
 
-import java.io.File;
-import java.util.Arrays;
-
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmTestCase;
 import org.apache.maven.scm.provider.perforce.repository.PerforceScmProviderRepository;
 import org.apache.maven.scm.repository.ScmRepository;
 import org.codehaus.plexus.util.cli.Commandline;
 
+import java.io.File;
+import java.util.Arrays;
+
 /**
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
  * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
- * @version $Id$
+ * @version $Id$
  */
 public class PerforceEditCommandTest
     extends ScmTestCase
@@ -42,49 +42,49 @@ public class PerforceEditCommandTest
         throws Exception
     {
         File workingDir = new File( "." );
-        ScmFileSet files = new ScmFileSet( new File( "." ), Arrays.asList(
-                new File[]{ new File( "foo.xml" ), new File( "bar.xml" ) } ) );
-        String commandLineString = cmdPrefix + workingDir.getAbsolutePath() + " edit";
-        for(File file : files.getFileList()) {
-            commandLineString += " " + file.getPath();
-        }
-        testCommandLine( "scm:perforce://depot/projects/pathname",
-                commandLineString, workingDir, files );
+        ScmFileSet files = new ScmFileSet( new File( "." ), Arrays.asList(
+            new File[]{ new File( "foo.xml" ), new File( "bar.xml" ) } ) );
+        String commandLineString = cmdPrefix + workingDir.getAbsolutePath() + " edit";
+        for ( File file : files.getFileList() )
+        {
+            commandLineString += " " + file.getPath();
+        }
+        testCommandLine( "scm:perforce://depot/projects/pathname", commandLineString, workingDir, files );
     }
 
     public void testRelativeCommandLine()
         throws Exception
     {
         File workingDir = new File( "baz/qux" );
-        ScmFileSet files = new ScmFileSet( new File( "." ), Arrays.asList(
-                new File[]{ new File( "foo.xml" ), new File( "bar.xml" ) } ) );
-        String commandLineString = cmdPrefix + workingDir.getAbsolutePath() + " edit";
-        for(File file : files.getFileList()) {
-            commandLineString += " " + file.getPath();
-        }
-        testCommandLine( "scm:perforce://depot/projects/pathname",
-                commandLineString, workingDir, files );
+        ScmFileSet files = new ScmFileSet( new File( "." ), Arrays.asList(
+            new File[]{ new File( "foo.xml" ), new File( "bar.xml" ) } ) );
+        String commandLineString = cmdPrefix + workingDir.getAbsolutePath() + " edit";
+        for ( File file : files.getFileList() )
+        {
+            commandLineString += " " + file.getPath();
+        }
+        testCommandLine( "scm:perforce://depot/projects/pathname", commandLineString, workingDir, files );
+    }
+
+    public void testAbsoluteCommandLine()
+        throws Exception
+    {
+        File workingDir = new File( "." ).getAbsoluteFile();
+        ScmFileSet files = new ScmFileSet( new File( "." ), Arrays.asList(
+            new File[]{ new File( "foo.xml" ), new File( "bar.xml" ) } ) );
+        String commandLineString = cmdPrefix + workingDir.getAbsolutePath() + " edit";
+        for ( File file : files.getFileList() )
+        {
+            commandLineString += " " + file.getPath();
+        }
+        testCommandLine( "scm:perforce://depot/projects/pathname", commandLineString, workingDir, files );
     }
 
-    public void testAbsoluteCommandLine()
-            throws Exception
-        {
-            File workingDir = new File( "." ).getAbsoluteFile();
-            ScmFileSet files = new ScmFileSet( new File( "." ), Arrays.asList(
-                    new File[]{ new File( "foo.xml" ).getAbsoluteFile(), new File( "bar.xml" ).getAbsoluteFile() } ) );
-            String commandLineString = cmdPrefix + workingDir.getAbsolutePath() + " edit";
-            for(File file : files.getFileList()) {
-                commandLineString += " " + file.getPath();
-            }
-            testCommandLine( "scm:perforce://depot/projects/pathname",
-                    commandLineString, workingDir, files );
-        }
-
     // ----------------------------------------------------------------------
     //
     // ----------------------------------------------------------------------
 
-    private void testCommandLine( String scmUrl, String commandLine, File workingDir, ScmFileSet files )
+    private void testCommandLine( String scmUrl, String commandLine, File workingDir, ScmFileSet files )
         throws Exception
     {
         ScmRepository repository = getScmManager().makeScmRepository( scmUrl );

Modified: maven/scm/trunk/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
URL: http://svn.apache.org/viewvc/maven/scm/trunk/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?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/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 (original)
+++ maven/scm/trunk/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 Fri Jun 22 08:33:37 2012
@@ -24,6 +24,7 @@ import org.apache.maven.scm.ScmException
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.command.changelog.AbstractChangeLogCommand;
+import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
 import org.apache.maven.scm.command.changelog.ChangeLogSet;
 import org.apache.maven.scm.provider.ScmProviderRepository;
@@ -74,8 +75,30 @@ public class GitChangeLogCommand
                                                           ScmVersion endVersion )
         throws ScmException
     {
+        return executeChangeLogCommand( repo, fileSet, startDate, endDate, branch, datePattern, startVersion, endVersion, null );
+    }
+
+    @Override
+    protected ChangeLogScmResult executeChangeLogCommand( ChangeLogScmRequest request )
+        throws ScmException
+    {
+        final ScmVersion startVersion = request.getStartRevision();
+        final ScmVersion endVersion = request.getEndRevision();
+        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() );
+    }
+
+    protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet,
+                                                          Date startDate, Date endDate, ScmBranch branch,
+                                                          String datePattern, ScmVersion startVersion,
+                                                          ScmVersion endVersion, Integer limit )
+        throws ScmException
+    {
         Commandline cl = createCommandLine( (GitScmProviderRepository) repo, fileSet.getBasedir(), branch, startDate,
-                                            endDate, startVersion, endVersion );
+                                            endDate, startVersion, endVersion, limit );
 
         GitChangeLogConsumer consumer = new GitChangeLogConsumer( getLogger(), datePattern );
 
@@ -108,6 +131,13 @@ public class GitChangeLogCommand
                                                  ScmBranch branch, Date startDate, Date endDate,
                                                  ScmVersion startVersion, ScmVersion endVersion )
     {
+        return createCommandLine( repository, workingDirectory, branch, startDate, endDate, startVersion, endVersion, null );
+    }
+
+    static Commandline createCommandLine( GitScmProviderRepository repository, File workingDirectory,
+                                                 ScmBranch branch, Date startDate, Date endDate,
+                                                 ScmVersion startVersion, ScmVersion endVersion, Integer limit )
+    {
         SimpleDateFormat dateFormat = new SimpleDateFormat( DATE_FORMAT );
         dateFormat.setTimeZone( TimeZone.getTimeZone( "GMT" ) );
 
@@ -150,6 +180,11 @@ public class GitChangeLogCommand
 
         }
 
+        if (limit != null && limit > 0)
+        {
+            cl.createArg().setValue( "--max-count=" + limit );
+        }
+
         if ( branch != null && branch.getName() != null && branch.getName().length() > 0 )
         {
             cl.createArg().setValue( branch.getName() );

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogCommandTest.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitChangeLogCommandTest.java Fri Jun 22 08:33:37 2012
@@ -51,8 +51,16 @@ public class GitChangeLogCommandTest
     public void testCommandLineNoDates()
         throws Exception
     {
-        testCommandLine( "scm:git:http://foo.com/git", null, (Date) null, (Date) null, 
-                         "git whatchanged --date=iso" 
+        testCommandLine( "scm:git:http://foo.com/git", null, (Date) null, (Date) null, 40,
+                         "git whatchanged --date=iso --max-count=40"
+                         + " -- " + workingDirectory );
+    }
+
+    public void testCommandLineNoDatesLimitedCount()
+        throws Exception
+    {
+        testCommandLine( "scm:git:http://foo.com/git", null, (Date) null, (Date) null,
+                         "git whatchanged --date=iso"
                          + " -- " + workingDirectory );
     }
 
@@ -158,12 +166,18 @@ public class GitChangeLogCommandTest
     private void testCommandLine( String scmUrl, ScmBranch branch, Date startDate, Date endDate, String commandLine )
         throws Exception
     {
+        testCommandLine( scmUrl, branch, startDate, endDate, null, commandLine );
+    }
+
+    private void testCommandLine( String scmUrl, ScmBranch branch, Date startDate, Date endDate, Integer limit, String commandLine )
+        throws Exception
+    {
         ScmRepository repository = getScmManager().makeScmRepository( scmUrl );
 
         GitScmProviderRepository gitRepository = (GitScmProviderRepository) repository.getProviderRepository();
 
         Commandline cl = GitChangeLogCommand.createCommandLine( gitRepository, workingDirectory, branch, startDate,
-                                                                endDate, null, null );
+                                                                endDate, null, null, limit );
 
         assertCommandLine( commandLine, workingDirectory, cl );
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommand.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommand.java Fri Jun 22 08:33:37 2012
@@ -25,6 +25,7 @@ import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmTag;
 import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.command.changelog.AbstractChangeLogCommand;
+import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
 import org.apache.maven.scm.command.changelog.ChangeLogSet;
 import org.apache.maven.scm.provider.ScmProviderRepository;
@@ -54,31 +55,46 @@ public class SvnChangeLogCommand
     private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss Z";
 
     /** {@inheritDoc} */
+    @Deprecated
     protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet,
                                                           ScmVersion startVersion, ScmVersion endVersion,
                                                           String datePattern )
         throws ScmException
     {
-        return executeChangeLogCommand( repo, fileSet, null, null, null, datePattern, startVersion, endVersion );
+        return executeChangeLogCommand( repo, fileSet, null, null, null, datePattern, startVersion, endVersion, null );
     }
 
     /** {@inheritDoc} */
+    @Deprecated
     protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet,
                                                           Date startDate, Date endDate, ScmBranch branch,
                                                           String datePattern )
         throws ScmException
     {
-        return executeChangeLogCommand( repo, fileSet, startDate, endDate, branch, datePattern, null, null );
+        return executeChangeLogCommand( repo, fileSet, startDate, endDate, branch, datePattern, null, null, null );
     }
 
-    protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet,
+    @Override
+    protected ChangeLogScmResult executeChangeLogCommand( ChangeLogScmRequest request )
+        throws ScmException
+    {
+        final ScmVersion startVersion = request.getStartRevision();
+        final ScmVersion endVersion = request.getEndRevision();
+        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() );
+    }
+
+    private ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet,
                                                           Date startDate, Date endDate, ScmBranch branch,
                                                           String datePattern, ScmVersion startVersion,
-                                                          ScmVersion endVersion )
+                                                          ScmVersion endVersion, Integer limit )
         throws ScmException
     {
         Commandline cl = createCommandLine( (SvnScmProviderRepository) repo, fileSet.getBasedir(), branch, startDate,
-                                            endDate, startVersion, endVersion );
+                                            endDate, startVersion, endVersion, limit );
 
         SvnChangeLogConsumer consumer = new SvnChangeLogConsumer( getLogger(), datePattern );
 
@@ -120,6 +136,14 @@ public class SvnChangeLogCommand
                                                  ScmBranch branch, Date startDate, Date endDate,
                                                  ScmVersion startVersion, ScmVersion endVersion )
     {
+        return createCommandLine(repository, workingDirectory, branch,
+            startDate, endDate, startVersion, endVersion, null);
+    }
+
+    public static Commandline createCommandLine( SvnScmProviderRepository repository, File workingDirectory,
+                                                 ScmBranch branch, Date startDate, Date endDate,
+                                                 ScmVersion startVersion, ScmVersion endVersion, Integer limit )
+    {
         SimpleDateFormat dateFormat = new SimpleDateFormat( DATE_FORMAT );
 
         dateFormat.setTimeZone( TimeZone.getTimeZone( "GMT" ) );
@@ -132,6 +156,12 @@ public class SvnChangeLogCommand
 
         // TODO: May want to add some kind of support for --stop-on-copy and --limit NUM
 
+        if (limit != null && limit > 0)
+        {
+            cl.createArg().setValue( "--limit" );
+            cl.createArg().setValue( Integer.toString( limit ) );
+        }
+
         if ( startDate != null )
         {
             cl.createArg().setValue( "-r" );

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommandTest.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommandTest.java Fri Jun 22 08:33:37 2012
@@ -45,6 +45,13 @@ public class SvnChangeLogCommandTest
                          "svn --non-interactive log -v http://foo.com/svn/trunk" );
     }
 
+    public void testCommandLineNoDatesLimitedCount()
+        throws Exception
+    {
+        testCommandLine( "scm:svn:http://foo.com/svn/trunk", null, null, null, 40,
+                         "svn --non-interactive log -v --limit 40 http://foo.com/svn/trunk" );
+    }
+
     public void testCommandLineWithDates()
         throws Exception
     {
@@ -155,6 +162,12 @@ public class SvnChangeLogCommandTest
     private void testCommandLine( String scmUrl, ScmBranch branch, Date startDate, Date endDate, String commandLine )
         throws Exception
     {
+        testCommandLine( scmUrl, branch, startDate, endDate, null, commandLine);
+    }
+
+    private void testCommandLine( String scmUrl, ScmBranch branch, Date startDate, Date endDate, Integer limit, String commandLine )
+        throws Exception
+    {
         File workingDirectory = getTestFile( "target/svn-update-command-test" );
 
         ScmRepository repository = getScmManager().makeScmRepository( scmUrl );
@@ -162,7 +175,7 @@ public class SvnChangeLogCommandTest
         SvnScmProviderRepository svnRepository = (SvnScmProviderRepository) repository.getProviderRepository();
 
         Commandline cl = SvnChangeLogCommand.createCommandLine( svnRepository, workingDirectory, branch, startDate,
-                                                                endDate, null, null );
+                                                                endDate, null, null, limit );
 
         assertCommandLine( commandLine, workingDirectory, cl );
     }

Modified: maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/manager/ScmManagerStub.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/manager/ScmManagerStub.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/manager/ScmManagerStub.java (original)
+++ maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/manager/ScmManagerStub.java Fri Jun 22 08:33:37 2012
@@ -26,6 +26,7 @@ import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.command.add.AddScmResult;
 import org.apache.maven.scm.command.blame.BlameScmResult;
 import org.apache.maven.scm.command.branch.BranchScmResult;
+import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
 import org.apache.maven.scm.command.checkin.CheckInScmResult;
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
@@ -226,6 +227,14 @@ public class ScmManagerStub
     }
 
     /** {@inheritDoc} */
+    public ChangeLogScmResult changeLog( ChangeLogScmRequest request )
+        throws ScmException
+    {
+        final ScmRepository repository = request.getScmRepository();
+        return this.getProviderByRepository( repository ).changeLog( request );
+    }
+
+    /** {@inheritDoc} */
     public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
                                          ScmVersion endVersion )
         throws ScmException

Modified: maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/provider/ScmProviderStub.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/provider/ScmProviderStub.java?rev=1352801&r1=1352800&r2=1352801&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/provider/ScmProviderStub.java (original)
+++ maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/provider/ScmProviderStub.java Fri Jun 22 08:33:37 2012
@@ -30,6 +30,7 @@ import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.command.add.AddScmResult;
 import org.apache.maven.scm.command.blame.BlameScmResult;
 import org.apache.maven.scm.command.branch.BranchScmResult;
+import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
 import org.apache.maven.scm.command.checkin.CheckInScmResult;
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
@@ -480,6 +481,12 @@ public class ScmProviderStub
         return getChangeLogScmResult();
     }
 
+    public ChangeLogScmResult changeLog( ChangeLogScmRequest scmRequest )
+        throws ScmException
+    {
+        return getChangeLogScmResult();
+    }
+
     /**
      * {@inheritDoc}
      */