From 3234763b592f089ae77da15b24423d63ebb0cc5b Mon Sep 17 00:00:00 2001
From: brett
Date: Mon, 28 Mar 2005 22:23:56 +0000
Subject: [PATCH] PR: MPCHANGELOG-23
Auto select factory from connection
git-svn-id: https://svn.apache.org/repos/asf/maven/maven-1/plugins/trunk@159318 13f79535-47bb-0310-9956-ffa450edef68
---
changelog/plugin.properties | 1 -
.../org/apache/maven/changelog/ChangeLog.java | 36 +++++++++++++++++--
changelog/xdocs/changes.xml | 1 +
changelog/xdocs/index.xml | 8 -----
4 files changed, 34 insertions(+), 12 deletions(-)
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