Merge branch 'pr-64'

This closes #64
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/list/AbstractCvsListCommand.java b/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/list/AbstractCvsListCommand.java
index 5c7d1d0..aa284b5 100644
--- a/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/list/AbstractCvsListCommand.java
+++ b/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/list/AbstractCvsListCommand.java
@@ -31,6 +31,7 @@
 import org.apache.maven.scm.provider.cvslib.command.CvsCommand;
 import org.apache.maven.scm.provider.cvslib.command.CvsCommandUtils;
 import org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository;
+import org.codehaus.plexus.util.Os;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.cli.Commandline;
 
@@ -47,6 +48,29 @@
                                                 ScmVersion version )
         throws ScmException
     {
+        for ( Boolean supD = rlsSUPPORTSD;; supD = Boolean.FALSE )
+        {
+            ListScmResult res = executeListCommand1( repo, fileSet, recursive, version, supD );
+            if ( res.isSuccess() || supD != null )
+            {
+                if ( rlsSUPPORTSD == null && res.isSuccess() )
+                {
+                    rlsSUPPORTSD = supD == null ? Boolean.TRUE : supD;
+                }
+                return res;
+            }
+            // first attempt failed, support unknown
+            // rls: invalid option -- d
+        }
+    }
+
+    // cvsnt does not support rls -d; Msys/Cygwin do.
+    private static Boolean rlsSUPPORTSD = Os.isFamily( Os.FAMILY_WINDOWS ) ? null : Boolean.TRUE;
+
+    private ListScmResult executeListCommand1( ScmProviderRepository repo, ScmFileSet fileSet, boolean recursive,
+            ScmVersion version, Boolean supD )
+    throws ScmException
+    {
         CvsScmProviderRepository repository = (CvsScmProviderRepository) repo;
 
         Commandline cl = CvsCommandUtils.getBaseCommand( "rls", repository, fileSet, "-n" );
@@ -57,7 +81,10 @@
             cl.createArg().setValue( version.getName() );
         }
 
-        cl.createArg().setValue( "-d" );
+        if ( supD != Boolean.FALSE )
+        {
+            cl.createArg().setValue( "-d" );
+        }
         cl.createArg().setValue( "-e" ); // szakusov: to fix "Unknown file status" problem
 
         if ( recursive )
@@ -65,6 +92,16 @@
             cl.createArg().setValue( "-R" );
         }
 
+        String modulePref = repository.getModule();
+        if ( !StringUtils.isEmpty( modulePref ) )
+        {
+            modulePref += File.separatorChar;
+        }
+        else
+        {
+            modulePref = "";
+        }
+
         for ( Iterator<File> it = fileSet.getFileList().iterator(); it.hasNext(); )
         {
             File target = (File) it.next();
@@ -73,6 +110,7 @@
             {
                 path = path.substring( 1 );
             }
+            path = modulePref + path;
             cl.createArg().setValue( path );
         }
 
diff --git a/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/util/CvsConnection.java b/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/util/CvsConnection.java
index 241e63a..53323aa 100644
--- a/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/util/CvsConnection.java
+++ b/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/util/CvsConnection.java
@@ -399,11 +399,7 @@
     public static boolean processCommand( String[] args, String localPath, CVSListener listener, ScmLogger logger )
         throws Exception
     {
-        // Set up the CVSRoot. Note that it might still be null after this
-        // call if the user has decided to set it with the -d command line
-        // global option
         GlobalOptions globalOptions = new GlobalOptions();
-        globalOptions.setCVSRoot( getCVSRoot( localPath ) );
 
         // Set up any global options specified. These occur before the
         // name of the command to run
@@ -422,14 +418,21 @@
             return false;
         }
 
-        // if we don't have a CVS root by now, the user has messed up
+        // CVSRoot might still be null if the user has NOT decided to set
+        // it with the -d command line global option
         if ( globalOptions.getCVSRoot() == null )
         {
-            if ( logger.isErrorEnabled() )
+            String cvsRoot = getCVSRoot( localPath );
+            if ( cvsRoot == null )
             {
-                logger.error( "No CVS root is set. Check your <repository> information in the POM." );
+                // if we don't have a CVS root by now, the user has messed up
+                if ( logger.isErrorEnabled() )
+                {
+                    logger.error( "No CVS root is set. Check your <repository> information in the POM." );
+                }
+                return false;
             }
-            return false;
+            globalOptions.setCVSRoot( cvsRoot );
         }
 
         // parse the CVS root into its constituent parts
diff --git a/pom.xml b/pom.xml
index 8fb67ea..bb81d87 100644
--- a/pom.xml
+++ b/pom.xml
@@ -341,6 +341,7 @@
           <artifactId>apache-rat-plugin</artifactId>
           <configuration>
             <excludes combine.children="append">
+              <exclude>.checkstyle</exclude>
               <exclude>.gitignore</exclude>
               <exclude>README.txt</exclude>
               <exclude>*.sh</exclude>