[SCM-867] fix ScmWagon has no way to work with CVS in binary mode (#65)
* [SCM-867] fix ScmProvider.add() ignores explicit binary mode
* [SCM-867] fix ScmProvider.checkOut() overload ignores explicit scmVer
* [SCM-867] cvs checkout in binary mode when requested
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
index e0dfb41..dfcc88d 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
@@ -167,9 +167,12 @@
{
login( repository, fileSet );
- // TODO: binary may be dependant on particular files though
- // TODO: set boolean?
- parameters.setString( CommandParameter.BINARY, "false" );
+ if ( parameters.getString( CommandParameter.BINARY , null ) == null )
+ {
+ // TODO: binary may be dependant on particular files though
+ // TODO: set boolean?
+ parameters.setString( CommandParameter.BINARY, "false" );
+ }
return add( repository.getProviderRepository(), fileSet, parameters );
}
@@ -503,6 +506,10 @@
throws ScmException
{
login( repository, fileSet );
+ if ( scmVersion != null && commandParameters.getScmVersion( CommandParameter.SCM_VERSION, null ) == null )
+ {
+ commandParameters.setScmVersion( CommandParameter.SCM_VERSION, scmVersion );
+ }
return checkout( repository.getProviderRepository(), fileSet, commandParameters );
}
diff --git a/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/checkout/AbstractCvsCheckOutCommand.java b/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/checkout/AbstractCvsCheckOutCommand.java
index e47b31d..24df188 100644
--- a/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/checkout/AbstractCvsCheckOutCommand.java
+++ b/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/checkout/AbstractCvsCheckOutCommand.java
@@ -19,8 +19,11 @@
* under the License.
*/
+import org.apache.maven.scm.CommandParameter;
+import org.apache.maven.scm.CommandParameters;
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.checkout.AbstractCheckOutCommand;
import org.apache.maven.scm.command.checkout.CheckOutScmResult;
@@ -43,11 +46,28 @@
extends AbstractCheckOutCommand
implements CvsCommand
{
- /** {@inheritDoc} */
+
+ /**
+ * The overriden {@link #executeCommand(ScmProviderRepository, ScmFileSet, CommandParameters)}
+ * in this class will not call this method!
+ * <p>
+ * {@inheritDoc}
+ */
protected CheckOutScmResult executeCheckOutCommand( ScmProviderRepository repo, ScmFileSet fileSet,
ScmVersion version, boolean recursive, boolean shallow )
throws ScmException
{
+ throw new UnsupportedOperationException( "Should not get here" );
+ }
+
+ @Override
+ public ScmResult executeCommand( ScmProviderRepository repo, ScmFileSet fileSet,
+ CommandParameters parameters )
+ throws ScmException
+ {
+ ScmVersion version = parameters.getScmVersion( CommandParameter.SCM_VERSION, null );
+ boolean binary = parameters.getBoolean( CommandParameter.BINARY, false );
+
if ( fileSet.getBasedir().exists() )
{
try
@@ -69,6 +89,11 @@
cl.setWorkingDirectory( fileSet.getBasedir().getParentFile().getAbsolutePath() );
+ if ( binary )
+ {
+ cl.createArg().setValue( "-kb" );
+ }
+
if ( version != null && !StringUtils.isEmpty( version.getName() ) )
{
cl.createArg().setValue( "-r" );