diff --git a/changelog/plugin.properties b/changelog/plugin.properties index beaaee72..b7835d19 100644 --- a/changelog/plugin.properties +++ b/changelog/plugin.properties @@ -23,4 +23,3 @@ maven.changelog.basedir=${basedir} maven.changelog.range = 30 -maven.changelog.factory = org.apache.maven.cvslib.CvsChangeLogFactory diff --git a/changelog/src/main/org/apache/maven/changelog/ChangeLog.java b/changelog/src/main/org/apache/maven/changelog/ChangeLog.java index 6e282b59..23b7e8fb 100644 --- a/changelog/src/main/org/apache/maven/changelog/ChangeLog.java +++ b/changelog/src/main/org/apache/maven/changelog/ChangeLog.java @@ -29,6 +29,8 @@ import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List; +import java.util.HashMap; +import java.util.Map; import java.util.Properties; // commons imports import org.apache.commons.logging.Log; @@ -48,7 +50,7 @@ import org.apache.maven.project.Developer; * @author dIon Gillard * @author Stefan Bodewig * @author Peter Donald - * @version $Id: ChangeLog.java,v 1.6 2004/07/08 08:36:51 evenisse Exp $ + * @version $Id$ */ public class ChangeLog { @@ -71,8 +73,9 @@ public class ChangeLog * The classname of our ChangeLogFactory, defaulting to Maven's built in * CVS factory. */ - private String clFactoryClass = - "org.apache.maven.cvslib.CvsChangeLogFactory"; + private String clFactoryClass = null; + + private static final Map FACTORIES = new HashMap(); /** the connection string used to access the SCM */ private String connection; @@ -94,6 +97,15 @@ public class ChangeLog /** output encoding for the xml document */ private String outputEncoding; + static + { + FACTORIES.put( "cvs", "org.apache.maven.cvslib.CvsChangeLogFactory" ); + FACTORIES.put( "svn", "org.apache.maven.svnlib.SvnChangeLogFactory" ); + FACTORIES.put( "clearcase", "org.apache.maven.clearcaselib.ClearcaseChangeLogFactory" ); + FACTORIES.put( "perforce", "org.apache.maven.perforcelib.PerforceChangeLogFactory" ); + FACTORIES.put( "starteam", "org.apache.maven.starteamlib.StarteamChangeLogFactory" ); + } + /** * Set the ChangeLogFactory class name. If this isn't set, the factory * defaults to Maven's build in CVS factory. @@ -261,6 +273,24 @@ public class ChangeLog */ private ChangeLogFactory createFactory() throws IOException { + if ( clFactoryClass == null ) + { + if ( connection == null || connection.length() < 7 || !connection.startsWith( "scm:" ) ) + { + LOG.warn( "Connection does not appear valid" ); + } + else + { + clFactoryClass = (String) FACTORIES.get( connection.substring( 4, 7 ) ); + } + + if ( clFactoryClass == null ) + { + LOG.warn( "Could not derive factory from connection: using CVS (valid factories are: " + FACTORIES.keySet() + ")" ); + clFactoryClass = "org.apache.maven.cvslib.CvsChangeLogFactory"; + } + } + try { Class clazz = Class.forName(clFactoryClass); diff --git a/changelog/xdocs/changes.xml b/changelog/xdocs/changes.xml index 34740c45..3cdb3857 100644 --- a/changelog/xdocs/changes.xml +++ b/changelog/xdocs/changes.xml @@ -26,6 +26,7 @@ + Guess factory from connection Allow local CVSROOT to only have 5 tokens (no host name) diff --git a/changelog/xdocs/index.xml b/changelog/xdocs/index.xml index 2082018f..ea34c0ed 100644 --- a/changelog/xdocs/index.xml +++ b/changelog/xdocs/index.xml @@ -44,14 +44,6 @@ document.

-
-

- The changelog plugin defaults to a CVS parser. To use an alternate - SCM, please set the maven.changelog.factory property. - For more information, please see the - Changelog properties reference. -

-

This plugin does not use the cvs executable on your