 ------
 Other SCM Commands
 ------
 Pete Marvin King
 ------
 20 July 2006
 ------ 
 
Other SCM Commands

 The scm plugin requires the scm to be configured in the <<<pom.xml>>>.
 
+---------+
  [...]
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>SCM Sample Project</name>
  <url>http://somecompany.com</url>
  <scm>
    <connection>scm:svn:http://somerepository.com/svn_repo/trunk</connection>
    <developerConnection>scm:svn:https://somerepository.com/svn_repo/trunk</developerConnection>
    <url>http://somerepository.com/view.cvs</url>
  </scm>
  [...]
+---------+

 If you want to change the default scm provider implementation, for exemple you want to use the native cvs
 instead of the pure java implementation, you must configure your plugin like that:

+-----------+
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-scm-plugin</artifactId>
        <configuration>
          <providerImplementations>
            <cvs>cvs_native</cvs>
          </providerImplementations>
        </configuration>
      </plugin>
      [...]
    </plugins
    [...]
  </build>
  [...]
+-----------+  

 Once the scm has been configured, scm operations can be performed.
  
* changelog - displays the project commit changes for each revisions

    <<<pom.xml>>> configuration :
    
+-----------+
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-scm-plugin</artifactId>
        <version>1.0</version>
        <configuration>
          <startDate>YYYY-MM-DD</startDate>
          <endDate>YYYY-MM-DD</endDate>
        </configuration>
      </plugin>
      [...]
    </plugins
    [...]
  </build>
  [...]
+-----------+  
    
    Command :
      
+---------+
  mvn scm:changelog
+---------+  
    
    or you can specify the startDate and endDate on the commandline
    
+---------+
  mvn -DstartDate=YYYY-MM-DD -DendDate=YYYY-MM-DD scm:changelog
+---------+  
      
  
* diff

    <<<pom.xml>>> configuration :
    
+-----------+
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-scm-plugin</artifactId>
        <version>1.0</version>
        <configuration>
          <startRevision>connection</startRevision>
          <endRevision>connection</endRevision>                   
        </configuration>
      </plugin>
      [...]
    </plugins
    [...]
  </build>
  [...]
+-----------+  

    Command :
        
+---------+
   mvn scm:diff
+---------+  
    
    or you can specify the startRevision and endRevision in the command line
    
+---------+
   mvn -DstartRevision=<revision> -DendRevision=<revision> scm:diff
+---------+  
        
* edit - set the edit status of the file, locking the project sources if supported.

    Command :
        
+---------+
  mvn scm:edit
+---------+  
    
* status - displays the modified files in the project.

    Command :
        
+---------+
   mvn scm:status
+---------+  
    
* tag

    <<<pom.xml>>> configuration :
    
+-----------+
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-scm-plugin</artifactId>
        <version>1.0</version>
        <configuration>
          <tag>tag name</tag>
        </configuration>
      </plugin>
      [...]
    </plugins
    [...]
  </build>
  [...]
+-----------+  

    Command :
        
+---------+
   mvn scm:tag
+---------+    

     or you can specify the tag name in the command line
     
+---------+
   mvn -Dtag="<tag name>" scm:tag
+---------+    
       
* unedit - unset the edit status of the project sources and unlocking it if supported.

    Command :
        
+---------+
   mvn scm:unedit
+---------+    
   
* validate - check if the scm urls configured in the <<<pom.xml>>> is valid.

    Command :
       
+---------+
   mvn scm:validate
+---------+  
  
    or passing the scmConnection or/and the developerConnection in the command line
    
+---------+
   mvn -DscmConnection="<scm url>" -DscmDeveloperConnection="<scm url>" scm:validate
+---------+  
    
